Oozie:传播配置不起作用

时间:2015-01-23 13:13:01

标签: hadoop configuration mapreduce oozie orchestration

我可能遗漏了一些东西,因为propagate-configuration似乎对我不起作用。

我有一个基本工作流程base.xml,配置为:

<global>
    <job-tracker>${jobTracker}</job-tracker>
    <name-node>${nameNode}</name-node>
    <job-xml>application-config.xml</job-xml>   
    <configuration>
        <property>
            <name>paths.prefix.metadata</name>
            <value>${nameNode}${fimProcessingMetadataPath}</value>
        </property>
    </configuration>
</global>

在这个文件中,我有如下定义的子工作流程:

<action name="srv_a">
    <sub-workflow>
        <app-path>${nameNode}${workflowPath}/a.xml</app-path>
        <propagate-configuration />
    </sub-workflow>
    <ok to="b" />
    <error to="kill" />
</action>
<action name="srv_b">
    <sub-workflow>
        <app-path>${nameNode}${workflowPath}/b.xml</app-path>
        <propagate-configuration />
    </sub-workflow>
    <ok to="c" />
    <error to="kill" />
</action>
// Here there are many sub-workflows like these.

但是在我的代码中,我找不到paths.prefix.metadata属性 - 它无法找到它。

java.lang.IllegalArgumentException: Mandatory property property is not set.     
Please provide paths.prefix.metadata

如果我在a.xml中再次将其定义为自己的属性,我可以访问它。

那么,我如何将此变量从base.xml定义传播到子工作流程?据我所知documentation

  

传播配置标志(如果存在)表示工作流作业配置应传播到子工作流。

但它似乎没有达到子工作流程。为什么?全局配置不会传播到子子工作流程,这不是预期的行为吗?

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。在一些加扰后,我发现工作的解决方法是在基础xml的子工作流中添加配置部分。配置部分内的属性将传递给子工作流,例如:

...
<action name="srv_b">
  <sub-workflow>
    <app-path>a.xml</app-path>
    <propagate-configuration />
    <configuration>
      <property>
        <name>paths.prefix.metadata</name>
        <value>${nameNode}${fimProcessingMetadataPath}</value>
      </property>
      ...
    </configuration>
  </sub-workflow>
</action>

答案 1 :(得分:0)

仅适用于传递job.properties文件。 要将全局部分的变量传递给子工作流,我们需要传入内部  子工作流程的一部分。