Attiva il riconoscimento non uniforme degli accessi alla memoria per i container YARN - Amazon EMR

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Attiva il riconoscimento non uniforme degli accessi alla memoria per i container YARN

Con le versioni 6.x e successive di Amazon EMR, puoi utilizzare l'accesso non uniforme alla memoria (NUMA) per l'elaborazione multipla dei dati sui cluster. NUMA è un modello di progettazione della memoria del computer in cui il processore può accedere alla propria memoria locale più velocemente che della memoria di un altro processore o da quella condivisa tra processori. I container YARN hanno prestazioni migliori con NUMA perché possono collegarsi a uno specifico nodo NUMA che serve tutte le successive allocazioni di memoria. Ciò riduce il numero di volte in cui il cluster deve accedere alla memoria remota.

Puoi attivare il supporto NUMA per il container YARN quando la macchina con nodi worker è un nodo multi-NUMA. Per confermare se un nodo worker è un nodo a NUMA singolo o multi-NUMA, esegui il comando che segue.

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

In generale, le istanze più grandi di 12x hanno due nodi NUMA. Questo non si applica ai istanze metal.

Per attivare il riconoscimento di NUMA per i container YARN
  1. Utilizza la seguente configurazione yarn-site nel tuo cluster 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. Fornisci la seguente azione di bootstrap nel tuo cluster.

    #!/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. Ogni container deve essere a conoscenza di NUMA. Puoi segnalare la macchina virtuale Java (JVM) in ogni container con un flag NUMA. Ad esempio, per notificare alla JVM di utilizzare NUMA in un processo MapReduce, aggiungi le seguenti proprietà in 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. Per verificare di aver attivato NUMA, cerca uno dei file di log di NodeManager con il seguente comando.

    grep "NUMA resources allocation is enabled," *

    Per verificare di NodeManager aver assegnato le risorse del NUMA nodo a un contenitore, cerca nel NodeManager registro con il seguente comando, sostituendolo <container_id> con il tuo ID contenitore.

    grep "NUMA node" | grep <container_id>