[HADOOP] EMR 마스터 노드가 클러스터 ID를 알고 있습니까?
HADOOPEMR 마스터 노드가 클러스터 ID를 알고 있습니까?
EMR 클러스터를 만들 수 있고 클러스터가 메시지를 일부 중앙 대기열에 다시 보내고 싶습니다. 이 작업을 수행하려면 각 마스터 노드에서 실행중인 에이전트가 있어야합니다. 이러한 에이전트 각각은이 메시지에서 자신을 식별하여받는 사람이 메시지의 클러스터를 알 수 있도록해야합니다.
마스터 노드가 자신의 ID (j - *************)를 알고 있습니까? 그렇지 않다면, 메시지 수신자가이 ID를 추측 할 수있는 다른 식별 정보가 있습니까?
/ home / hadoop / conf에있는 설정 파일을 살펴 보았습니다. 유용한 것을 찾지 못했습니다. /mnt/var/log/instance-controller/instance-controller.log에 ID가 있지만 grep하기가 어려워 보입니다. 어디서 인스턴스 컨트롤러가 그 ID를 얻을 수 있는지 궁금합니다.
해결법
-
==============================
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.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.위에서 지정한 경우 정보는 job-flow.json 파일에 있습니다. 이 파일에는 여러 가지 다른 속성이 있습니다. 따라서 위치가 어디인지 알면 매우 쉽게 할 수 있습니다.
위에서 지정한 경우 정보는 job-flow.json 파일에 있습니다. 이 파일에는 여러 가지 다른 속성이 있습니다. 따라서 위치가 어디인지 알면 매우 쉽게 할 수 있습니다.
cat /mnt/var/lib/info/job-flow.json | grep jobFlowId | cut -f2 -d: | cut -f2 -d'"'
편집 :이 명령은 코어 노드에서도 작동합니다.
-
==============================
4.다른 옵션 - 메타 데이터 서버에 쿼리 :
다른 옵션 - 메타 데이터 서버에 쿼리 :
curl -s http://169.254.169.254/2016-09-02/user-data/ | sed -r 's/.*clusterId":"(j-[A-Z0-9]+)",.*/\1/g'
-
==============================
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"가 원하는 작업 일 수 있습니다.
from https://stackoverflow.com/questions/20227091/does-an-emr-master-node-know-its-cluster-id by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Hadoop은 Map 및 Reduce 작업을 수행 할 노드 수를 어떻게 결정합니까? (0) | 2019.06.09 |
---|---|
[HADOOP] 원사에 예약 된 메모리 란 무엇입니까? (0) | 2019.06.09 |
[HADOOP] 마스터에서 노드 관리자를 시작할 수 없습니다. (0) | 2019.06.09 |
[HADOOP] 특정 노드에 파일을 저장하는 방법은 무엇입니까? (0) | 2019.06.09 |
[HADOOP] 파일에 대한 경로가 필요한 생성자가있는 경우 병에 포장 된 경우이를 ""만들 수 있습니까? (0) | 2019.06.09 |