如何在 oozie 工作流任务之间传递数据
How to pass data between oozie workflow tasks
Oozie 有一组丰富的指令来描述任务之间所需的控制流。它是否有任何有助于在这些任务之间传递数据的东西?还是传递数据是一项完全留给用户的练习?
更新:我正在使用 shell 操作来调用 spark,因此我需要一个足够通用的解决方案来包含该用例。
为了在 Oozie 工作流任务之间传递数据,您需要将工作流 2 的输入定义为工作流 1 的输出。例如:
<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 目录,它们将作为第二个操作的输入被忽略。
Oozie 有一组丰富的指令来描述任务之间所需的控制流。它是否有任何有助于在这些任务之间传递数据的东西?还是传递数据是一项完全留给用户的练习?
更新:我正在使用 shell 操作来调用 spark,因此我需要一个足够通用的解决方案来包含该用例。
为了在 Oozie 工作流任务之间传递数据,您需要将工作流 2 的输入定义为工作流 1 的输出。例如:
<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 目录,它们将作为第二个操作的输入被忽略。