1

Я создаю кластер и отправляю шаг Pig через AWS CLI. И скрипт PIG, и входной файл для скрипта хранятся в ведре S3.где указать местоположения файлов S3 при отправке программы свиньи через AWS CLI

пример 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 в обоих местах? Если не самый предпочтительный способ написать это?

ответ

1

Оказывается, что в сценарии Свиньи, вместо жесткого кодирования местоположения можно использовать ЭМИ Job Параметры потока $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