介绍及对比其他调度框架
什么是工作流?
- 很多个程序,完成一个具体的任务
- 任务流/工作流
什么是调度?
- 将任务流中的每个程序按照
顺序和规则
运行,就是调度
用于实现整个大数据平台中所有任务的自动化运行
举例
- job1、job2、job3是数据采集程序,只要过了00:00,昨天的数据就全部生成了 ,程序就可以启动进行采集
- 定时调度
- 而且job1、job2、job3之间没有关系,可以并行运行
- job4、job5、job6是ETL的程序
- job4必须的等待job1/job2/job3都完成了,才能执行
- job5必须等待job4完成了才能运行
- job6必须等待job5完成了才能完成
- job6完成了,整个ETL才结束
- job7、job8、job9是数据分析程序
- 都必须等待job6完成了才能对ETL以后的数据做分析
- 这三个彼此之间没有关联,可以并行运行
- job10:导出分析结果的程序
- 必须等待所有的分析的结果都产生了,才能执行
- 必须等待job7/job8/job9都完成了,才能执行
调度类型
- 时间调度:基于某种时间条件运行程序
只有工作流中的第一层的程序需要定时调度
- 依赖调度:基于某种依赖关系运行程序
后面的每一层都是依赖调度
简单的调度
基于时间的任务调度系统:Linux Crontab
可以基于时间实现定时调度
- 指定时间运行某个Linux命令
- 操作
crontab -e:编辑定时任务
crontabl -l:查看当前的定时任务
crontab -r:清空当前所有的定时任务
crontab -u username -f filename :指定某个文件成为某个用户的定时任务列表
- 语法
* * * * * command
分钟 小时 天 月 周 命令
00-59 00-23 1-31 1-12 0-7 shell command
*/5 * * * * :每隔5分钟执行一次这个命令
0 1,13 * * * :每天的1点和13点执行一次这个命令
0 1-13 * * * :每天的1-13点之间每隔1个小时执行一次
0 */1 * * * :每个小时执行一次
0 13 1 * * :每个月的1号的13:00执行一次
0 13 1 1 * : 每年1月1号的13:00执行一次
0 12 * * 7 : 每周日的12点执行一次
- 很多的有时间调度的工具中都会采用LinuxCrontab的表达式来实现定时调度
- 特点:
只能实现基于时间的调度
基于调度器系统的YARN
是用于调度大数据的程序的
- 公平调度
- YARN
只能调度运行在YARN上的程序
- YARN内部的调度
Azkaban
- 用于实现大数据平台的工作流的任务调度
时间调度
依赖调度
Azkaban架构
- 分布式架构:主从架构
- WebServer
- 主节点
- 负责提供整个与用户
交互的界面
- 用户可以在界面中查询、提交工作流
所有
的工作节点向WebServer进行注册
分配任务
给ExecServer
- ExecServer
- 从节点
- 负责
执行WebServer分配的工作流
- 3.0版本以后:支持有多个Exec
- MySQL
- 做
元数据存储
- 存储Azkaban中关键性的数据
- Executor节点的信息:
状态、所在的机器
- 工作流的信息
- 做
对比其他调度框架
Oozie
- 优点:
功能全
- 缺点:自己不是分布式,依赖MapReduce;不友好(xml开发、界面类似XP)
- 怎么个
不友好
- 开发:通过xml来开发工作流
- 使用:界面类似于Windows XP
- 为了解决这个问题,Cloudera公司后来有另外一个工具Hue
- 与oozie放在一起用,可以让Oozie变得好用也好看
Zeus
- 优点:自己是
分布式
;友好
(中文,界面类似win7) - 缺点:
功能少,bug相对较多
阿里巴巴研发的产品
Azkaban
- 优点:
功能全
;自己是分布式
【3.x版本开始】;友好
,操作和开发都比较简单 - 缺点:
需要很多插件