web-dev-qa-db-ja.com

EMRマスターノードはそのクラスターIDを知っていますか?

EMRクラスターを作成し、それらのクラスターがメッセージを中央キューに送り返すことができるようにしたい。これが機能するためには、各マスターノードで何らかのエージェントを実行する必要があります。受信者がメッセージの対象となるクラスターを認識できるように、これらのエージェントはそれぞれ、このメッセージで自分自身を識別する必要があります。

マスターノードはそのID(j-*************)を知っていますか?そうでない場合、メッセージの受信者がこのIDを推測できるようにする可能性のある他の識別情報はありますか?

/home/hadoop/confの設定ファイルを調べましたが、何も役に立ちませんでした。 /mnt/var/log/instance-controller/instance-controller.logでIDを見つけましたが、grepするのは難しいようです。そもそもinstance-controllerがそのIDをどこから取得するのだろうか。

20
bstempi

マスターノードの/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に従って更新)

36
jc mannem

Amazon EC2APIを使用して把握できます。以下の例では、簡単にするためにシェルコマンドを使用しています。実際には、適切な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

お役に立てれば。

5
Vlad

上で指定したように、情報はjob-flow.jsonファイルにあります。このファイルには 他のいくつかの属性 があります。したがって、それがどこにあるかを知っていると、非常に簡単な方法でそれを行うことができます:

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

編集:このコマンドはコアノードでも機能します。

4
chomp

別のオプション-メタデータサーバーにクエリを実行します。

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

どうやら、Hadoop MapReduceジョブには、実行されているクラスターを知る方法がないようです。これを自分で見つけて驚いたのです。

ただし、マップごとに他の識別子を使用して、実行中のマッパーと実行中のジョブを一意に識別することができます。

これらは、各マッパーに渡される環境変数で指定されます。 Pythonを使用してHadoopストリーミングでジョブを作成している場合、コードは次のようになります。

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が得られます。これら3つの値のいずれかまたは組み合わせを使用すると、実行中のマッパーを一意に識別できるはずです。

あなたが特定の仕事を探しているなら:「mapred_job_id」はあなたが望むものかもしれません。

0
Suman