YARN コンテナの不均一なメモリアクセス対応を有効にする - Amazon EMR

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

YARN コンテナの不均一なメモリアクセス対応を有効にする

Amazon EMR バージョン 6.x 以降では、不均一なメモリアクセス (NUMA) を使用してクラスター上のデータをマルチプロセッシングできます。NUMA はプロセッサが別のプロセッサ上のメモリやプロセッサ間で共有されているメモリよりも高速に自身のローカルメモリにアクセスできるコンピュータメモリの設計パターンです。YARN コンテナは、後続のすべてのメモリ割り当てを処理する特定の NUMA ノードにバインドできるため、NUMA でパフォーマンスが向上します。これにより、クラスターがリモートメモリーにアクセスする回数が減ります。

ワーカーノードマシンがマルチ NUMA ノードの場合は YARN コンテナの NUMA サポートを有効にできます。ワーカーノードがシングル NUMA ノードかマルチ NUMA ノードかを確認するには、次のコマンドを実行します。

lscpu | grep -i numa NUMA node(s): 2

一般に、12x を超えるインスタンスには 2 つの NUMA ノードがあります。これは、メタルインスタンスには適用されません。

YARN コンテナの NUMA 対応を有効にするには
  1. Amazon EMR 6.x クラスターで次の yarn-site 設定を使用します。

    [ { "classification":"yarn-site", "properties":{ "yarn.nodemanager.linux-container-executor.nonsecure-mode.local-user":"yarn", "yarn.nodemanager.linux-container-executor.group":"yarn", "yarn.nodemanager.container-executor.class":"org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor", "yarn.nodemanager.numa-awareness.enabled":"true", "yarn.nodemanager.numa-awareness.numactl.cmd":"/usr/bin/numactl", "yarn.nodemanager.numa-awareness.read-topology":"true" }, "configurations":[] } ]
  2. クラスターに次のブートストラップアクションを指定します。

    #!/bin/bash sudo yum -y install numactl echo 1 | sudo tee /proc/sys/kernel/numa_balancing echo "banned.users=mapred,bin,hdfs" >> /etc/hadoop/conf/container-executor.cfg rm -rf /var/log/hadoop-yarn/ sudo chown -R yarn:hadoop /var/log/hadoop-yarn/ sudo chmod 755 -R /var/log/hadoop-yarn/ sudo chmod 6050 /etc/hadoop/conf/container-executor.cfg mkdir /mnt/yarn && sudo chmod 755 -R /mnt/yarn && sudo chown -R yarn:hadoop /mnt/yarn mkdir /mnt1/yarn && sudo chmod 755 -R /mnt1/yarn && sudo chown -R yarn:hadoop /mnt1/yarn mkdir /mnt2/yarn && sudo chmod 755 -R /mnt2/yarn && sudo chown -R yarn:hadoop /mnt2/yarn
  3. すべてのコンテナが NUMA に対応している必要があります。各コンテナ内の Java 仮想マシン (JVM) に NUMA フラグで通知できます。例えば、JVM に MapReduce ジョブで NUMA を使用するように通知するには、mapred-site.xml に次のプロパティを追加します。

    <property> <name>mapreduce.reduce.java.opts</name> <value>-XX:+UseNUMA</value> </property> <property> <name>mapreduce.map.java.opts</name> <value>-XX:+UseNUMA</value> </property>
  4. NUMA が有効になっていることを確認するには、次のコマンドで NodeManager ログファイルを検索します。

    grep "NUMA resources allocation is enabled," *

    NodeManager がNUMAノードリソースをコンテナに割り当てたことを確認するには、次のコマンドで NodeManager ログを検索し、 を独自のコンテナ ID <container_id> に置き換えます。

    grep "NUMA node" | grep <container_id>