Hadoop 如何在工作流本身中使用Oozie工作流配置属性?

Hadoop 如何在工作流本身中使用Oozie工作流配置属性?,hadoop,hive,oozie,Hadoop,Hive,Oozie,我有一个Oozie协调器,它监视某个目录中出现的文件。该协调器每天运行。如果显示正在监视的文件,则启动工作流 工作流采用正在监视的文件/目录的参数。奥齐把这个传给它。它是一个完全限定的路径(即:hdfs://myhost/dir1/dir2/2015-02-17). 我需要获取/dir1/dir2/2015-02-17并将其传递到一个配置单元脚本中,该脚本似乎不采用完全限定的HDFS路径。这意味着我需要使用工作流EL功能来去除hdfs://myhost 部分我想replaceAll()可以做到

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

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

我需要获取/dir1/dir2/2015-02-17并将其传递到一个配置单元脚本中,该脚本似乎不采用完全限定的HDFS路径。这意味着我需要使用工作流EL功能来去除hdfs://myhost 部分我想replaceAll()可以做到这一点。问题是把结果传给蜂巢

是否有方法在工作流本身中使用工作流配置属性

例如,我希望能够使用“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>

区域
hdfsDumpDir
hdfsWatchDir
${nameNode}${watchDir}
${jobTracker}
${nameNode}
hive-site.xml
mapred.job.queue.name
${queueName}
数据处理
${replaceAll(hdfsDumpDir,hdfsWatchDir,“”)}
myhivescript.q
输入\表=转储表
输入位置=${watchDir}/${wf:conf('dateToProcess')}
...
当我使用$wf:conf('dateToProcess')时,得到一个空字符串。 使用${dateToProcess}时找不到变量

有什么想法吗?

删除

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

数据处理
${replaceAll(hdfsDumpDir,hdfsWatchDir,“”)}
而是将其值直接放入
中,即

  <param>INPUT_LOCATION=${watchDir}/${replaceAll(hdfsDumpDir, hdfsWatchDir,"")}</param>
INPUT_LOCATION=${watchDir}/${replaceAll(hdfsDumpDir,hdfsWatchDir,“”)}
如果要在多个位置使用此功能,请将
dateToProcess
属性添加到
config default.xml
,然后它将按您的预期提供