立てて自動で動作させて、勝手に死んでほしい。
さて、そんなことをやる上で色々調べたので自分の備忘録のために書いておきます
steps
起動コマンドの中でステップの追加をしておくとそのステップにそって処理をしてくれる。
steps
--steps Type=CUSTOM_JAR,Name="S3DistCp step",ActionOnFailure=CONTINUE,Jar=command-runner.jar,Args=[s3-dist-cp,--s3Endpoint=s3-ap-northeast-1.amazonaws.com,--src=$S3_SRC,--dest=hdfs:///import_tbl] Type=Hive,Name="TABLE SET UP",ActionOnFailure=CONTINUE,Args=[-f,${pathtohivescript}] \
これでS3から元ネタを取ってきて、処理をさせるという2工程が走る。
ポイントは、1工程 2工程 みたいな感じに工程間はスペースで区切ることだった
auto-terminate
コンソールから起動すると勝手には死なないけど、CLI経由で起動させる場合、このオプションを指定すると、全てのステップが完了した後に勝手にEMRが終了するようになる
s3-dist-cp
S3とHDFS間でデータをやり取りできるツール
上記のstepの1工程目でやってるのは、S3から元データを取ってきてHDFSにぶっこんでいる処理
# サンプルスクリプト
サンプル
aws emr create-cluster --name '${clusterName}' \
--release-label emr-5.7.0 \
--log-uri '${s3LogUrl}' \
--applications Name=Ganglia Name=Hadoop Name=Hive Name=Hue Name=Mahout Name=Pig Name=Tez \
--ec2-attributes '{"KeyName":"${KeyName}","InstanceProfile":"EMR_EC2_DefaultRole","SubnetId":"${SubnetId}"}' \
--instance-groups '[{"InstanceCount":${masterInstanceCount},"InstanceGroupType":"MASTER","InstanceType":"${masterInstanceType}","Name":"Master Instance Group"},{"InstanceCount":${coreInstanceCount},"InstanceGroupType":"CORE","InstanceType":"${coreInstanceType}","Name":"Core Instance Group"}]' \
--service-role EMR_DefaultRole \
--steps Type=CUSTOM_JAR,Name="S3DistCp step",ActionOnFailure=CONTINUE,Jar=command-runner.jar,Args=[s3-dist-cp,--s3Endpoint=s3-ap-northeast-1.amazonaws.com,--src=$S3_SRC,--dest=hdfs:///$HDFS_TBL] Type=Hive,Name="HIVE PG",ActionOnFailure=CONTINUE,Args=[-f,${pathtohivescript}] \
--region ap-northeast-1 \
--profile ${profile}
Hiveで動かすスクリプトはS3に上がっている必要があり、上記サンプル内ではその s3://
でフルパスを指定している。