복붙노트

[HADOOP] EMR 마스터 노드가 클러스터 ID를 알고 있습니까?

HADOOP

EMR 마스터 노드가 클러스터 ID를 알고 있습니까?

EMR 클러스터를 만들 수 있고 클러스터가 메시지를 일부 중앙 대기열에 다시 보내고 싶습니다. 이 작업을 수행하려면 각 마스터 노드에서 실행중인 에이전트가 있어야합니다. 이러한 에이전트 각각은이 메시지에서 자신을 식별하여받는 사람이 메시지의 클러스터를 알 수 있도록해야합니다.

마스터 노드가 자신의 ID (j - *************)를 알고 있습니까? 그렇지 않다면, 메시지 수신자가이 ID를 추측 할 수있는 다른 식별 정보가 있습니까?

/ home / hadoop / conf에있는 설정 파일을 살펴 보았습니다. 유용한 것을 찾지 못했습니다. /mnt/var/log/instance-controller/instance-controller.log에 ID가 있지만 grep하기가 어려워 보입니다. 어디서 인스턴스 컨트롤러가 그 ID를 얻을 수 있는지 궁금합니다.

해결법

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

    1.마스터 노드의 / mnt / var / lib / info /를 보면 EMR 클러스터 설정에 대한 많은 정보를 찾을 수 있습니다. 보다 구체적으로 /mnt/var/lib/info/job-flow.json에는 jobFlowId 또는 ClusterID가 있습니다.

    마스터 노드의 / mnt / var / lib / info /를 보면 EMR 클러스터 설정에 대한 많은 정보를 찾을 수 있습니다. 보다 구체적으로 /mnt/var/lib/info/job-flow.json에는 jobFlowId 또는 ClusterID가 있습니다.

    사전 설치된 json 파서 (jq)를 사용하여 작업 흐름 ID를 얻을 수 있습니다.

    cat /mnt/var/lib/info/job-flow.json | jq -r ".jobFlowId"
    

    (@Marboni에 따라 업데이트 됨)

  2. ==============================

    2.Amazon EC2 API를 사용하여 파악할 수 있습니다. 아래 예제는 단순화를 위해 쉘 명령을 사용합니다. 실생활에서는 적절한 API를 사용하여이 단계를 수행해야합니다.

    Amazon EC2 API를 사용하여 파악할 수 있습니다. 아래 예제는 단순화를 위해 쉘 명령을 사용합니다. 실생활에서는 적절한 API를 사용하여이 단계를 수행해야합니다.

    먼저 인스턴스 ID를 찾아야합니다.

     INSTANCE=`wget -q -O - http://169.254.169.254/latest/meta-data/instance-id`
    

    그런 다음 인스턴스 ID를 사용하여 클러스터 ID를 찾을 수 있습니다.

    ec2-describe-instances $INSTANCE | grep TAG | grep aws:elasticmapreduce:job-flow-id
    

    희망이 도움이됩니다.

  3. ==============================

    3.위에서 지정한 경우 정보는 job-flow.json 파일에 있습니다. 이 파일에는 여러 가지 다른 속성이 있습니다. 따라서 위치가 어디인지 알면 매우 쉽게 할 수 있습니다.

    위에서 지정한 경우 정보는 job-flow.json 파일에 있습니다. 이 파일에는 여러 가지 다른 속성이 있습니다. 따라서 위치가 어디인지 알면 매우 쉽게 할 수 있습니다.

    cat /mnt/var/lib/info/job-flow.json | grep jobFlowId | cut -f2 -d: | cut -f2 -d'"'
    

    편집 :이 명령은 코어 노드에서도 작동합니다.

  4. ==============================

    4.다른 옵션 - 메타 데이터 서버에 쿼리 :

    다른 옵션 - 메타 데이터 서버에 쿼리 :

    curl -s http://169.254.169.254/2016-09-02/user-data/ | sed -r 's/.*clusterId":"(j-[A-Z0-9]+)",.*/\1/g'
    
  5. ==============================

    5.분명히 Hadoop MapReduce 작업은 실행중인 클러스터를 알 수있는 방법이 없습니다. 직접 찾아 내서 놀랐습니다.

    분명히 Hadoop MapReduce 작업은 실행중인 클러스터를 알 수있는 방법이 없습니다. 직접 찾아 내서 놀랐습니다.

    그러나 각 맵에 대해 다른 식별자를 사용하여 실행중인 맵퍼와 실행중인 작업을 고유하게 식별 할 수 있습니다.

    이것은 각 매퍼에 전달 된 환경 변수에 지정됩니다. Hadoop 스트리밍에서 Python을 사용하여 작업을 작성하는 경우 코드는 다음과 같습니다.

    import os
    
    if 'map_input_file' in os.environ:
        fileName = os.environ['map_input_file']
    if 'mapred_tip_id' in os.environ:
        mapper_id = os.environ['mapred_tip_id'].split("_")[-1]
    if 'mapred_job_id' in os.environ:
        jobID = os.environ['mapred_job_id']
    

    그러면 입력 파일 이름, 작업 ID 및 작업 ID가 제공됩니다. 이 세 가지 값 중 하나 또는 조합을 사용하면 실행중인 매퍼를 고유하게 식별 할 수 있어야합니다.

    특정 작업을 찾고있는 경우 : "mapred_job_id"가 원하는 작업 일 수 있습니다.

  6. from https://stackoverflow.com/questions/20227091/does-an-emr-master-node-know-its-cluster-id by cc-by-sa and MIT license