Могу ли я использовать действие oozie в качестве шаблона, который я вызываю много раз?

У меня есть действие оболочки oozie, которое принимает ряд аргументов, которые передаются сценарию оболочки. Я хочу запускать это действие несколько раз с разными аргументами каждый раз. Пример dag будет выглядеть примерно так:

    Start
   /  |  \
f(a) f(d) f(g)
 |    |    |
 V    V    V
f(b) f(e) f(h)
 |    |    |
 V    V    V
f(c) f(f) f(i)
   \  |  /
     End

Можно ли добиться этого, не имея кучу дублирующих действий?


person Jared DuPont    schedule 08.07.2020    source источник


Ответы (1)


да, это возможно с опцией Oozie sub-workflow.

Составьте действие Shell в качестве подчиненного рабочего процесса и вызывайте подчиненный рабочий процесс из многих мест основного рабочего процесса с разными входными значениями.

    <action name="call_sub_workflow_1">
      <sub-workflow>
          <app-path>${workflowAppUri}/sub_workflow_with_shell_action/</app-path>
          <propagate-configuration/>
          <configuration>
              <property>
                  <name>argument_1</name>
                  <value>${wf:actionData('previous_action')['val1']}</value>
              </property>
              <property>
                  <name>argument_2</name>
                  <value>${val2}</value>
              </property>
          </configuration>
      </sub-workflow>
      <ok to="End"/>
      <error to="Fail"/>
    </action>

Основной рабочий процесс со структурой каталогов подчиненного рабочего процесса будет выглядеть следующим образом:

   main_workflow_dir
   |
   |--job.properties
   |
   |--workflow.xml  # main workflow, can call sub workflow from multiple places
   |
   |--sub_workflow_with_shell_action
       |
       |--shell script
       |
       |--workflow.xml  # sub workflow contains the shell script action and takes arguments
person suresiva    schedule 08.07.2020
comment
Спасибо, это именно то, что я искал. Однако один вопрос: нужно ли каким-то особым образом настраивать рабочий процесс «шаблон» или я могу просто напрямую вызвать обычный рабочий процесс в качестве вспомогательного рабочего процесса? - person Jared DuPont; 08.07.2020
comment
@JaredDuPont, я обновил ответ для структуры каталогов рабочего процесса с помощью подрабочего процесса. - person suresiva; 08.07.2020
comment
Должен ли подпроцесс находиться в подкаталоге и должен ли он называться workflow.xml? Я спрашиваю, потому что не похоже, что вы указали имя рабочего процесса в показанном вами коде, поэтому я предполагаю, что он автоматически выбирает «workflow.xml». - person Jared DuPont; 08.07.2020
comment
да, вспомогательный рабочий процесс должен находиться в подкаталоге, этот подкаталог должен быть настроен в свойстве «путь к приложению» при вызове вспомогательного рабочего процесса, как показано в приведенном выше коде. Каталог этого подчиненного рабочего процесса должен содержать файл workflow.xml. - person suresiva; 08.07.2020
comment
Обратитесь к этому репозиторию для примера вспомогательного рабочего процесса. - person suresiva; 08.07.2020