Activer la détection non uniforme des accès à la mémoire pour les conteneurs YARN - Amazon EMR

Activer la détection non uniforme des accès à la mémoire pour les conteneurs YARN

Avec les versions 6.x et ultérieures d'Amazon EMR, vous pouvez utiliser l'accès mémoire non uniforme (NUMA) pour le multitraitement de vos données sur des clusters. NUMA est un modèle de conception de mémoire informatique dans lequel le processeur peut accéder à sa propre mémoire locale plus rapidement que la mémoire d'un autre processeur ou partagée entre processeurs. Les conteneurs YARN offrent de meilleures performances avec NUMA car ils peuvent se lier à un nœud NUMA spécifique qui gère toutes les allocations de mémoire ultérieures. Cela réduit le nombre de fois que votre cluster doit accéder à la mémoire distante.

Vous pouvez activer le support NUMA pour le conteneur YARN lorsque la machine du composant master est un nœud multi-NUMA. Pour vérifier si un composant master est un nœud NUMA unique ou multi-NUMA, exécutez la commande suivante.

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

En général, les instances dont la taille est supérieure à 12 fois possèdent deux nœuds NUMA. Cela ne s'applique pas aux instances en métal.

Pour activer la prise en compte de NUMA pour les conteneurs YARN
  1. Utilisez la configuration yarn-site suivante dans votre 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. Fournissez l'action d'amorçage suivante dans votre 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. Chaque conteneur doit être conscient de l'existence de NUMA. Vous pouvez informer la Java Virtual machine (JVM) de chaque conteneur par un drapeau NUMA. Par exemple, pour demander à la JVM d'utiliser NUMA dans une tâche MapReduce, ajoutez les propriétés suivantes dans 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. Pour vérifier que vous avez activé NUMA, effectuez une recherche dans l'un des fichiers journaux de NodeManager à l'aide de la commande suivante.

    grep "NUMA resources allocation is enabled," *

    Pour vérifier que NodeManager a attribué des ressources de nœud NUMA à un conteneur, effectuez une recherche dans le journal NodeManager à l'aide de la commande suivante, en remplaçant <container_id> par votre propre ID de conteneur.

    grep "NUMA node" | grep <container_id>