如何在oozie工作流任务之间传递数据

时间:2015-07-10 13:19:34

标签: hadoop workflow pipeline oozie oozie-coordinator

Oozie有一套丰富的指令来描述任务之间所需的控制流程。它有什么能帮助在这些任务之间传递数据吗?或者将数据完全传递给用户?

更新:我使用shell操作来调用spark,所以我需要一个足够通用的解决方案来包含该用例。

1 个答案:

答案 0 :(得分:1)

为了在Oozie Workflow Tasks之间传递数据,您需要将workflow2的输入定义为workflow1的输出。例如:

<workflow-app xmlns='uri:oozie:workflow:0.1' name='demo-wf'>
  <start to="workflow1" />
    <action name="workflow1">
      <map-reduce>
        <job-tracker>${jobTracker}</job-tracker>
        <name-node>${nameNode}</name-node>
        <configuration>
          <property>
            <name>mapred.input.dir</name>
            <value>${workflow1_Input}</value>
          </property>
          <property>
            <name>mapred.output.dir</name>
            <value>${workflow1_Output}</value>
          </property>
        </configuration>
      </map-reduce>
      <ok to="workflow2" />
      <error to="fail" />
    </action>
    <action name="workflow2">
      <map-reduce>
        <job-tracker>${jobTracker}</job-tracker>
        <name-node>${nameNode}</name-node>
        <configuration>
          <property>
            <name>mapred.input.dir</name>
            <value>${workflow1_Output}</value>
          </property>
          <property>
            <name>mapred.output.dir</name>
            <value>${workflow2_Output}</value>
          </property>
        </configuration>
      </map-reduce>
      <ok to="done" />
      <error to="fail" />
    </action>
</workflow-app>

请注意,我为map-reduce作业留下了一堆细节,仅显示输入和输出。设置属性文件时,可以定义输入和输出参数。另一件需要注意的事情是MapReduce会忽略任何带有下划线_作为输入的东西。因此,当第一个MapReduce作业完成时,它将有一个_SUCCESS文件和一个_log目录,它将被忽略作为第二个动作的输入。