第10章 作业调度
一、技术堆栈与选型
大数据平台上会存在大量形式多样的作业,这些作业会以Hive脚本、Shell脚本、Java程序等多种不同的形式存在,只有通过作业调度将它们串联在一起才能形成一个完整的数据流(Data Pipeline),从而驱动整个大数据平台运转。
1、Oozie
Oozie是老牌的大数据作业调度工具,也是Hadoop生态圈早期唯一的工作流引擎,Oozie是完全面向Hadoop生态环境设计的,内置了很多面向Hadoop的组件,开发者可直接在Oozie里配置HDFS、Map-Reduce、Pig和Spark作业,也支持Java和SSH等通用型作业。Oozie对于大数据平台非常友好,基于输入和输出事件的作业触发机制会大大降低管理作业依赖的难度,但它的XML配置较为繁琐。
2、Azkaban
Azkaban是LinkedIn开源的一款任务调度工具,最新的版本改用更简洁和高效的YAML文件配置。Azkaban相较于Oozie更轻量,但同样能调度HDFS、Map-Reduce、Pig作业。Azkaban的作业调度室基于时间的,不支持输入和输出事件,但可通过配置作业间的依赖关系解决。此外,Azkaban有比较好的权限控制体系,可控制用户对作业的读、写、执行等权限。
3、Airflow
Airflow有比较好的扩展机制,大数据平台上的各种主流作业类型都可找到相应的支持插件。Airflow基于有向无环图(DAG)设计工作流,通过DAG可有效地设置任务依赖关系。Airflow使用Python描述作业,相比于Oozie的XML和Azkaban的YAML要有更强的描述性,但门槛也相对较高。