综合对比
DolphinScheduler
-
Apache DolphinScheduler 是一个分布式去中心化,易扩展的可视化DAG工作流任务调度系统。致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用。
-
DolphinScheduler 特点
- 高可靠性
- 去中心化的多 Master 和多 Worker, 自身支持 HA 功能, 采用任务队列来避免过载,不会造成机器卡死
- 简单易用
- DAG 监控界面,所有流程定义都是可视化,通过拖拽任务定制DAG;
- 通过 API 方式与第三方系统对接,方便一键部署;
- 丰富的使用场景
- 支持暂停恢复操作. 支持多租户,更好的应对大数据的使用场景. 支持更多的任务类型,如 spark, hive, mr, python, sub_process, shell
- 高扩展性
- 支持自定义任务类型,调度器使用分布式调度,调度能力随集群线性增长,Master和Worker支持动态上下线
- 高可靠性
-
主要能力
- Task 以 DAG 形式关联,实时监控任务的状态;
- 支持 Shell、MR、Spark、SQL、依赖等 10 多种任务类型;
- 工作流优先级、任务优先级,全局参数及局部自定义参数;
- 工作流可定时、依赖、手动、暂停/停止/恢复;
- 支持补数、多租户、日志在线查看及资源在线管理;
- 完善的系统服务监控,任务超时告警/失败;
- 去中心化设计确保系统的稳定、高可用;
- 支持每日十万数据量级任务稳定运行。
Airflow
- Airflow 优点
- 与所有其他解决方案相比,Airflow 是一种功能超强的引擎,可以使用插件来支持各种作业,包括数据处理作业:Hive、Pig、以及通过文件/ db entry / s3来触发的一般流程管理,或者等待来自Web端点的预期输出,
- Airflow 提供了一个很好的 UI,允许:
- 查看 log
- 重跑历史 task
- 查看 task 代码
- 监视作业的实时执行
- Airflow 易于实现分布式任务分发的扩展;
- 可以使用本地执行程序通过单个节点运行所有作业,或通过 Celery / Dask / Mesos 编排将它们分发到一组工作节点。
- 缺点
- Airflow 本身仍然不是很成熟(实际上Oozie可能是这里唯一的“成熟”引擎),调度程序需要定期轮询调度计划并将作业发送给执行程序;
- 由于有一个集中式调度程序,如果它出现故障或卡住,的正在运行的作业将不会像执行程序的作业那样受到影响,但是不会安排新的作业了。
- 当使用 HA 设置运行时,这尤其令人困惑,其中有多个 Web 节点,调度程序,代理(通常是Celery案例中的消息队列),多个执行程序。
- 当调度程序因任何原因而卡住时,在Web UI中看到的所有任务都在运行,但实际上它们实际上并没有向前运行,而执行程序却高兴地报告它们没问题。
- 分布式系统中代码同步问题
- Airflow 是分布式任务分发的系统, master 和 worker 会部署在不同的机器上,并且 worker 可以有很多的类型和节点。
- 当 master 与 worker code 不一致时,会引入一些奇怪的问题,所以需要解决分布式系统中代码升级与同步的问题。
Azkaban
- 优点
- 在所有引擎中,Azkaban 可能是最容易开箱即用的;
- Azkaban UI 非常直观且易于使用;
- Azkaban 调度和 REST API 工作得很好;
- 有限的 HA 设置开箱即用;
- 不需要负载均衡器,因为只能有一个Web节点;
- 可以配置如何选择执行程序节点,只要有足够的容量来执行程序节点,就可以轻松运行数万个作业。
- 缺点
- 作为通用编排引擎,Azkaban 没有非常丰富的功能;
- Azkaban 的优势在于对 Hadoop / Pig / Hive 的原生支持;
- 尽管也可以使用命令行实现这些功能,但 Azkaban 本身不能通过 Airflow 等外部资源触发工作,也不支持工作等待模式;
- Azkaban 文档和配置通常有点混乱,不应该推荐为初学者使用,设计很好但是最好有一个大型数据中心来运行执行程序,因为当执行程序耗尽资源而没有额外的监视功能时,调度会停止。
- Azkaban 整体代码质量有点朝向低端,所以它通常只有在资源不成问题时才能很好地扩展。
Oozie
- 优点
- Oozie 通过 db 设置提供了一个看似可靠的 HA 模型(貌似b / c我没有看到它),它为 Hadoop 相关工作提供本机支持,因为它是为该生态系统构建的。
- 缺点
- 对于通用流程调度而言,不是一个非常好的候选者,因为XML定义对于定义轻量级作业非常冗长和繁琐;
- Oozie 还需要相当多的外设设置:
- 需要一个 zookeeper 集群,一个db,一个负载均衡器;
- 每个节点都需要运行像 Tomcat 这样的 Web 应用程序容器;
- 初始设置也需要一些时间,这对初次使用的用户来说是不友好的。