Я пытаюсь запустить несколько экземпляров одного и того же действия параллельно с помощью fork. При попытке сделать это, я получил сообщение об ошибке
"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
вызывается из всех вилок. Но, тем не менее, я действительно хотел бы, чтобы мне не приходилось делать этот обходной путь дублирования одного и того же действия снова и снова под другим именем. Любая помощь приветствуется.
Спасибо