Oozie fork多次调用同一操作

时间:2018-07-05 23:17:28

标签: oozie oozie-workflow

我正在尝试使用fork并行运行同一oozie动作的多个实例。尝试这样做时,我正确地指出了错误

  

“ E0744”不允许fork到同一节点进行多次转换

我也查看了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复制到三个不同的动作performAction1performAction2performAction3中,并在派生中使用了它们。现在joinForks被所有分支调用,工作流程完成了。但仍然,我真的希望我不必执行以另一名称重复一次重复相同动作的解决方法。任何帮助表示赞赏。

谢谢

1 个答案:

答案 0 :(得分:0)

我怀疑您收到的错误消息是由于以下代码造成的:

<fork name="parallelize">
  <path start="performAction" />
  <path start="performAction" />
  <path start="performAction" />
</fork>

<action name="performAction">
  ...
  <ok to="joinForks"/>
  <error to="fail"/>
</action>

我怀疑叉子必须是唯一的,就像这样:

<fork name="parallelize">
  <path start="performAction1" />
  <path start="performAction2" />
  <path start="performAction3" />
</fork>
<action name="performAction1"> 
  ...
  <ok to="joinForks"/>
  <error to="fail"/>
</action>
<action name="performAction2">
  ...
  <ok to="joinForks"/>
  <error to="fail"/>
</action>
<action name="performAction3"> 
  ...
  <ok to="joinForks"/>
  <error to="fail"/>
</action>

似乎有3个同名的fork摆脱了对转换的唯一命名要求。

您可以尝试使用唯一命名的单个叉子吗?