目前我的oozie工作流中有6个动作,如下所示。
在mainjob1完成所有第一、第二和第三个作业之后,应该并行运行。在mainjob2完成之后,只有第二个和第三个作业应该并行运行。
有没有可能解决上述工作流执行方式?
<workflow-app name="sample-wf" xmlns="uri:oozie:workflow:0.1">
....
<decision name="execution-mode-decision">
<switch>
<case to="MainJob1">${executionMode eq "DEFAULT"}</case>
<case to="MainJob2">${executionMode eq "INVALID"}</case>
<default to="MainJob1" />
</switch>
</decision>
<action name="MainJob1">
<map-reduce>
.......
</map-reduce>
<ok to="fork1"/>
<error to="kill"/>
</action>
<action name="MainJob2">
<map-reduce>
......
</map-reduce>
<ok to="fork2"/>
<error to="kill"/>
</action>
...
<fork name="fork1">
<path start="firstparalleljob"/>
<path start="secondparalleljob"/>
<path start="thirdparalleljob"/>
</fork>
<fork name="fork2">
<path start="secondparalleljob"/>
<path start="thirdparalleljob"/>
</fork>
<action name="firstparallejob">
<map-reduce>
...........
<ok to="joining"/>
<error to="kill"/>
</action>
<action name="secondparalleljob">
<map-reduce>
........
</map-reduce>
<ok to="joining"/>
<error to="kill"/>
</action>
<action name="thirdparalleljob">
<map-reduce>
........
</map-reduce>
<ok to="joining"/>
<error to="kill"/>
</action>
<join name="joining" to="emailFailure"/>
...
</workflow-app>
1条答案
按热度按时间8qgya5xd1#
您可以将firstparalleljob、secondparalleljob和thirdparalleljob放在单独的3个子工作流中,然后在第一个fork中调用3个子工作流,在下一个fork中调用2个子工作流。这样,我们甚至可以在同一个操作的不同fork时间将不同的值传递给变量。