我正在尝试使用 fork 并行运行相同 oozie 操作的多个实例。在尝试这样做时,我适时收到错误说明
"E0744" 一个分叉不允许有多个过渡到同一个节点
我还查看了 oozie 代码库(LiteWorkflowAppParser),发现 oozie 确实不允许在 fork 中多次运行调用相同的操作,因为它对此进行了验证。现在我禁用了验证oozie.wf.validate.ForkJoin=false
并再次运行工作流程。这一次,工作流运行良好,但只有一个动作实例在运行。对我来说,虽然我禁用了验证,但下面的 oozie 只允许运行独特的操作,并且跳过了重复的操作。现在我的问题是,如何实现并行运行多个 oozie 动作?
我的工作流程是这样的:
<workflow-app xmlns="uri:oozie:workflow:0.4" name="my-workflow">
<start to="parallelize"/>
<fork name="parallelize">
<path start="performAction" />
<path start="performAction" />
<path start="performAction" />
</fork>
<action name="performAction">
.......
<ok to="joinForks"/>
<error to="fail"/>
</action>
<join name="joinForks" to="end" />
<kill name="fail">
<message>Responder Application, error
message[${wf:errorMessage(wf:lastErrorNode())}]
</message>
</kill>
<end name="end"/>
</workflow-app>
附加细节:
通过上述配置,我看到工作流performAction
在过渡到joinForks
阶段完成后卡住了。看起来它joinForks
正在等待剩余的操作向它报告,以便它可以结束。但问题是,剩余的操作从未启动,导致工作流无限期地等待。
在此之后,我只是复制performAction
到三个不同的 actionperformAction1
中performAction2
,performAction3
并在 forks 中使用它们。现在工作流程正在完成,因为joinForks
所有分支都调用了它。但是,我真的希望我不必以不同的名称一次又一次地复制相同的操作。任何帮助表示赞赏。
谢谢