文章目录
任务调度
一、任务流调度的需求
整体需求
- 相同的业务线,有不同的需求会有多个程序来实现,这多个程序共同完成的需求,组合在一起就是工作流或者叫做任务流
- 基于工作流来实现任务流的自动化运行
基于时间的任务运行
- Job1和Job2是在每天固定的时间去采集昨天的数据
- 每天00:00
基于运行依赖关系的任务运行
- Job3必须等待Job1运行成功,才能运行
- Job5必须等待Job3和Job4都运行成功才能运行
调度类型
- 定时调度:基于某种时间的规律进行调度运行
- 依赖调度:基于某种依赖关系进行调度运行
二、任务流调度的工具
Linux Crontab
Linux中自带的一个工具
-
优点
- 简单,不用做额外的部署,能实现大多数的定时需求
- crontab -e
-
缺点
- 只能做定时任务的执行
-
语法
* * * * * command 分钟 小时 日 月 周几
Oozie
Cloudera公司研发的Hadoop生态圈的调度工具
- 官网:oozie.apache.org
- 优点
- 功能很强大,能满足几乎所有常规的任务流调度的需求
- 支持DAG流程调度
- 缺点
- 本身不是分布式的工具,依赖于MapReduce来实现分布式
- 原生的交互开发接口不友好
- 整体的监控不完善
- 学习成本比较高
Zeus
阿里巴巴最早基于Hadoop1研发的一个调度系统,目前市场上的Zeus一般都是携程版本的Zeus
- 优点
- 交互非常友好
- 使用非常简单
- 分布式的,功能相对也比较全面
- 缺点
- Bug非常多,阿里没有继续研发Zeus,不支持Hadoop2
Azkaban
LinkedIn公司研发的分布式调度工具
- 优点
- 重点着重于自身的调度功能的研发,其他的辅助性功能都通过插件来完成
- 自身也是分布式调度系统
- 界面交互性比较友好
- 开发交互性:properties或者JSON
- 缺点
- 3.x版本开始才支持完全分布式
三、Oozie的简介
功能
- Oozie是一个专门为管理Hadoop生态的程序调度而设计的工作流调度系统
- 基于DAG实现依赖调度:WorkFlow
- 基于定时器实现定时调度:Coordinator
特点
- 优点:功能全面
- 缺点:部署相对复杂、原生开发方式过于复杂
应用
- 基于Hadoop平台的分布式离线任务流调度
原理
- 底层依赖于MapReduce,将工作流变成MapReduce程序,提交个YARN
- 由YARN来将不同的工作流分配到不同的机器上运行,用于构建分布式调度系统
四、Oozie的2种使用方式
原生方式
-
这种方式,是通过自己写代码的方式来实现工作流的开发,效率低,容易出问题,不用
-
实现一个效果:4个程序
- 第一个程序:shell脚本,定时运行的
- 第二个程序:Spark程序,必须等第一个程序运行完才能运行
- 第三个程序:MapReduce程序,必须等第二个程序运行才能运行’
- 第四个程序:Hive,必须等第三个程序运行完才能运行
-
先要开发一个XML文件
- 控制节点:start、end、kill
- 控制程序运行的流程
- start:开始节点
- end:终止节点
- kill:强制退出节点
- fork:分支节点
- join:合并节点
- 程序节点:action
- 控制节点:start、end、kill
<start to="first">
<action name="first">
<shell>
<path>xxx.sh</path>
<args></args>
</shell>
<ok to="second"> </ok>
<error to="kill"></error>
</action>
<