小编Hil*_*rin的帖子

当一个人被杀时,Oozie分叉会杀死所有行动

我在Oozie中使用fork/join,以便并行一些子工作流操作.我的workflow.xml如下所示:

<workflow-app name="myName" xmlns="uri:oozie:workflow:0.5"
<start to="fork1"/>
<kill name="Kill">
    <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>

<fork name="fork1">
    <path start="subworkflow1"/>
    <path start="subworkflow2"/>
</fork>
<join name="Completed" to="End"

<action name="subworkflow1">
    <sub-workflow>
        <app-path>....</app-path>
        <propagate-configuration/>
        <configuration>
            <property>
                <name>....</name>
                <value>....</value>
            </property>
        </configuration>
    </sub-workflow>
    <ok to="Completed"/>
    <error to="Completed"/>
</action>

<action name="subworkflow2">
    <sub-workflow>
        <app-path>....</app-path>
        <propagate-configuration/>
        <configuration>
            <property>
                <name>....</name>
                <value>....</value>
            </property>
        </configuration>
    </sub-workflow>
    <ok to="Completed"/>
    <error to="Completed"/>
</action>

<end name="End"></workflow-app>
Run Code Online (Sandbox Code Playgroud)

当subworkflow1被杀死时(由于某种原因失败),它也会杀死subworkflow2.我希望这两个动作是平行的,但不依赖.

在我的工作流程中,当workflow1被杀死时,我看到workflow2也被杀死了,但我的应用程序成功了(我在Oozie仪表板上检查它 - > HUE中的工作流程).

在这种情况下,我希望subworkflow1将被杀死,subworkflow2将成功,我真的不关心我的整个应用程序会说什么.

  • 在我的情况下,subworkflow1需要比subworkflow2更长的时间,所以当我检查我的应用程序结束时,我看到虽然它说subworkflow1 + 2被杀了,我的应用程序成功了,但真正发生的是subworkflow2完成了它的部分,即使,它后来被杀死了(它继续"运行",直到叉子的所有路径完成它们的运行).所以workflow2完成了它的部分而不是被杀死因为workflow1被杀了...

我应该怎么做才能使每个路径获得它自己的状态并继续运行,即使同一个fork中的其他路径被杀死了?

parallel-processing workflow fork join oozie

7
推荐指数
2
解决办法
3966
查看次数

标签 统计

fork ×1

join ×1

oozie ×1

parallel-processing ×1

workflow ×1