当前位置: > > > Oozie - 核心原理、特点、以及架构详解

Oozie - 核心原理、特点、以及架构详解

1,什么是 Oozie?

(1)Oozie 是由 Cloudera 公司贡献给 Apache 的基于工作流引擎的开源框架,主要用于 Hadoop 平台的开源工作流调度。

(2)Oozie 默认集成在 CDH 大数据平台中,如果企业中的大数据平台是使用 CDH 搭建的,那么在选择调度任务时使用 Oozie 会比较顺手。Oozie 凭借着这个特性,在大数据中的分布式任务调度领域占据了一定的地位。

2,Oozie 的组成

Oozie 主要由 Oozie ClientOozie Server 这两个组件构成:
  • Oozie Client 负责提交任务。
  • Oozie Server 运行于 Java Servlet 容器(Tomcat)中的 Web 程序,其页面效果如下图所示。

3,Oozie 的特点

(1)提供了 Web 界面。
(2)支持不同任务类型的 Hadoop 任务,例如:MapReduceHiveSqoop 等。
(3)支持特殊类型的作业,例如:Java 程序、Shell 脚本等。
(4)复杂的依赖关系、事件触发和时间触发、使用 XML 语言进行表达。
(5)程序定义支持 EL 常量和函数,表达更加丰富。

4,Oozie 的调度流程

(1)Oozie 提供了 HPDLHadoop Process Defination Language)来构造工作流。工作流操作通过远程系统启动任务。当任务完成后,远程系统会进行回调来通知任务已经结束,然后开始下一个操作。

(2)Oozie 工作流中主要包含控制流节点和操作节点。
  • 控制流节点:定义工作流的开始和结束,并且控制工作流的执行路径。
  • 操作节点:负责工作流触发计算任务的执行。

(3)以 MapReduce 离线计算框架中的单词计数功能为例,如果使用 Oozie 进行调度,则执行流程下图所示:

(4)OozieAction 为基本任务单位,每个 Action 都是一个单独的任务,可以将多个 Action 构成一个 DAG 图(有向无环图)模式进行运行,实现多级依赖任务的调度。

(5)Oozie 可以用 ForkJoin 节点进行多任务并行处理,同时 ForkJoin 节点必须同时出现,缺一不可。Fork 节点可以把任务切分成多个并行任务,Join 节点则会合并多个并行任务,执行流程如下图所示:

5,架构分析

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

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