【问题标题】:How can I use Oozie workflow configuration property in the workflow itself?如何在工作流本身中使用 Oozie 工作流配置属性?
【发布时间】:2015-02-18 16:26:22
【问题描述】:

我有一个 Oozie 协调器,它监视某个文件是否出现在某个目录中。该协调器每天运行。如果显示正在观看的文件,则会启动工作流。

工作流采用正在监视的文件/目录的参数。 Oozie 将其传递给它。这是一个完全限定的路径(即:hdfs://myhost/dir1/dir2/2015-02-17)。

我需要获取 /dir1/dir2/2015-02-17 并将其传递给 Hive 脚本,该脚本似乎没有采用完全限定的 HDFS 路径。这意味着我需要使用 Workflow EL 函数来去除 hdfs://myhost 部分。我认为 replaceAll() 会这样做。问题是将结果传递给 Hive。

有没有办法在工作流本身中使用工作流配置属性?

例如,我希望能够使用“dateToProcess”,它是作为工作流输入的目录名称的一部分:

  <workflow-app name="mywf" xmlns="uri:oozie:workflow:0.4">
  <parameters>
    <property>
       <name>region</name>
    </property>
    <property>
       <name>hdfsDumpDir</name>
    </property>
    <property>
      <name>hdfsWatchDir</name>
      <value>${nameNode}${watchDir}</value>
    </property>
  </parameters>

  <start to="copy_to_entries"/>
  <action name="copy_to_entries">
    <hive xmlns="uri:oozie:hive-action:0.2">
      <job-tracker>${jobTracker}</job-tracker>
      <name-node>${nameNode}</name-node>
      <job-xml>hive-site.xml</job-xml>

      <configuration>
        <property>
          <name>mapred.job.queue.name</name>
          <value>${queueName}</value>
        </property>
        <property>
          <name>dateToProcess</name>
          <value>${replaceAll(hdfsDumpDir, hdfsWatchDir,"")}</value>
        </property>
      </configuration>

      <script>myhivescript.q</script>
      <!--
           Parameters referenced within Hive script.
      -->
      <param>INPUT_TABLE=dumptable</param>
      <param>INPUT_LOCATION=${watchDir}/${wf:conf('dateToProcess')}</param>
    </hive>
    <ok to="cleanup"/>
    <error to="sendEmailKill"/>
  </action>
  ...
  </workflow>

当我使用 $wf:conf('dateToProcess') 时,我得到一个空字符串。 使用 ${dateToProcess} 时找不到变量。

有什么想法吗?

【问题讨论】:

    标签: hadoop hive oozie


    【解决方案1】:

    删除

        <property>
          <name>dateToProcess</name>
          <value>${replaceAll(hdfsDumpDir, hdfsWatchDir,"")}</value>
        </property>
    

    而是将其值直接放入&lt;param&gt;,即

      <param>INPUT_LOCATION=${watchDir}/${replaceAll(hdfsDumpDir, hdfsWatchDir,"")}</param>
    

    如果您要在多个地方使用它,请将dateToProcess 属性添加到config-default.xml,然后它将按您的预期使用。

    【讨论】:

      猜你喜欢
      • 2013-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-09
      • 1970-01-01
      相关资源
      最近更新 更多