有向无环图动态作业调度

2024-10-06 11:41:40 发布

您现在位置:Python中文网/ 问答频道 /正文

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

python中有什么框架可以处理这个问题吗?

我看到了几个核心功能:

  • 达格大厦
  • 执行节点(使用wait、logging等运行shell cmd)
  • 执行期间在父DAG中重建子图的能力
  • 在父图运行时手动执行节点或子图的能力
  • 等待外部事件时暂停图形执行
  • 列出作业队列和作业详细信息

类似于Oozie,但在python中更通用。


Tags: 数据功能框架核心节点系统分支作业
3条回答

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

你看过Ruffus了吗?

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

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

dagobah's web interface

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

luigi's web interface

这两个模块都主要用Python编写,为了便于管理,还包括了web接口。

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

3)与luigi一样,Pinterest也开放了名为Pinball的工作流管理器。Pinball的架构遵循一个主工作机(或者主客户机,以避免与我们下面介绍的特殊类型的客户机命名混淆)范式,其中有状态的中央主机充当无状态客户机当前系统状态的真实来源。它能顺利地集成hadoop/hive/spark作业。

pinball's web interface

4)Airflow,另一个由Airbnb开源的dag工作日程项目,很像Luigi和Pinball。后端是基于烧瓶、芹菜等。根据example job code,气流既强大又易于在我身边使用。

airflow's web interface

最后但并非最不重要的是,Luigi、Airflow和Pinball可能会得到更广泛的应用。这三者之间有很大的比较:http://bytepawn.com/luigi-airflow-pinball.html

相关问题 更多 >