Amazon EMR で、Apache Hadoop YARN ノードのラベル付けを設定または変更したいと考えています。
簡単な説明
デフォルトの YARN ノードラベル設定は、お使いの Amazon EMR のバージョンに左右されます。
Amazon EMR-5.x リリースバージョンの Amazon EMR バージョン 5.19.x 以降
YARN ノードラベル機能はデフォルトで有効です。この機能を有効にすると、コアノードに次のプロパティを持つ CORE ノードラベルが作成されます。
yarn.node-labels.enabled: true
yarn.node-labels.am.default-node-label-expression: 'CORE'
YARN ApplicationMaster コンテナはコアノードにのみ割り当てられます。他のすべてのコンテナには、パーティションの制限はありません。コンテナは、コアノードまたはタスクノードのいずれかに割り当てることができます。
Amazon EMR バージョン 6.x 以降
YARN ノードラベル機能はデフォルトで無効です。アプリケーションのプライマリプロセスは、コアノードとタスクノードの両方で実行できます。
解決策
注: 本番環境で YARN ノードラベルを設定する前に、テスト環境で設定するのがベストプラクティスです。YARN ノードラベル機能を無効にすると、Application-Master コンテナは任意のノードタイプで起動するようになります。タスクノードには制限はありません。Amazon Elastic Compute Cloud (Amazon EC2) スポットインスタンスで設定されたタスクノードでは、スポット容量の制約によりタスクノードがダウンすると、実行中のジョブが失敗することがあります。
Amazon EMR バージョン 5.19.x 以降の Amazon EMR-5.x リリースバージョンで、YARN ラベルを無効にする
EMR クラスターの作成時に YARN ラベル機能を無効にする
次の手順を実行します。
-
[ソフトウェア設定の編集] セクションの [設定を入力] で、次のプロパティを追加します。
[
{
"Classification": "yarn-site",
"Properties": {
"yarn.node-labels.enabled": "false",
"yarn.node-labels.am.default-node-label-expression": ""
}
}
]
-
次のスクリプトを .sh 拡張子を付けて作成し、そのスクリプトを Amazon Simple Storage Service (Amazon S3) バケットにアップロードします。
#!/bin/bash
sudo sed -i 's/yarn rmadmin.*-addToClusterNodeLabels "CORE(exclusive=false)"/echo "NO LABELS"/g' /var/aws/emr/bigtop-deploy/puppet/modules/hadoop/manifests/init.pp
-
[ブートストラップアクション] セクションで、スクリプトをカスタムアクションとして追加してから、クラスターを作成します。
-
変更が適用されたことを確認するには、プライマリノードで次のコマンドを実行します。
yarn cluster --list-node-labels
出力では、ノードラベルに空の値が表示されます。
<<<<< Node Labels: >>>>>>
既存の Amazon EMR クラスターで YARN ラベル機能を無効にする
次の手順を実行します。
-
SSH を使用して Amazon EMR プライマリノードに接続します。
-
yarn-site.xml ファイルのバックアップを作成します。パスは /etc/hadoop/conf/yarn-site.xml です。
-
次のコマンドを実行し、yarn-site.xml をファイルエディタモードで開きます。
sudo su vi yarn-site.xml
-
yarn.node-labels.enabled プロパティの値を false に変更します。
<property>
<name>yarn.node-labels.enabled</name>
<value>false</value>
</property>
-
yarn.node-labels.am.default-node-label-expression プロパティの CORE 値を削除します。
<property>
<name>yarn.node-labels.am.default-node-label-expression</name>
<value></value>
</property>
-
クラスターのバージョンが 5.29.0 より新しい場合は、次のコマンドを実行して ResourceManager を再起動します。
sudo systemctl restart hadoop-yarn-resourcemanager.service
sudo systemctl status hadoop-yarn-resourcemanager.service
または、
クラスターのバージョンが 5.29.0 以前の場合は、次のコマンドを実行して ResourceManager を再起動します。
sudo stop hadoop-yarn-resourcemanager
sudo start hadoop-yarn-resourcemanager
-
変更が適用されたことを確認するには、次のコマンドを実行します。
yarn cluster --list-node-labels
出力では、ノードラベルに空の値が表示されます。
<<<<< Node Labels: >>>>>>
Amazon EMR バージョン 6.x 以降で YARN ラベル機能を有効にする
EMR クラスターの作成時に YARN ラベル機能を有効にする
-
[ソフトウェア設定の編集] セクションの [設定を入力] で、次のプロパティを追加します。
[
{
"Classification": "yarn-site",
"Properties": {
"yarn.node-labels.enabled": "true",
"yarn.node-labels.am.default-node-label-expression": "CORE"
}
}
]
-
クラスターを作成します。
-
変更が適用されたことを確認するには、プライマリノードで次のコマンドを実行します。
yarn cluster --list-node-labels
出力では、ノードラベルに空の値が表示されます。
<<<<< Node Labels: <CORE:exclusivity=false> >>>>>
既存の EMR クラスターで YARN ラベル機能を有効にする
次の手順を実行します。
-
Amazon EMR コンソールを開きます。
-
ナビゲーションペインで [クラスター] を選択し、編集するクラスターを選択します。
-
[設定] タブを選択します。
-
[インスタンスグループ設定] で、インスタンスグループを選択します。
-
[再構成] アイコンをクリックした後、[JSON で編集] を選択し、次のプロパティを追加します。
[
{
"Classification": "yarn-site",
"Properties": {
"yarn.node-labels.enabled": "true",
"yarn.node-labels.am.default-node-label-expression": "CORE"
}
}
]
-
[この設定をすべてのアクティブなインスタンスグループに適用] を選択したら、変更を保存します。
-
プライマリノードで、hadoop ユーザーで次のコマンドを実行します。
yarn rmadmin -addToClusterNodeLabels "CORE(exclusive=false)"
-
変更が適用されたことを確認するには、プライマリノードで次のコマンドを実行します。
yarn cluster --list-node-labels
出力では、ノードラベルに空の値が表示されます。
<<<<< Node Labels: <CORE:exclusivity=false> >>>>>>