如何使用具有不同参数列表的相同通用workflow.xml来分叉三个不同的作业?

时间:2016-10-05 04:43:22

标签: xml hadoop workflow oozie fork-join

我是hadoop生态系统的初学者。我试图从同一个通用workflow.xml文件中调用三个不同的作业,但是将不同的参数传递给每个子工作流。

子工作流程:

<?xml version="1.0" encoding="UTF-8"?>
<workflow-app xmlns="uri:oozie:workflow:0.4" name="special-fork">

    <global>
        <job-tracker>${jT}</job-tracker>
        <name-node>${nN}</name-node>
    </global>

    <fork name="special-fork">
        <path start="aa"/>
        <path start="bb"/>
        <path start="cc"/>
    </fork>

    <action name="aa">
        <sub-workflow>
            <app-path>${nN}/xyz/workflow.xml</app-path>
            <propagate-configuration/>
        </sub-workflow>
        <ok to="special-join"/>
        <error to="kill"/>
    </action>

    <action name="bb">
        <sub-workflow>
            <app-path>${nN}/xyz/workflow.xml</app-path>
            <propagate-configuration/>
        </sub-workflow>
        <ok to="special-join"/>
        <error to="kill"/>
    </action>

    <action name="cc">
        <sub-workflow>
            <app-path>${nN}/xyz/workflow.xml</app-path>
            <propagate-configuration/>
        </sub-workflow>
        <ok to="special-join"/>
        <error to="kill"/>
    </action>

    <join name="special-join" to="end"/>

    <action name="email-alert-fail">
        <email xmlns="uri:oozie:email-action:0.1">
            <to>${emailing_list}</to>
            <subject>Oozie workflow Failed</subject>
            <body>
            </body>
        </email>
        <ok to="kill"/>
        <error to="kill"/>
    </action>

    <kill name="kill">
        <message>Map-Reduce Failed</message>
    </kill>

    <end name="end"/>
</workflow-app>

我想传递参数列表,例如source,input_path,output_path,凭证,这些参数不同于所有三个进程aa,bb,cc。如何将其传播到三个子工作流中的每一个?

感谢。

1 个答案:

答案 0 :(得分:2)

您可以使用子工作流操作的configuration标记并传递所需的参数。这是它的样子:(添加所有必需的属性)

<action name="aa">
    <sub-workflow>
        <app-path>${nN}/xyz/workflow.xml</app-path>
        <propagate-configuration/>
        <configuration>
            <property>
               <name>input_path</name>
               <value>your_input_path</value>
            </property>
        </configuration>
    </sub-workflow>
    <ok to="special-join"/>
    <error to="kill"/>
</action>