

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

# YARN コンテナの不均一なメモリアクセス対応を有効にする
<a name="hadoop-numa"></a>

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":[]
   	}
    ]
   ```

1. クラスターに次のブートストラップアクションを指定します。

   ```
   #!/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
   ```

1. すべてのコンテナが 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>
   ```

1. NUMA が有効になっていることを確認するには、次のコマンドで NodeManager ログファイルを検索します。

   ```
   grep "NUMA resources allocation is enabled," *
   ```

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

   ```
   grep "NUMA node" | grep <container_id>
   ```