27

我需要管理 ETL 任务的大型工作流,​​其执行取决于时间、数据可用性或外部事件。某些作业在工作流执行期间可能会失败,系统应该能够重新启动失败的工作流分支,而无需等待整个工作流完成执行。

python中是否有任何框架可以处理这个问题?

我看到了几个核心功能:

  • 有向无环图
  • 执行节点(运行 shell cmd 并等待、记录等)
  • 能够在执行期间在父 DAG 中重建子图
  • 能够在父图运行时手动执行节点或子图
  • 在等待外部事件时暂停图形执行
  • 列出作业队列和作业详细信息

类似Oozie的东西,但更通用,在 python 中。

4

3 回答 3

31

1) 你可以试试dagobah,如其 github 页面所述:Dagobah 是一个简单的基于依赖的作业调度程序,用 Python 编写。Dagobah 允许您使用 Cron 语法安排定期作业。然后,每个作业按照依赖关系图定义的顺序启动一系列任务(子流程),您可以在 Web 界面中通过单击和拖动轻松绘制。与以下三个相比,这是最轻量级的调度程序项目。

dagobah 的网页界面

2)在 ETL 任务方面,Spotify 开源的luigi更侧重于 hadoop 作业,如下所述: Luigi 是一个 Python 模块,可帮助您构建复杂的批处理作业管道。它处理依赖关系解析、工作流管理、可视化等。它还内置了 Hadoop 支持。

luigi 的网页界面

这两个模块都主要用Python编写,并包含Web界面以便于管理。

据我所知,“luigi”没有为作业任务提供调度程序模块,我认为这是 ETL 任务所必需的。但是使用 'luigi' 更容易用 Python 编写 map-reduce 代码,并且每天在 Spotify 上运行的数千个任务都依赖于它。

3) 像 luigi 一样,Pinterest 开源了一个名为Pinball的工作流管理器。Pinball 的架构遵循 master-worker(或 master-client 以避免与我们在下面介绍的特殊类型的客户端的命名混淆)范例,其中有状态的中央 master 充当关于无状态客户端的当前系统状态的真实来源。并且它顺利地集成了 hadoop/hive/spark 作业。

pinball 的网页界面

4) Airflow是 Airbnb 开源的另一个 dag job schedule 项目,它很像 Luigi 和 Pinball。后端建立在 Flask、Celery 等之上。根据示例作业代码,Airflow 在我身边既强大又易于使用。

气流的网络界面

最后但同样重要的是,Luigi、Airflow 和 Pinball 可能会得到更广泛的使用。这三个之间有一个很好的比较:http: //bytepawn.com/luigi-airflow-pinball.html

于 2014-04-30T07:48:35.657 回答
9

有很多这样的;每个人似乎都在写自己的。https://github.com/common-workflow-language/common-workflow-language/wiki/Existing-Workflow-systems有一个很好的列表。其中包括源自工业界和学术界的系统。

于 2015-09-11T13:54:42.097 回答
1

你看过鲁弗斯吗?

我没有这方面的经验,但它似乎做了你清单上的一些项目。它看起来也很容易破解,因此您可以自己实现其他要求。

于 2013-06-11T13:41:42.877 回答