一、工作流调度系统
### --- 一个完整的数据分析系统通常都是由大量任务单元组成:
~~~ shell脚本程序
~~~ java程序
~~~ mapreduce程序
~~~ hive脚本等
~~~ 各任务单元之间存在时间先后及前后依赖关系,为了很好地组织起这样的复杂执行计划,
~~~ 需要一个⼯工作流调度系统来调度任务的执行。
~~~ # 假如:
~~~ 有这样一个需求,某业务系统每天产生20G原始数据,每天都要对其进行处理,处理步骤如下所示:
~~~ 通过Hadoop先将原始数据同步到HDFS上;
~~~ 借助MapReduce计算框架对原始数据进行转换,生成的数据以分区表的形式存储到多张Hive表中;
~~~ 需要对Hive中多个表的数据进行JOIN处理,得到一个明细数据Hive大表;
~~~ 将明细数据进行各种统计分析,得到结果报表信息;
~~~ 需要将统计分析得到的结果数据同步到业务系统中,供业务调用使用。
### --- 工作流调度实现方式
~~~ # 简单的任务调度
~~~ 直接使用linux的crontab;
~~~ # 复杂的任务调度
~~~ 开发调度平台或使用现成的开源调度系统,比如Ooize、Azkaban、Airflow等
### --- Azkaban与Oozie对⽐比
~~~ 对市面上最流行的两种调度器,进行对比分析。
~~~ 总体来说,Ooize相比Azkaban是一个重量级的任务调度系统,功能全面,
~~~ 但配置使用也更复杂(xml)。如果可以不在意某些功能的缺失,
~~~ 轻量级调度器Azkaban是很不错的候选对象。
~~~ # 功能
~~~ 两者均可以调度mapreduce,pig,java,脚本工作流任务
~~~ 两者均可以定时执行工作流任务
~~~ # 工作流定义
~~~ Azkaban使用Properties文件定义工作流
~~~ Oozie使用XML文件定义工作流
~~~ # 工作流传参
~~~ Azkaban支持直接传参,例如${input}
~~~ Oozie支持参数和EL表达式,例如${fs:dirSize(myInputDir)}
~~~ # 定时执行
~~~ Azkaban的定时执行任务是基于时间的
~~~ Oozie的定时执行任务基于时间和输入数据
~~~ # 资源管理
~~~ Azkaban有较严格的权限控制,如用户对工作流进行读/写/执行等操作
~~~ Oozie暂无严格的权限控制
~~~ # 工作流执行
~~~ Azkaban有两种运行模式,
~~~ 分别是solo server mode(executor server和web server部署在同一台节点)
~~~ 和multi server mode(executor server和web server可以部署在不同节点)
~~~ Oozie作为工作流服务器运行,支持多用户和多工作流