1

나는 클러스터를 만들고 AWS CLI를 통해 돼지 단계를 제출합니다. 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