在Oozie中将pig变量的值从一个动作传递到另一个动作

时间:2015-09-25 08:35:01

标签: apache-pig oozie

我的oozie工作流代码段如下所示:

<workflow-app name="Abandonment_Workflow" xmlns="uri:oozie:workflow:0.5">
    <start to="pig-0581"/>
    <kill name="Kill">
        <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>
    <action name="pig-0581">
        <pig>
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <script>/user/793972/TRM/1.pig</script>
              <param>input=/data/*/*.bz2</param>
            <archive>/user/a.jar#a.jar</archive>
        </pig>
        <ok to="fork-3d77"/>
        <error to="Kill"/>
    </action>
    <action name="pig-a915">
        <pig>
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <script>/user/793972/TRM/2.pig</script>
              <param>input=/data/*/*.bz2</param>
            <archive>/user/a.jar#a.jar</archive>
            </pig>
            <ok to="join-31be"/>
        <error to="Kill"/>
    </action>
     .......
    <end name="End"/>
</workflow-app>

在猪脚本1.pig

data = LOAD $input USING PigStorage('\t') AS 
(timestamp:chararray,server:chararray,sessionid:chararray);

在猪脚本2.pig中,我想使用变量 - &#39;数据&#39;在1.pig,

cleandata = foreach数据生成.....

是否可以这样做。

如果是,那么请建议如何

1 个答案:

答案 0 :(得分:0)

我认为你无法在猪身上实现这一目标。执行pig脚本时,编译器会将pig latin命令转换为一个或多个MR作业,这些作业将独立运行。因此,两个猪脚本无法相互通信。

但是,您可以尝试使用Pig宏。

--LoadInput.macro
DEFINE loadInput(input) returns data{
$data = LOAD '$input' USING PigStorage('\t') AS 
       (timestamp:chararray,server:chararray,sessionid:chararray);
}

Pig Script 1

IMPORT '/path/LoadInput.macro';
data = loadInput($input);
cleandata = FOREACH data GENERATE timestamp, sessionid;

Pig Script 2

IMPORT '/path/LoadInput.macro';
data2 = loadInput($input);
cleandata2 = FOREACH data2 GENERATE timestamp, server;