1、Oozie介绍
官网首页介绍:http://oozie.apache.org
1.1 Oozie是一个管理 Apache Hadoop 作业的工作流调度系统。
1.2 Oozie的 workflow jobs 是由 actions 组成的 有向无环图(DAG)。
1.3 Oozie的 coordinator jobs 是由时间 (频率)和数据可用性触发的重复的 workflow jobs 。
1.4 Oozie与Hadoop生态圈的其他部分集成在一起,支持多种类型的Hadoop作业(如Java map-reduce、流式map-reduce、Pig、Hive、Sqoop和Distcp)以及特定于系统的工作(如ava程序和shell脚本)。
1.5Oozie是一个可伸缩、可靠和可扩展的系统。
2、对比选型
简单项目的话可以用crontab来做控制,但是项目比较复杂的话会发现还是有很多不方便的,比如失败重启和日志查看等问题,所以我们通常在Azkaban和oozie之间做对比,选择适合自己公司或者项目的任务调度工具
- 执行方式:Oozie底层在提交Hadoop Spark作业而Azkaban是直接操作shell语句。
- 工作流定义: Oozie是通过xml定义的而Azkaban为properties来定义。
- 部署过程: Oozie的部署相对困难些,同时它是从Yarn上拉任务日志。
- 任务检测: Azkaban中如果有任务出现失败,只要进程有效执行,那么任务就算执行成功,这是BUG,但是Oozie能有效的检测任务的成功与失败。
- 操作工作流: Azkaban使用Web操作。Oozie支持Web,RestApi,Java API操作。
- 权限控制: Oozie基本无权限控制,Azkaban有较完善的权限控制,供用户对工作流读写执行操作。
- 运行环境: Oozie的action主要运行在hadoop中而Azkaban的actions运行在Azkaban的服务器中。
- 记录workflow的状态: Azkaban将正在执行的workflow状态保存在内存中,Oozie将其保存在Mysql中。
- 出现失败的情况: Azkaban会丢失所有的工作流,但是Oozie可以在继续失败的工作流运行
两者在功能方面大致相同,在安全性上可能Oozie会比较好,加之我们选择了CDH作为大数据平台,所以就用了其自带的oozie工具,且有相应的可视化操作工具hue配套使用,较为便捷。
3、Oozie的架构:
3.1 Oozie client: 提供命令行,java api rest 等方式,对oozie的工作流程的提交,启动,运行等操作。
3.2 Oozie WebApp: 即oozie Server 本质是一个java应用,可以使用内置的web容器,也可以使用外置的web容器。
3.3 hadoop Cluster: 底层执行oozie编排流程的各个Hadoop生态圈组件。
4、Oozie基本原理:
oozie对工作流的编排,是基于workflow.xml 文件来完成的。用户预先将工作流执行规则定制与workflow.xml文件中,并在job.properties配置相关的参数,然后由oozie server向MR提交job来启动工作流。
4.1 流程节点:
工作流由两种类型的节点组成,分别是:
4.1.1 Control Flow Nodes: 控制工作流执行路径,包括start ,end,kill,decision,fork,join。
4.1.2 Action Nodes: 决定每个操作执行的任务类型,包括MapReduce,java,hive,shell等。
4.2 Oozie工作流类型:
4.2.1 workflow:
规则相对简单,不涉及定时,批处理的工作流,顺序执行流程节点。workflow有个大缺点:没有定时和条件出发功能。
4.2.2 Coordinator:
coordinator将多个工作流job组织起来,称为Coordinator job ,并指定触发时间和频率,还可以配置数据集,并发数等,类似于在工作流外部增加了一个协调器来管理这些工作流的工作流job的运行。
4.2.3 Bundle:
针对coordinator 的批处理工作流,Bunndle将多个Coordinator管理起来,这这样我们只需要一个Bundle提交即可。