工作流管理 + 任务调度 + 依赖解析。
项目描述
Luigi是一个Python(3.6、3.7、3.8、3.9、3.10、3.11、3.12已测试)包,可以帮助您构建复杂的批处理作业管道。它处理依赖解析、工作流管理、可视化、处理故障、命令行集成等。
入门
运行 pip install luigi 从PyPI安装最新稳定版本。最新发布版本的文档托管在readthedocs上。
运行 pip install luigi[toml] 安装具有基于TOML配置支持的Luigi。
对于最新代码,运行 pip install git+https://github.com/spotify/luigi.git。最新的文档也提供。
背景
Luigi的目的是解决通常与长时间运行的批处理过程相关的所有管道问题。您想要链接许多任务、自动化它们,并且故障 将会 发生。这些任务可以是任何东西,但通常是像Hadoop作业、在数据库中导入/导出数据、运行机器学习算法或任何其他类似的长运行任务。
存在其他专注于数据处理底层方面的软件包,例如Hive、Pig或Cascading。Luigi并不是用来替代这些框架的。相反,它可以帮助您将许多任务拼接在一起,每个任务都可以是一个Hive查询、一个Java中的Hadoop作业、一个Scala或Python中的Spark作业、一个Python代码片段、从数据库导出表或任何其他东西。您可以构建包含数千个任务并且需要数天或数周才能完成的长期运行的流水线。Luigi负责很多工作流程管理,以便您可以专注于任务本身及其依赖关系。
您可以构建几乎任何想要的任务,但Luigi还提供了一些常用的任务模板的工具箱,您可以使用这些模板。它包括在Hadoop中运行Python mapreduce作业的支持,以及Hive和Pig作业的支持。它还提供了HDFS文件系统抽象和本地文件,确保所有文件系统操作都是原子的。这很重要,因为它意味着您的数据管道不会在包含部分数据的状态下崩溃。
可视化页面
Luigi服务器还提供了网页界面,因此您可以搜索和筛选所有任务。
依赖关系图示例
为了让您了解Luigi的功能,这是我们从生产环境中运行的屏幕截图。使用Luigi的可视化工具,我们可以获得工作流程依赖关系图的美好视觉概览。每个节点代表一个必须运行的任务。绿色任务已经完成,而黄色任务尚未运行。这些任务大多是Hadoop作业,但也有一些本地运行并构建数据文件的东西。
哲学
在概念上,Luigi类似于GNU Make,其中您有一些任务,而这些任务反过来可能依赖于其他任务。它也有一些与Oozie和Azkaban的相似之处。一个主要的不同之处在于,Luigi不仅仅是为Hadoop构建的,并且很容易用其他类型的任务扩展。
Luigi中的所有内容都是用Python编写的。而不是XML配置或类似的外部数据文件,依赖关系图是在Python中指定的。这使得构建复杂依赖关系图的任务变得容易,其中依赖关系可能涉及日期代数或对同一任务的其他版本的递归引用。然而,工作流程可以触发不在Python中的事情,例如运行Pig脚本或scp文件。
谁使用Luigi?
我们在Spotify内部使用Luigi每天运行数千个任务,这些任务在复杂的依赖关系图中组织。其中大多数任务是Hadoop作业。Luigi提供了一个基础设施,支持各种事物,包括推荐、排行榜、A/B测试分析、外部报告、内部仪表板等。
由于Luigi是开源的,没有注册墙,因此无法确定确切的Luigi用户数量。但根据唯一贡献者的数量,我们预计有成百上千的企业使用它。一些用户已经撰写了关于Luigi的博客文章或进行了演示。
还有一些公司在使用Luigi,但还没有机会撰写相关文章
我们非常高兴能在列表中添加您的公司。只需在GitHub上发送一份公关稿件。