如何从另一个hadoop工作提交hadoop工作

时间:2016-01-12 11:35:01

标签: java hadoop oozie

我使用Oozie来安排非map-reduce hadoop作业。 hadoop作业在oozie中运行而没有给出任何错误。我想使用hadoop作业提交另一个非map-reduce hadoop作业。我怎么能这样做?

1 个答案:

答案 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 功能。

您可以使用的另一个备用选项,将单个脚本中的操作和单个操作中的所有操作组合在一起,尽管此步骤对于脚本过程并不复杂。