【发布时间】:2018-07-05 23:17:28
【问题描述】:
我正在尝试使用 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 复制到三个不同的操作performAction1、performAction2、performAction3 并在分叉中使用它们。现在工作流程正在完成,因为joinForks 被所有分支调用。但是,我真的希望我不必以不同的名称一次又一次地重复相同的操作。任何帮助表示赞赏。
谢谢
【问题讨论】:
-
请提供您的工作流程/配置文件。
-
@codeaperature 提供了示例工作流文件。感谢观看
标签: oozie oozie-workflow