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



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

在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>

当工作流到达决策节点时,它会根据全局问题选择路径。我希望全局道具值取决于启动子工作流的结果。

决策节点。。。取决于全局道具。我想要全球道具值取决于子工作流的结果

评论#1:从一般原则来看,决策取决于结果和全局(和常量)属性。使用布尔EL表达式,例如(参见其中的一些示例)

注释#2:Oozie文档中存在许多混淆,属性Hadoop属性的缩写,传输到YARN作业;和工作流属性也称为参数,它们是EL变量(在EL文档中再次称为属性damn),用于定义属性/参数等的值。但不发送到YARN作业。

按照您使用"全局道具"的方式,它应该在<parameters>部分中定义,而不是在<global>部分中定义。

注释#3:AFAIK-Oozie参数和属性是不可变的;您可以只设置一次它们的值,使用。。。

  • 参数>硬编码字符串文字
  • properties>文字和/或参数和/或EL函数

还有一个范围问题,即当"全局"属性和"本地"属性(在子工作流的操作中定义,同样来自字符串/param/EL fct)具有相同的确切名称时,"本地"的名称优先。

注释#4:有一种方法可以使用<capture-output>过程(请参阅Oozie文档中的经典示例)从Java/Pig/Shell操作中检索一些自定义状态信息,但您只能从相同的工作流中检索。有了一个在具有不同ID的单独上下文中执行的子工作流,你就倒霉了。

苏。。。当其他一切都失败时,唯一的希望就是回到基本的。听说过Pig在完成时创建的名为_SUCCESS的空HDFS文件吗?这样就可以自动触发进一步的处理(例如通过oozie Coordinator)?

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

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

相关内容

  • 没有找到相关文章

最新更新