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

Posted

技术标签:

【中文标题】将猪变量的值从一个动作传递到 Oozie 中的另一个动作【英文标题】:Passing value of pig variable from one action to another action in Oozie 【发布时间】:2015-09-25 08:35:00 【问题描述】:

我的 oozie 工作流程 sn-p 看起来像:

<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中,我想在1.pig中使用变量-'data',

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

有可能吗?

如果是,请建议如何

【问题讨论】:

我不确定使用 pig1.pig 脚本中的数据到 pig2.pig 脚本的确切要求,因为您可以将相同的单个 Pig 脚本组合起来,因为您正在调用两个 pig 脚本操作一个接一个。在这两种情况下,转储都将加载到临时位置。 正确的 Debjit。很抱歉造成混乱。我还没有发布整个 oozie 工作流程。我的意图是使用第一个 pig 脚本的值并行运行 3 个 pig 脚本。因此问题 不,我不认为这是可能的 【参考方案1】:

我认为你无法在猪中实现这一点。执行 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);

猪脚本1

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

猪脚本2

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

【讨论】:

以上是关于将猪变量的值从一个动作传递到 Oozie 中的另一个动作的主要内容,如果未能解决你的问题,请参考以下文章

将 Jquery 中的值从一个 html 类传递到 PhoneGap 中的另一个 html 类

将下拉列表中的值从一个 php 传递到另一个

参数值传递

参数值传递

如何在 GitLab CI 的管道中将变量的值从一个作业传递到下一个作业?

如何将值从一个 html 页面传递到 PHONEGAP 中的另一个 html 页面?