我使用Oozie来安排非map-reduce hadoop作业。 hadoop作业在oozie中运行而没有给出任何错误。我想使用hadoop作业提交另一个非map-reduce hadoop作业。我怎么能这样做?
答案 0 :(得分:0)
在Oozie中,您可以在同一个工作流程中调用另一个动作来调用Muiltiple hadoop作业,只需要检查点是否应该使用不同的动作名称调用不同的动作。
以下示例可以提供帮助
例如:将由oozie调用两个shell脚本,它将执行 第一个脚本copy.sh将执行从cluster1到cluster2的distcp操作 第二个脚本将执行从cluster2到本地位置的coppied转储下载。 所以工作流程就像:
<workflow-app xmlns='uri:oozie:workflow:0.2' name='testworkflowaction'>
<start to='UserVectorUpload'/>
<action name="shellAction_1">
<shell xmlns="uri:oozie:shell-action:0.1">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>oozie.launcher.mapred.job.queue.name</name>
<value>default</value>
</property>
</configuration>
<exec>scipt_copy.sh</exec>
<file>hdfs://cluster2:8020/localtion_of_script_in_cluster/scipt_copy.sh</file>
<capture-output/>
</shell>
<ok to="shellAction_2"/>
<error to="killAction"/>
</action>
<kill name="killAction">
<message>Shell Action Failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<action name="shellAction_2">
<shell xmlns="uri:oozie:shell-action:0.1">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>oozie.launcher.mapred.job.queue.name</name>
<value>default</value>
</property>
</configuration>
<exec>scipt_download.sh</exec>
<file>hdfs://cluster2:8020/localtion_of_script_in_cluster/scipt_download.sh</file>
<capture-output/>
</shell>
<ok to="end"/>
<error to="killAction"/>
</action>
<kill name="killAction">
<message>Shell Action Failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
所以通过上面的例子,第一个动作是使用distcp从clustet1到cluster2执行script_copy.sh,一旦distcp完成,它将使用 get 或<从cluste2下载到本地位置strong> copyToLocal 功能。
您可以使用的另一个备用选项,将单个脚本中的操作和单个操作中的所有操作组合在一起,尽管此步骤对于脚本过程并不复杂。