Oozie - 核心原理、特点、以及架构详解
1,什么是 Oozie?
(1)Oozie 是由 Cloudera 公司贡献给 Apache 的基于工作流引擎的开源框架,主要用于 Hadoop 平台的开源工作流调度。
(2)Oozie 默认集成在 CDH 大数据平台中,如果企业中的大数据平台是使用 CDH 搭建的,那么在选择调度任务时使用 Oozie 会比较顺手。Oozie 凭借着这个特性,在大数据中的分布式任务调度领域占据了一定的地位。
2,Oozie 的组成
Oozie 主要由 Oozie Client 和 Oozie Server 这两个组件构成:
- Oozie Client 负责提交任务。
- Oozie Server 运行于 Java Servlet 容器(Tomcat)中的 Web 程序,其页面效果如下图所示。

3,Oozie 的特点
(1)提供了 Web 界面。
(2)支持不同任务类型的 Hadoop 任务,例如:MapReduce、Hive、Sqoop 等。
(3)支持特殊类型的作业,例如:Java 程序、Shell 脚本等。
(4)复杂的依赖关系、事件触发和时间触发、使用 XML 语言进行表达。
(5)程序定义支持 EL 常量和函数,表达更加丰富。
4,Oozie 的调度流程
(1)Oozie 提供了 HPDL(Hadoop Process Defination Language)来构造工作流。工作流操作通过远程系统启动任务。当任务完成后,远程系统会进行回调来通知任务已经结束,然后开始下一个操作。
(2)Oozie 工作流中主要包含控制流节点和操作节点。
- 控制流节点:定义工作流的开始和结束,并且控制工作流的执行路径。
- 操作节点:负责工作流触发计算任务的执行。
(3)以 MapReduce 离线计算框架中的单词计数功能为例,如果使用 Oozie 进行调度,则执行流程下图所示:

(4)Oozie 以 Action 为基本任务单位,每个 Action 都是一个单独的任务,可以将多个 Action 构成一个 DAG 图(有向无环图)模式进行运行,实现多级依赖任务的调度。
(5)Oozie 可以用 Fork 和 Join 节点进行多任务并行处理,同时 Fork 和 Join 节点必须同时出现,缺一不可。Fork 节点可以把任务切分成多个并行任务,Join 节点则会合并多个并行任务,执行流程如下图所示:

5,架构分析
(1)Oozie Server 主要由 3 大核心组件组成:Workflow、Coordinator 和 Bundle。这 3 大核心组件的关系是:Bundle 包含多个 Coordinator,每个 Coordinator 包含一个 Workflow,Workflow 定义具体的 Action 动作。
- Workflow:是最基本服务组件,用于定义和执行一个特定顺序的工作流任务。
- Coordinator:属于 Workflow 的协调器,按照指定频率周期性地触发 Workflow 的执行。
- Bundle:主要负责管理 Coordinator。

(2)Oozie 的整体架构需要依赖这 3 大核心组件,如下图所示:
- Oozie 支持用 Java API、REST API、CLI、Hue 等方式提交工作流任务,产生的数据保存在 Oozie Object Database 中。
- Coordinator 协调器能够监控基于时间的触发器,以及 HDFS 上基于数据的触发器。
- Workflow 负责提交具体任务,以及监控任务的运行状态。
