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

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

我使用以下命令行启动一个弹性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\u flow\u id}。有没有办法知道shell脚本中的作业流id?
还有:有没有办法知道jobflow名称,步骤名称(目前我把它们当作论点来传递,但感觉很不舒服)

rbpvctlc

rbpvctlc1#

您可以使用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/ 目录可通过此接口使用。

相关问题