oozie:如何在相应的工作流程中使用oozie coodinator属性?

时间:2013-12-09 06:06:50

标签: hadoop oozie

我有一个oozie作业作为调用worflow的协调器运行,在协调器中有一些使用协调器EL函数的配置属性,如下所示 -

$ {oozieAppDir} /copyLogs.wf.xml

   <configuration>
       <property>
           <name>filename3</name>
           <value>${coord:formatTime(coord:dateOffset(coord:nominalTime(), -3, 'HOUR'), 'MM')}-${coord:formatTime(coord:dateOffset(coord:nominalTime(), -3, 'HOUR'), 'dd')}-${coord:formatTime(coord:dateOffset(coord:nominalTime(), -3, 'HOUR'), 'yyyy')}-${coord:formatTime(coord:dateOffset(coord:nominalTime(), -3, 'HOUR'), 'HH')}</value>
       </property>

  </configuration>

当这个作业的一个实例被杀死时,我想从命令行单独重新运行工作流,但由于它使用协调器中定义的属性而导致错误,因为它使用协调器,所以我无法在工作流中添加这些属性EL函数,而且我没有找到相应的wf:EL函数,最好的方法是什么,我基本上对协调器触发的这个工作流失败的自动化感兴趣。请以最小的变化建议最佳方式。

3 个答案:

答案 0 :(得分:1)

您可以使用-D

在提交期间将参数传递到工作流程
oozie job -oozie <oozie URL> -config <configFile> -Dnameofproperty=value  -submit

您可以在工作流程中使用String wf:conf(String name)功能来检索值

答案 1 :(得分:1)

您需要在coordinator.xml中定义协调器EL函数/属性,并在workflow.xml中调用该属性:

<强>协调员

<action>
      <workflow>
                <app-path>${workflowPath}</app-path>
        <configuration>
            <property>
                    <name>nominalTime</name>
                    <value>${coord:nominalTime()}</value>
            </property>
        </configuration>
      </workflow>
</action>

工作流程(Hive示例)

<param>date=${nominalTime}</param>

答案 2 :(得分:0)

您确定可以在配置文件中使用oozie表达式吗?

当我需要手动运行工作流程时,我在配置文件中定义一个属性并将该工作流程提交给oozie。

configuration.properties:

filename3=/user/john/data.tsv

workflow.xml:

...
<property>
  <name>filename3</name>
  <value>${filename3}</value>
</property>
...

然后运行此工作流程:

oozie -config configuration.properties -run