기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
YARN 컨테이너에 대해 비균일 메모리 액세스 인식 활성화
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 인식을 켜는 방법
-
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":[] } ]
-
클러스터에서 다음 부트스트랩 작업을 제공합니다.
#!/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
-
모든 컨테이너에서 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>
-
NUMA가 켜져 있는지 확인하려면 다음 명령을 사용하여 NodeManager 로그 파일을 검색합니다.
grep "NUMA resources allocation is enabled," *
NodeManager가 컨테이너에 NUMA 노드 리소스를 할당했는지 확인하려면 다음 명령을 사용하여 NodeManager 로그를 검색합니다. 이때
를 자체 컨테이너 ID로 대체합니다.<container_id>
grep "NUMA node" | grep
<container_id>