DAG(有向无环图)动态作业调度程序

Ale*_*nov 27 python etl scheduling directed-acyclic-graphs oozie

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

python中有没有可以处理这个的框架?

我看到几个核心功能:

  • DAG建筑
  • 执行节点(运行shell cmd,等待,记录等)
  • 能够在执行期间在父DAG中重建子图
  • 能够在父图运行时手动执行节点或子图
  • 在等待外部事件时挂起图执行
  • 列出作业队列和作业详细信息

Oozie这样的东西,但更通用的目的和python.

zfz*_*zfz 29

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的架构遵循一个主工作者(或主客户端,以避免与我们在下面介绍的特殊类型的客户端命名混淆)范例,其中有状态的中央主人充当关于当前系统状态的无状态客户端的真相来源.它可以顺利整合hadoop/hive/spark工作.

弹球的网络界面

4)Airflow,另一个由Airbnb开源的dag工作计划项目,非常像Luigi和Pinball.后端基于Flask,Celery等构建.根据示例作业代码,Airflow既强大又易于使用.

airflow的网络界面

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


Dun*_*unk 8

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