oozie worflow中的几个hive2操作接收相同的时间戳

时间:2018-05-22 08:21:06

标签: hive workflow oozie

我构建了一个有两个hive2操作的工作流,我正在使用Hue运行它。我需要在工作流程启动时从系统获取当前时间并将其传递给两个操作。 这是工作流程的结构:

<?xml version="1.0" encoding="UTF-8"?>

<workflow-app xmlns="uri:oozie:workflow:0.5" name="workflow.xml">
    <global>
        <job-tracker>host1:1234</job-tracker>
        <name-node>hdfs://myhost:4312</name-node>
        <configuration> 
            <property> 
                <name>execution_start</name> 
                <value>${timestamp()}</value> 
            </property> 
        </configuration> 
    </global>
    <start to="script1" />
    <action name="script1">
        <hive2 xmlns="uri:oozie:hive2-action:0.2">
            <jdbc-url>jdbc:hive2://myhost:10/default</jdbc-url>
            <script>script1.hql</script>
            <param>execution_start=${execution_start}</param>
        </hive2>
        <ok to="script2" />
        <error to="fail" />
    </action>
    <action name="script2">
        <hive2 xmlns="uri:oozie:hive2-action:0.2">
            <jdbc-url>jdbc:hive2://myhost:10/default</jdbc-url>
            <script>script2.hql</script>
            <param>execution_start=${execution_start}</param>
        </hive2>
        <ok to="end" />
        <error to="fail" />
    </action>
    <kill name="fail">
        <message>Sub workflow failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>
    <end name="end" />
</workflow-app>

我需要在两个配置单元操作中都有相同的时间戳。到目前为止,Hue要求输入名称为execution_start的参数。

我也尝试过:<param>execution_start=${wf:conf('execution_start')}>。我没有提示输入参数,但我在脚本中得到一个NULL值。

请注意<param>execution_start=${timestamp()}>有效,但它并不适合我,因为时间戳在每个操作中都会有所不同。

1 个答案:

答案 0 :(得分:1)

您可以首先调用Oozie Shell操作,该操作只返回时间戳,捕获第一个操作的输出,然后使用<param>execution_start=${wf:actionData('TimestampShell')}</param>

将其传递给Hive2操作