컨테이너에 대한 비균일 메모리 액세스 인식을 켜십시오. YARN - 아마존 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보다 큰 인스턴스에는 두 개의 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를 인식해야 합니다. NUMA플래그를 사용하여 각 컨테이너의 Java 가상 머신 (JVM) 에 알릴 수 있습니다. 예를 들어 MapReduce 작업에 사용하도록 JVM 알리려면 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," *

    컨테이너에 NUMA 노드 리소스가 NodeManager 할당되었는지 확인하려면 자체 컨테이너 ID로 바꾸고 다음 <container_id> 명령으로 NodeManager 로그를 검색하십시오.

    grep "NUMA node" | grep <container_id>