У меня есть координатор 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}.
Любые идеи?