Как узнать идентификатор потока заданий, другие параметры кластера в скрипте, запущенном через script-runner.jar

Я запускаю эластичный кластер 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}. Есть ли способ узнать JOB_FLOW_ID в моем сценарии оболочки?

Также: есть ли способ узнать имя рабочего процесса, имя шага? (В настоящее время я передаю их как аргументы, но это кажется хакерским)


person Gavriel    schedule 08.04.2014    source источник


Ответы (1)


Вместо использования сценария Shell вы можете использовать сценарий Ruby:

#!/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/ доступно через этот интерфейс.

person Eric Eijkelenboom    schedule 31.07.2014