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
-
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":[] } ]
-
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
-
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>
-
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 che NodeManager abbia assegnato le risorse del nodo NUMA a un container, cerca nel log NodeManager con il seguente comando, sostituendo
con il tuo ID container.<container_id>
grep "NUMA node" | grep
<container_id>