Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 如何使用EL表达式创建变量,以便在oozie工作流的所有操作中使用?_Hadoop_El_Oozie - Fatal编程技术网

Hadoop 如何使用EL表达式创建变量,以便在oozie工作流的所有操作中使用?

Hadoop 如何使用EL表达式创建变量,以便在oozie工作流的所有操作中使用?,hadoop,el,oozie,Hadoop,El,Oozie,我想创建一个变量,该变量应可用于Oozie工作流中的所有操作。我试图创建它,如下所示。但EL表达式未得到计算,导致当前值与EL表达式本身一样可变。有人能解释一下吗 <workflow-app xmlns="uri:oozie:workflow:0.4" name="no-op-wf"> <parameters> <property> <name>current_ts</name> <value&

我想创建一个变量,该变量应可用于Oozie工作流中的所有操作。我试图创建它,如下所示。但EL表达式未得到计算,导致当前值与EL表达式本身一样可变。有人能解释一下吗

<workflow-app xmlns="uri:oozie:workflow:0.4" name="no-op-wf">
  <parameters>
    <property>
      <name>current_ts</name>
      <value>${replaceAll((replaceAll((replaceAll((timestamp()),"-","")),"T","_")),":","")}</value>
    </property>
  </parameters>
  <start to="test"/>
  <kill name="test">
    <!--message Just to show that this expression works if used here>Timestamp - [${replaceAll((replaceAll((replaceAll((timestamp()),"-","")),"T","_")),":","")}</message-->
    <message>Timestamp - ${current_ts}</message> <!-- this will print expression but not evaluate it -->
  </kill>
  <end name="end"/>
</workflow-app>

当前的
${replaceAll((replaceAll((timestamp()),“-”,“),“T”,“u”),“:”,“)}
时间戳-${current\u ts}
中提到:

EL表达式可用于动作和决策节点的配置值。它们可以在XML属性值以及XML元素和属性值中使用

它们不能在XML元素和属性名称中使用。它们不能用在节点的名称中,也不能用在节点的转换元素中


但是您可以在协调器中使用它

如果我在工作流中创建一个全局->配置->属性,并在wf的其他操作中引用它,那么属性中的EL表达式将不会得到计算

作为一种解决方法,我将wf包装为子wf,并在父wf中创建了global->configuation->属性,然后将其传递给子wf。通过这种变通方法,EL表达式得到了计算

父WF:

<workflow-app xmlns="uri:oozie:workflow:0.4" name="main-wf">
  <global>
    <configuration>
      <property>
        <name>run_ts</name>
        <value>${replaceAll((replaceAll((replaceAll((timestamp()),"-","")),"T","_")),":","")}</value>
      </property>
    </configuration>
  </global>

 <action name="tbl-subwf">
    <sub-workflow>
      <app-path>${AppPath}</app-path>
      <propagate-configuration/>
 </sub-workflow>
    <ok to="join-node"/>
    <error to="fail"/>
  </action>
 <kill name="fail">
    <message>Sub workflow failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
  </kill>
  <end name="end"/>
</workflow-app>

跑步
${replaceAll((replaceAll((timestamp()),“-”,“),“T”,“u”),“:”,“)}
${AppPath}
子工作流失败,错误消息[${wf:errorMessage(wf:lastErrorNode())}]

您是否可以尝试使用全局或配置标记,以便属性在整个工作流中都可用。xml您可能会发现post(第2节)对于参数和属性之间的差异非常有用。。。