如何知道作业流id,以及通过script-runner.jar运行的脚本中的其他集群参数

xj3cbfub  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(312)

我使用以下命令行启动一个弹性mapreduce集群:

  1. $ elastic-mapreduce \
  2. --create \
  3. --num-instances "${INSTANCES}" \
  4. --instance-type m1.medium \
  5. --ami-version 3.0.4 \
  6. --name "${CLUSTER_NAME}" \
  7. --log-uri "s3://my-bucket/elasticmapreduce/logs" \
  8. --step-name "${STEP_NAME}" \
  9. --step-action TERMINATE_JOB_FLOW \
  10. --jar s3://elasticmapreduce/libs/script-runner/script-runner.jar \
  11. --arg s3://my-bucket/log-parser/code/hadoop-script.sh \
  12. --arg "${CLUSTER_NAME}" \
  13. --arg "${STEP_NAME}" \
  14. --arg s3n://my-bucket/log-parser/input \
  15. --arg s3n://my-bucket/log-parser/output

我希望能够从hadoop-script.sh发送一封电子邮件,其中包含日志文件,但这些文件会写入s3://my bucket/elasticmapreduce/logs/{job\u flow\u id}。有没有办法知道shell脚本中的作业流id?
还有:有没有办法知道jobflow名称,步骤名称(目前我把它们当作论点来传递,但感觉很不舒服)

rbpvctlc

rbpvctlc1#

您可以使用ruby脚本,而不是使用shell脚本:

  1. # !/usr/bin/ruby
  2. require 'json'
  3. require 'emr/common'
  4. job_flow = Emr::JsonInfoFile.new('job-flow')
  5. job_flow_id = job_flow['jobFlowId']

您还可以获取有关作业步骤的信息,例如:

  1. step_one = Emr::JsonInfoFile.new('steps/1')
  2. state = step_one['state']

或示例信息:

  1. instance_info = Emr::JsonInfoFile.new('instance')
  2. is_master = instance_info['isMaster']

基本上,所有的东西 /mnt/var/lib/info/ 目录可通过此接口使用。

展开查看全部

相关问题