通过aws cli提交pig程序时指定s3文件位置的位置

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

我正在创建一个集群并通过awscli提交一个pig步骤。pig脚本和脚本的输入文件都存储在s3 bucket中。
Pig脚本示例:

REGISTER file:/usr/lib/pig/lib/piggybank.jar;
DEFINE XPath org.apache.pig.piggybank.evaluation.xml.XPath();
A = LOAD 's3://my-group/myfolder/somedata.xml' USING org.apache.pig.piggybank.storage.XMLLoader('item') AS (x:chararray);
B = FOREACH A GENERATE XPath(x, 'detail');
STORE B INTO 's3://my-group/myfolder/somedetails';

cli示例:

aws emr create-cluster \
--steps Type=PIG,Name='Pig program',ActionOnFailure=CONTINUE, \
Args=[-f,s3://my-group/myfolder/some_script.pig, \
-p,INPUT=s3://my-group/myfolder,-p,OUTPUT=s3://my-group/myfolder] \
--applications Name=Pig --enable-debugging \
--log-uri s3://my-group/myfolder --release-label emr-5.2.0 \
--instance-groups \
InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m3.2xlarge \
InstanceGroupType=CORE,InstanceCount=5,InstanceType=c1.medium \
--name "Test cluster" --ec2-attributes KeyName=ClusterKeyPair

这似乎是工作(至少没有失败)。。。
但这是必要的吗 s3://my-group/myfolder 是否在两个位置都指定?如果不是的话,写这个的首选方法是什么?

35g0bw71

35g0bw711#

事实证明,在pig脚本中,我可以使用emr作业流参数,而不是硬编码位置 $INPUT 以及 $OUTPUT ,例如:

A = LOAD '$INPUT' USING org.apache.pig.piggybank.storage.XMLLoader('item') AS (x:chararray);
B = FOREACH A GENERATE XPath(x, 'detail');
STORE B INTO '$OUTPUT';

资料来源:programming elastic mapreduce,第4章

相关问题