首页 > 解决方案 > 我可以使用 oozie 动作作为我多次调用的模板吗?

问题描述

我有一个 shell oozie 动作,它接受许多传递给 shell 脚本的参数。我想每次使用不同的参数多次触发该动作。一个示例 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

是否有可能在没有大量重复操作的情况下实现这一目标?

标签: ooziedirected-acyclic-graphsoozie-workflow

解决方案


是的,可以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

推荐阅读