在Hadoop开发Oozie工作流程

时间:2020-02-23 14:33:27  来源:igfitidea点击:

Oozie工作流程是在核心定向图表中,我们可以其中定义操作(Hadoop应用程序)和数据流,但没有循环 - 这意味着我们无法定义一个在某些内部运行特定操作的结构满足条件(例如,用于循环)。

Oozie Workflows非常灵活,因为我们可以定义基于条件的决策和分叉路径以进行并行执行。
我们还可以执行广泛的操作。

在此图中,我们可以看到一个工作流,显示Oozie工作流的基本函数。
首先,运行猪脚本,并立即后跟决策树。
根据输出的状态,控制流程可以直接直接转到HDFS(Hadoop分布式文件系统)文件操作(例如,复杂的分布式操作)或者叉动作。

如果控件流传递给叉子操作,则同时运行两份作业:MapReduce作业以及Hive查询。
然后,控制流程一旦MapReduce作业和Hive查询完成运行,就会进入HDFS操作。
HDFS操作后,工作流程已完成。

基于Hadoop流程定义语言(HPDL)架构,以XML编写了Oozie工作流定义。
此特定模式依次基于XML进程定义语言(XPDL)模式,这是一种用于建模业务流程定义的产品独立标准。

Oozie工作流由一系列操作组成,该操作由XML节点编码。
有不同类型的节点,代表不同类型的动作或者控制流程指令。
每个Oozie工作流都有自己的XML文件,其中每个节点及其互连都是定义的。

工作流节点都需要唯一标识符,因为它们用于标识要在工作流中处理的下一个节点。
这意味着执行操作的顺序取决于操作的节点在工作流XML中出现的位置。
要查看此概念如何查找,请查看以下列表,该列表显示了Oozie Workflow的XML文件的基本结构的示例。

<workflow-app name="SampleWorkflow" xmlns="uri:oozie:workflow:0.1">
  <start to="firstJob"
  <action name="firstJob">
    <pig>...</pig>
    <ok to="secondJob"
    <error to="kill"
  </action>
  <action name="secondJob">
    <map-reduce>...</map-reduce>
    <ok to="end" 
    <error to="kill" 
  </action>
  <end name="end"
  <kill name="kill">
    <message>"Killed job."</message>
  </kill>
</workflow-app>

在此示例中,除了启动,结束和杀害节点之外,我们有两个动作节点。
每个操作节点表示正在执行的应用程序或者命令。