복붙노트

[HADOOP] script-runner.jar을 통해 실행중인 스크립트의 작업 흐름 ID, 기타 클러스터 매개 변수를 확인하는 방법

HADOOP

script-runner.jar을 통해 실행중인 스크립트의 작업 흐름 ID, 기타 클러스터 매개 변수를 확인하는 방법

다음 명령 줄을 사용하여 탄력적 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를 알 수있는 방법이 있습니까?

또한 작업 흐름 이름, step-name을 알 수있는 방법이 있습니까? (현재는 인수로 전달하지만 해키 느낌)

해결법

  1. ==============================

    1.Shell 스크립트를 사용하는 대신 Ruby 스크립트를 사용할 수 있습니다.

    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 / 디렉토리의 모든 내용은이 인터페이스를 통해 사용할 수 있습니다.

  2. from https://stackoverflow.com/questions/22934511/how-to-know-job-flow-id-other-cluster-parameters-in-script-running-via-script-r by cc-by-sa and MIT license