Apache DolphinScheduler和Apache Airflow任务调度系统对比
目前世界上最流行的两款任务调度系统是 Apache DolphinScheduler 和 Apache Airflow。什么是任务调度系统呢?它类似于平时工作与生活中使用的日程表,可以让某一类型的任务在某一特定时刻执行,并且在这个任务执行完后,执行下一个类似的任务。以大部分人都要经历的上班为例,按照流程执行的一系列任务就是一个简单的任务调度系统,只不过这个系统是人本身而已。Apache DolphinScheduler 和 Apache Airflow 只不过是将上班这个流程里的“听音乐”、“整理着装”这些任务变成了数据处理领域里面常用的 Sql、Spark、Shell 等任务,这个流程有一个官方名称叫做:DAG 工作流。
Apache DolphinScheduler 和 Apache Airflow 都是任务调度系统,并且都是 Apache 基金会旗下,两者有什么区别呢?这篇文章就将从使用者的角度去讨论这个话题。
介绍
首先看看 Apache DolphinScheduler 和 Apache Airflow 的官方介绍。
Apache DolphinScheduler | Apache Airflow |
一个分布式易扩展的可视化DAG工作流任务调度系统。致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用。 | Apache Airflow (or simply Airflow) is a platform to programmatically author, schedule, and monitor workflows. |
从官方介绍里就可以看出一个很明显的区别:DolphinScheduler 致力于用可视化的方式去完成一个 DAG 工作流,而 Airflow 则想的是用类似于编程的方式完成一个 DAG 工作流。两个任务调度系统不同的开发思路决定了它们的开发目标也发生了变化。
Apache DolphinScheduler 的主要目标是:
以DAG图的方式将Task按照任务的依赖关系关联起来,可实时可视化监控任务的运行状态支持丰富的任务类型:Shell、MR、Spark、SQL(mysql、postgresql、hive、sparksql)、Python、Sub_Process、Procedure等支持工作流定时调度、依赖调度、手动调度、手动暂停/停止/恢复,同时支持失败重试/告警、从指定节点恢复失败、Kill任务等操作支持工作流优先级、任务优先级及任务的故障转移及任务超时告警/失败支持工作流全局参数及节点自定义参数设置支持对Master/Worker cpu load,memory,cpu在线查看…
Apache Airflow 的主要目标是:
Dynamic: Airflow pipelines are configuration as code (Python), allowing for dynamic pipeline generation. This allows for writing code that instantiates pipelines dynamically.Extensible: Easily define your own operators, executors and extend the library so that it fits the level of abstraction that suits your environment.Elegant: Airflow pipelines are lean and explicit. Parameterizing your scripts is built into the core of Airflow using the powerful Jinja templating engine.Scalable: Airflow has a modular architecture and uses a message queue to orchestrate an arbitrary number of workers.
页面展示
Apache DolphinScheduler 和 Apache Airflow 的页面展示都很丰富,如果非要强行比较的话,因为 Apache DolphinScheduler 追求用可视化去完成 DAG 工作流的设计,自然比使用编程的方式完成 DAG 工作流的设计的页面丰富度多了不少。作为使用者的角度来说,我们更会关心页面上是否可以展示目前已经上线的 DAG 工作流和它们的运行情况以及在页面上完成对 DAG 工作流的重试、删除等操作。
查看 DAG 工作流运行情况
Apache DolphinScheduler 和 Apache Airflow 都能做到在页面上查看目前有哪些已经上线的 DAG 工作流以及运行情况。
• Apache DolphinScheduler
• Apache Airflow
对 DAG 工作流的操作
Apache DolphinScheduler 对 DAG 工作流的操作类型的丰富度是超过 Apache Airflow 的,至少 Apache Airflow 就不能在页面上对已经上线的 DAG 工作流进行修改,必须要以某种方式更改存放在后台服务器上的 DAG 文件目录。
这两个都支持在页面上对 DAG 工作流进行手动暂停/停止/恢复,同时支持失败重试/告警、从指定节点恢复失败、Kill任务等操作。
开发流程
因为 Apache DolphinScheduler 和 Apache Airflow 有着不同的设计理念,所以 Apache DolphinScheduler 可以直接在页面上完成对 DAG 工作流的开发。
而 Apache Airflow 需要提交一个 Python 文件到后台服务器上,由 Apache Airflow 去解析这个 Python 文件,进而生成一个 DAG 工作流。
两者开发方式各有优劣,Apache Airflow 需要开发者略懂 Python,而 Apache DolphinScheduler 则可以实现无编程基础开发;但是 Apache Airflow 使用 Python 文件的形式,使得可以通过 Git 等 DevOps 工具让 DAG 工作流的变更历史清清楚楚记录着和轻易地将某个他人的工作流进行复制或迁移,这一点上 Apache DolphinScheduler 则有点捉襟见肘了,虽然有 PyDolphinScheduler ,依然少了点味。
我认为 Apache DolphinScheduler 如果能引入类似 Yaml 的可配置文件作为调度任务的中间层应该能避免此类问题。
任务监控和公共数据源
Apache DolphinScheduler 和 Apache Airflow 都可以实现对失败的任务进行重试和监控。除此以外都能实现丰富类型的失败任务告警,比如邮件、短信、钉钉、企业微信等等。
在使用者开发 DAG 工作流时,经常需要引入外部数据源,而外部数据源又会因为类似数据安全定期修改密码等原因,导致链接方式发生改变,所以 Apache DolphinScheduler 和 Apache Airflow 都有一个公共数据源的概念,可以让所有的 DAG 工作流直接访问这个公共数据源获取链接方式,而不需要将外部数据源的链接方式写死在 DAG 工作流中。如果需要更改外部数据源的链接方式,只需要更改 Apache DolphinScheduler 和 Apache Airflow 的公共数据源,即可在所有的 DAG 工作流中生效。
定制化开发
作为一个开源的任务调度系统,Apache DolphinScheduler 和 Apache Airflow 自身所提供的 Task 类型只能满足社区 90% 以上的需要,剩下的 10% 会因为开发团队的内部遗产等原因需要使用任务调度系统的人去定制化开发。在这一点上, Apache DolphinScheduler 和 Apache Airflow 都提供了接口完成这个任务。
Apache DolphinSchedulerApache Airflow插件实现org.apache.dolphinscheduler.spi.task.TaskChannel即可。主要包含创建任务(任务初始化,任务运行等方法)、任务取消,如果是 yarn 任务,则需要实现 org.apache.dolphinscheduler.plugin.task.api.AbstractYarnTask。由于任务插件涉及到前端页面,目前前端的SPI还没有实现,因此你需要单独实现插件对应的前端页面。新开发的Operator 继承BaseOperator ,开发完后放入指定的目录即完成了。
通过对比,我们可以发现 Apache Airflow 开发一个新的 Task 类型要比 Apache DolphinScheduler 方便多了。
稳定性
因为我们团队使用 Apache Airflow 快四年了,至今没有发生问题,因此对于 Apache Airflow 的稳定性是没有什么疑问的。参考 Apache DolphinScheduler 的网上使用体验文章,Apache DolphinScheduler 的稳定性应该也没有什么问题。
所以在这一点上,就不多做评价了,各位读者自行评价。
社区
Apache DolphinScheduler 和 Apache Airflow 的社区都很繁荣。
Apache DolphinSchedulerApache Airflowstar数8.6k27.2kissue数53036013PR数630017936
纯粹从 github 上的一些指标来看, Apache Airflow 略胜于 Apache DolphinScheduler,但是考虑到 Apache DolphinScheduler 比 Apache Airflow 晚开源这么久,这点差距是能接受的。当然,对于中国开发者而言,Apache DolphinScheduler 社区天然就要比 Apache Airflow 容易接受一点。
资源管控
Apache DolphinScheduler 和 Apache Airflow 都有着类似于 Yarn 的资源池的概念,方便使用者可以分门别类不同的 DAG 工作流和它们使用的资源。
总结
作为使用者而言,对任务调度系统的要求是比较简单的,对于任务调度系统里的实现细节是很少去关心的。比如:
• 易用性:容易配置 DAG 工作流,能够在页面上可视化和操作 DAG 工作流等。
• 稳定性:准时准点运行任务,任务调度系统自身不会发生宕机等问题等。
• 容易运维:对 DAG 工作流可以进行资源隔离等。
因此上述的一些对比仅仅是作为一个使用者的角度去看待 Apache DolphinScheduler 和 Apache Airflow 两个任务调度系统,作为一个深度使用 Apache Airflow 的开发者而言,上面提到的一些特性仅仅只是这两个任务调度系统所有特性的很微不足道的一部分。
Apache DolphinScheduler 和 Apache Airflow 都各有优劣,Apache DolphinScheduler 对中国开发者很友好,也可以可视化配置 DAG 工作流,适合小白团队,如果数据团队懂一点 Python 的话,Apache Airflow 也是一个很好的选择。
参考链接
https://github.com/apache/dolphinscheduler
https://github.com/apache/airfl
关注公众号:拾黑(shiheibook)了解更多
赞助链接:
关注数据与安全,洞悉企业级服务市场:https://www.ijiandao.com/
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
随时掌握互联网精彩