在oozie工作流(hue)中,如何将参数从shell操作传递到hdfs操作

v09wglhw  于 2021-06-02  发布在  Hadoop
关注(0)|答案(3)|浏览(524)

在我的工作流中,我有一个shell操作和一个hdfs操作
炮弹行动呼应日期(日期=2016-10-06)
我想在hdfs action mkdir path中设置上述日期参数。下面是动作定义。

<action name="fs-a347">
    <fs>
    <mkdir path='${nameNode}/user/kylin/${wf:actionData("shell-e424")["date"]}'/>
    </fs>
    <ok to="End"/>
    <error to="Kill"/>
</action>

我得到以下错误。

EL_ERROR    Encountered "&", expected one of [<INTEGER_LITERAL>, <FLOATING_POINT_LITERAL>, <STRING_LITERAL>, "true", "false", "null", "(", ")", "-", "not", "!", "empty", <IDENTIFIER>]
rqqzpn5f

rqqzpn5f1#

我也遇到了同样的情况,这很可能是由于与wf:actiondata()el函数交互的xml解析的变幻莫测。不要对Map使用双引号,而要换成单引号,如下所示:

<action name="fs-a347">
    <fs>
        <mkdir path="${nameNode}/user/kylin/${wf:actionData('shell-e424')['date']}"/>
    </fs>
    <ok to="End"/>
    <error to="Kill"/>
</action>
ssm49v7z

ssm49v7z2#

为了从脚本或任何oozie操作节点捕获输出,需要利用 <capture-output/> 在节点定义的末尾添加标记。
从oozie文档:
如果存在capture output元素,则它指示oozie to capture output>shell命令执行的标准输出。shell命令输出必须是java属性文件格式的>,并且不能超过2kb。在>工作流定义中,可以通过>字符串访问shell操作节点的输出action:output(字符串节点,字符串键)函数(请参阅“4.2.6>动作el函数”一节)。
有关shell操作的语法和完整规范,请参见oozie文档:http://oozie.apache.org/docs/4.0.0/dg_shellactionextension.html

cczfrluj

cczfrluj3#

您需要将两个字符串连接起来以形成完整的路径。

String concat(String s1, String s2)

它返回两个字符串的串联。具有空值的字符串被视为空字符串。

<mkdir path='concat(${nameNode}/user/kylin/, ${wf:actionData("shell-e424")["date"]})'/>

相关问题