从oozie提交Pig作业

cgvd09ve  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(380)

我正在hadoop集群中使用oozie来实现Pig作业的自动化。
我能够从oozie运行一个示例pig脚本,但我的下一个要求是运行一个pig作业,其中pig脚本从shell脚本接收输入参数。请分享你的想法

jq6vz3qz

jq6vz3qz1#

更新:
好吧,把原来的问题弄清楚,如何从shell脚本输出中传递参数。以下是工作示例:
工作流.xml

<workflow-app xmlns='uri:oozie:workflow:0.3' name='shell-wf'>
    <start to='shell1' />
    <action name='shell1'>
        <shell xmlns="uri:oozie:shell-action:0.1">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <configuration>
                <property>
                  <name>mapred.job.queue.name</name>
                  <value>${queueName}</value>
                </property>
            </configuration>
            <exec>so.sh</exec>
            <argument>A</argument>
            <argument>B</argument>
            <file>so.sh</file> 
            <capture-output/>
        </shell>
        <ok to="shell2" />
        <error to="fail" />
    </action>

    <action name='shell2'>
        <shell xmlns="uri:oozie:shell-action:0.1">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <configuration>
                <property>
                  <name>mapred.job.queue.name</name>
                  <value>${queueName}</value>
                </property>
            </configuration>
            <exec>so2.sh</exec>
            <argument>${wf:actionData('shell1')['out']}</argument>
            <file>so2.sh</file> 
        </shell>
        <ok to="end" />
        <error to="fail" />
    </action>

    <kill name="fail">
        <message>Script failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>
    <end name='end' />
</workflow-app>

所以,嘘

echo "out=test"

二氧化硫.sh

echo "I'm so2.sh and I get the following param:"
echo $1

如果用pig操作替换第二个shell操作,并将参数传递给pig脚本,如下所示:

...
<param>MY_PARAM=${wf:actionData('shell1')['out']}</param>
...

你原来的问题解决了。
关于sharelib问题,您必须确保在属性中配置lib\u path=where/you/jars/are并将此参数交给pig操作,

<param>LIB_PATH=${LIB_PATH}</param>

不仅仅是从那里登记jar:

REGISTER '$LIB_PATH/my_jar'

=========================================================================================您要找的是
map wf:actiondata(字符串节点)
此函数仅适用于在完成时生成输出数据的操作节点。
输出数据采用java属性格式,通过这个el函数,它可以作为一个Map。
文档这是一个很好的例子:http://www.infoq.com/articles/oozieexample (实际上,您必须按照samson在评论中所写的那样捕获输出)
更多细节:“如果存在capture output元素,则它指示oozie捕获shell命令执行的stdout的输出。shell命令输出必须是java属性文件格式,并且不能超过2kb。在工作流定义中,可以通过字符串访问shell操作节点的输出action:output(字符串节点,字符串键)函数(请参阅“4.2.6动作el函数”一节)
或者您可以使用一个不太好但简单的工作轮,在pig中执行shell脚本,并将其结果保存在一个变量中,然后使用它。这样地:

%DEFINE MY_VAR `echo "/abc/cba'`
A = LOAD '$MY_VAR' ...

但这一点都不好,第一个解决方案是建议的。

相关问题