Aktivieren Sie die Erkennung ungleichmäßiger Speicherzugriffe für YARN-Container - Amazon EMR

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Aktivieren Sie die Erkennung ungleichmäßiger Speicherzugriffe für YARN-Container

Mit Amazon-EMR-Versionen 6.x und höher können Sie Non-Uniform Memory Access (NUMA) für die Mehrfachverarbeitung Ihrer Daten auf Clustern verwenden. NUMA ist ein Entwurfsmuster für Computerspeicher, bei dem der Prozessor schneller auf seinen eigenen lokalen Speicher zugreifen kann als auf Speicher auf einem anderen Prozessor oder auf den Speicher, der von mehreren Prozessoren gemeinsam genutzt wird. YARN-Container weisen eine bessere Leistung mit NUMA auf, da sie sich an einen bestimmten NUMA-Knoten binden können, der alle nachfolgenden Speicherzuweisungen bedient. Dadurch wird die Häufigkeit reduziert, mit der Ihr Cluster auf den Remotespeicher zugreifen muss.

Sie können die NUMA-Unterstützung für den YARN-Container aktivieren, wenn es sich bei der Worker-Knoten-Maschine um eine NUMA-Multi-Knoten-Maschine handelt. Führen Sie den folgenden Befehl aus, um zu überprüfen, ob es sich bei einem NUMA-Worker-Knoten um einen Single-NUMA- oder Multi-Knoten handelt.

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

Im Allgemeinen haben Instances, die größer als 12x sind, zwei NUMA-Knoten. Dies gilt nicht für Metal-Instances..

So aktivieren Sie die Erkennung von NUMA-YARN-Containern
  1. Verwenden Sie die folgende yarn-site-Konfiguration in Ihrem Amazon-EMR-6.x-Cluster.

    [ { "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. Stellen Sie die folgende Bootstrap-Aktion in Ihrem Cluster bereit.

    #!/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. Jeder Container muss NUMA kennen. Sie können die virtuelle Java-Maschine (JVM) in jedem Container mit einem NUMA-Flag benachrichtigen. Um beispielsweise die JVM zu benachrichtigen, NUMA in einem MapReduce-Auftrag zu verwenden, fügen Sie die folgenden Eigenschaften in mapred-site.xml hinzu.

    <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. Um zu überprüfen, ob NUMA aktiviert sind, durchsuchen Sie eine der NodeManager-Protokolldateien mit dem folgenden Befehl.

    grep "NUMA resources allocation is enabled," *

    Um zu überprüfen, NodeManager ob einem Container NUMA Knotenressourcen zugewiesen wurden, durchsuchen NodeManager Sie das Protokoll mit dem folgenden Befehl und ersetzen <container_id> Sie es durch Ihre eigene Container-ID.

    grep "NUMA node" | grep <container_id>