为什么需要任务调度?一个完整的数据分析系统(业务系统)通常都是由大量任务单元组成: shell脚本程序 java,python程序 mapreduce程序 hive脚本等 ...等等各任务单元之间存在时间先后及前后依赖关系 为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行;
1、 通过Hadoop先将原始数据同步到HDFS上; 2、 借助MapReduce计算框架对原始数据进行转换,生成的数据以分区表的形式存储到多张Hive表中; 3、 需要对Hive中多个表的数据进行JOIN处理,得到一个明细数据Hive大表; 4、 将明细数据进行复杂的统计分析,得到结果报表信息; 5、 需要将统计分析得到的结果数据同步到业务系统中,供业务调用使用。每一个任务都依赖于上一个任务的结构,在这样的一个复杂度下显然Crontab已经满足不了需求,应为复杂度的提升还会出现失败处理分支和重试机制等。
Azkaban是一套简单的任务调度服务,整体包括三部分webserver、dbserver、executorserver solo-server模式:exec进程和web进程为同一个进程,存放元数据的数据库为H2 two-server模式:与之前的单机版本类似,exec进程和web进程分开,存放元数据的数据库为mysql multiple-executor模式:exec进程和web进程在不同的机器上,存放元数据的数据库为mysql