Activar el reconocimiento de acceso no uniforme a la memoria para los contenedores YARN - Amazon EMR

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Activar el reconocimiento de acceso no uniforme a la memoria para los contenedores YARN

Con las versiones 6.x y posteriores de Amazon EMR, puede utilizar el acceso a memoria no uniforme (NUMA) para el multiprocesamiento de sus datos en clústeres. NUMA es un patrón de diseño de memoria de computadora en el que el procesador puede acceder a su propia memoria local más rápido que a la memoria de otro procesador o la memoria compartida entre procesadores. Los contenedores YARN tienen un mejor rendimiento con NUMA porque pueden enlazarse a un nodo de NUMA específico que sirve para todas las asignaciones de memoria posteriores. Esto reduce la cantidad de veces que el clúster tiene que acceder a la memoria remota.

Puede activar la compatibilidad con NUMA para el contenedor YARN si la máquina del nodo de trabajo es un nodo de NUMA múltiple. Para confirmar si un nodo de trabajo es un nodo de NUMA único o NUMA múltiple, ejecute el siguiente comando.

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

En general, las instancias que superan su tamaño 12 veces tienen dos nodos de NUMA. Esto no se aplica a las instancias de metal.

Para activar el conocimiento de NUMA sobre los contenedores YARN
  1. Utilice la siguiente configuración de yarn-site en su clúster de Amazon EMR 6.x.

    [ { "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. Proporcione la siguiente acción de arranque en su clúster.

    #!/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. Todos los contenedores deben tener conocimiento de NUMA. Puede notificarlo a la máquina virtual de Java (JVM) de cada contenedor con una marca NUMA. Por ejemplo, para notificar a la JVM que utilice NUMA en un trabajo de MapReduce, agregue las siguientes propiedades en 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. Para comprobar que haya activado NUMA, busque en cualquiera de los archivos de registro del NodeManager con el siguiente comando.

    grep "NUMA resources allocation is enabled," *

    Para comprobar si NodeManager ha asignado recursos de NUMA nodo a un contenedor, busque en el NodeManager registro con el siguiente comando y sustitúyalo por <container_id> su propio ID de contenedor.

    grep "NUMA node" | grep <container_id>