是否可以覆盖子工作流中的全局属性值?
在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>