是否可以覆盖子工作流中的全局属性值?
在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值取决于启动子工作流的结果。
答案 0 :(得分:1)
决策节点......取决于global-prop。我想要全球支柱 价值取决于子工作流程的结果
¤评论#1:根据一般原则,决定取决于两者结果和全局(和常量)属性更有意义。使用布尔EL表达式作为实例(参见一些例子there)。
¤评论#2: 属性 之间的Oozie documentation存在很多混淆,作为 Hadoop属性,传输到YARN作业;和工作流属性也称为 参数 ,它们是EL变量(在EL文档中再次称为属性,该死的)用于定义属性/参数/等的值。但没有传递给YARN工作。
您使用“global-prop”的方式,应该在<parameters>
部分而不是<global>
中进行定义。
¤评论#3:AFAIK Oozie参数和属性是不可变的;你可以使用......
设置一次它们的值还有一个范围问题 - 即当“全局”属性和“本地”属性(在子工作流的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>