

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 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보다 큰 인스턴스에는 두 개의 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를 인식해야 합니다. NUMA 플래그를 사용하여 각 컨테이너의 Java 가상 머신(JVM)에 알릴 수 있습니다. 예를 들어, MapReduce 작업에 NUMA를 사용하도록 JVM에 알리려면 `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 노드 리소스를 할당했는지 확인하려면 다음 명령을 사용하여 NodeManager 로그를 검색합니다. 이때 `<container_id>`를 자체 컨테이너 ID로 대체합니다.

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