在oozie子工作流中更新全局属性

时间:2016-01-05 17:43:02

标签: workflow oozie oozie-coordinator

是否可以覆盖子工作流中的全局属性值?

在main / workflow.xml中

    <workflow-app name="test-wf" xmlns="uri:oozie:workflow:0.4">

         <global>
              <configuration>
                 <property>
                    <name>global-prop</name>
                    <value>global-val</value>
                 </property>
              </configuration>
         <global>

    <start to="start" />
       <action name="start">
          <sub-workflow>
             <app-path>${wf:appPath()}/start</app-path>
             ....
             ...
    <decision name="wf-decision">
       <switch>
           <case to="wf-A">${global-prop}</case> 
<!-- can the value of global-prop be updated in main/start/workflow.xml, ie start subworkflow -->
           <default to="end" />
        </switch>
    </decision>

当工作流进入决策节点时,它取决于global-prob。我希望global-prop值取决于启动子工作流的结果。

1 个答案:

答案 0 :(得分:1)

  

决策节点......取决于global-prop。我想要全球支柱   价值取决于子工作流程的结果

¤评论#1:根据一般原则,决定取决于两者结果和全局(和常量)属性更有意义。使用布尔EL表达式作为实例(参见一些例子there

¤评论#2: 属性 之间的Oozie documentation存在很多混淆,作为 Hadoop属性,传输到YARN作业;和工作流属性也称为 参数 ,它们是EL变量(在EL文档中再次称为属性,该死的)用于定义属性/参数/等的值。但没有传递给YARN工作。

您使用“global-prop”的方式,应该在<parameters>部分而不是<global>中进行定义。

¤评论#3:AFAIK Oozie参数和属性是不可变的;你可以使用......

设置一次它们的值
  • 参数&GT;硬编码的字符串文字
  • 性状&gt;文字和/或参数和/或EL函数

还有一个范围问题 - 即当“全局”属性和“本地”属性(在子工作流的Action中定义,再次来自string / param / EL fct)具有相同的名称,“本地”优先。

¤评论#4:有一种方法可以使用<capture-output>过程从Java / Pig / Shell操作中检索一些自定义状态信息(请参阅classic { Oozie文档中的{3}} 但您只能从相同的工作流中检索它。使用子工作流,在具有不同ID的单独上下文中执行,您运气不佳。

¤ Soooo ......当其他一切都失败时,唯一的希望就是回归基础。曾经听说过Pig在完成时创建的名为_SUCCESS的空HDFS文件,因此可以自动触发进一步处理(例如,由oozie协调员)?

如果子工作流以某种方式创建具有预定义名称的HDFS文件,则决策可以使用example来检查该文件是否已创建:

 <case to="Happy">${fs:exists(concat(wf:conf("status.dir"),"/__HAPPY"))}</case>