1

私はクラスタを作成し、AWS CLI経由でPigステップを送信します。 PIGスクリプトとスクリプトへの入力ファイルは、両方ともS3バケットに格納されています。AWS CLI経由でブタプログラムを提出する際にS3ファイルの場所を指定する場所

豚スクリプト:

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を指定する必要がありますか?これを書いておくのが好ましい方法は何ですか?

答えて

1

それは判明している豚のスクリプト内で、代わりのハードコーディングのように、場所私は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, ch. 4

関連する問題