Luigi 是一个 Python(3.7、3.8、3.9、3.10、3.11、3.12 测试)包,可帮助您构建复杂的批处理作业管道。它处理依赖性解析、工作流管理、可视化、处理故障、命令行集成等等。
运行pip install luigi
从 PyPI 安装最新的稳定版本。最新版本的文档托管在 readthedocs 上。
运行pip install luigi[toml]
来安装 Luigi,并提供基于 TOML 的配置支持。
对于前沿代码, 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 服务器还附带一个 Web 界面,因此您可以在所有任务中搜索和过滤。
只是为了让您了解 Luigi 所做的事情,这是我们在生产中运行的屏幕截图。使用 Luigi 的可视化工具,我们可以很好地直观地了解工作流的依赖关系图。每个节点代表一个必须运行的任务。绿色任务已完成,黄色任务尚未运行。这些任务大多数是 Hadoop 作业,但也有一些在本地运行并构建数据文件。
从概念上讲,Luigi 类似于 GNU Make,其中您有某些任务,而这些任务又可能依赖于其他任务。与 Oozie 和 Azkaban 也有一些相似之处。一个主要区别是 Luigi 不仅仅是专门为 Hadoop 构建的,而且可以轻松地将其扩展为其他类型的任务。
Luigi 中的一切都是用 Python 编写的。依赖图是在 Python 中指定的,而不是 XML 配置或类似的外部数据文件。这使得构建复杂的任务依赖关系图变得容易,其中依赖关系可能涉及日期代数或对同一任务的其他版本的递归引用。但是,工作流可以触发 Python 之外的操作,例如运行 Pig 脚本或 scp 文件。
我们在 Spotify 内部使用 Luigi 每天运行数千个任务,这些任务以复杂的依赖关系图组织。这些任务大部分是 Hadoop 作业。 Luigi 提供了一个支持各种内容的基础设施,包括推荐、热门列表、A/B 测试分析、外部报告、内部仪表板等。
由于 Luigi 是开源的并且没有任何注册墙,因此 Luigi 用户的确切数量未知。但根据独特贡献者的数量,我们预计将有数百家企业使用它。一些用户撰写了有关 Luigi 的博客文章或举办了演示:
还有一些公司正在使用 Luigi,但还没有机会写下它:
我们非常高兴将您的公司添加到此处。只需在 GitHub 上发送 PR 即可。
Luigi 是在 Spotify 开发的,主要由 Erik Bernhardsson 和 Elias Freider 开发。自 2012 年底开源以来,许多其他人都做出了贡献。Arash Rouhani 是 2015 年至 2019 年的首席维护者,现在 Spotify 的数据团队负责维护 Luigi。