我使用以下命令行启动弹性mapreduce集群:
$ elastic-mapreduce \
--create \
--num-instances "${INSTANCES}" \
--instance-type m1.medium \
--ami-version 3.0.4 \
--name "${CLUSTER_NAME}" \
--log-uri "s3://my-bucket/elasticmapreduce/logs" \
--step-name "${STEP_NAME}" \
--step-action TERMINATE_JOB_FLOW \
--jar s3://elasticmapreduce/libs/script-runner/script-runner.jar \
--arg s3://my-bucket/log-parser/code/hadoop-script.sh \
--arg "${CLUSTER_NAME}" \
--arg "${STEP_NAME}" \
--arg s3n://my-bucket/log-parser/input \
--arg s3n://my-bucket/log-parser/output
我希望能够从hadoop-script.sh发送包含日志文件的电子邮件,但这些邮件会写入s3:// my-bucket / elasticmapreduce / logs / {JOB_FLOW_ID}。有没有办法知道我的shell脚本中的JOB_FLOW_ID?
另外:有没有办法知道作业流程名称,步骤名称? (目前我将它们作为参数传递,但感觉很讨厌)
答案 0 :(得分:1)
您可以使用Ruby脚本代替使用Shell脚本:
#!/usr/bin/ruby
require 'json'
require 'emr/common'
job_flow = Emr::JsonInfoFile.new('job-flow')
job_flow_id = job_flow['jobFlowId']
您还可以获得有关工作步骤的信息,例如:
step_one = Emr::JsonInfoFile.new('steps/1')
state = step_one['state']
或实例信息:
instance_info = Emr::JsonInfoFile.new('instance')
is_master = instance_info['isMaster']
基本上,/mnt/var/lib/info/
目录中的所有内容都可通过此界面获得。