将猪变量的值从一个动作传递到 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 类