今天来对比下现在市面上开源的,用的比较多的两个调度系统airflow和azkaban的差别。
直接看表格吧:
| 功能 | Azkaban | Airflow |
|---|---|---|
| 所有者 | airbnb开源给apache | |
| license | Apache License, Version 2.0 | Apache License, Version 2.0 |
| 调度模块 | Quartz | 自实现 |
| 调度中心HA | 不支持 | 支持(2.0之后) |
| 执行器HA | 支持 | 支持 |
| 业务耦合度 | 低,与实际业务无耦合。 | 低,与实际业务无耦合。 |
| Job类型 | Command、HadoopShell、Java、HadoopJava、Pig、Hive等,支持插件式扩展 | Python、Bash、HTTP、Mysql等,支持Operator的自定义扩展。 |
| Executor触发 | Restful | Restful |
| 工作流 | 支持,自定义DSL语法 | 支持,基于Python DAG |
| 管理界面 | 简单,美观程度airflow,整体功能逻辑清晰,上手简单 | 该有的功能都有,但是复杂不直观,甚至有点难用 |
| 部署运维 | 简单 | 较复杂,包括WebServer、Scheduler、Worker和Flower(可选,用于)rabbitmq/redis |
| 单点故障 | Web Server存在单点故障风险 | 2.0之前Scheduler存在单点故障风险。 |
| 手动依赖执行 | 不支持,需要手动选择哪些任务需要执行 | 支持,airflow在手动执行某个任务时,可以选择同时执行该任务的上游和下游任务。 |
仔细看,他们俩不相上下啊,其实还是有细微的差别的:
- 支持的作业类型,airflow比azkaban多,azkaban作业类型偏向于hadoop hive类型作业,airflow除了这些还能执行shell sql http等任务;
- 当你使用才会知道,airflow支持dag间依赖,而azkaban不支持project间依赖,这对于复杂的依赖关系网任务群会让azkaban用起来非常棘手;
- 当你使用才会知道,airflow支持任务的历史回填,即回补执行,运行历史任务,参数对应历史时刻的值,相当于时光倒流,回到当时的任务状态,去执行任务,而azkaban不支持;
对比得差不多了,根据你们公司的具体作业场景选择合适的调度工具吧。
airflow更适合作业繁多,任务之间依赖复杂,任务多样(比如sql,http,python,java,shell等)时使用;
azkaban更适合hadoop类型作业。
ok,今天就到这里。
吾之初心,永世不忘。
欢迎关注我的微信公众号,比较喜欢分享知识,也喜欢宠物,所以做了这2个公众号:
喜欢宠物的朋友可以关注:【电巴克宠物Pets】
一起学习,一起进步。
