Quelle est la différence entre yarn.scheduler.maximum-allocation-mb
et yarn.nodemanager.resource.memory-mb
?
Je vois les deux dans yarn-site.xml
et je vois les explications ici .
yarn.scheduler.maximum-allocation-mb
reçoit la définition suivante: L'allocation maximale pour chaque demande de conteneur au niveau RM, en Mo. Les demandes de mémoire supérieures à cela lèveront une exception InvalidResourceRequestException. Cela signifie-t-il que les demandes de mémoire UNIQUEMENT sur le gestionnaire de ressources sont limitées par cette valeur?
Et yarn.nodemanager.resource.memory-mb
reçoit la définition de Quantité de mémoire physique, en Mo, qui peut être allouée aux conteneurs. Est-ce que cela signifie le montant total pour tous les conteneurs à travers le cluster entier, résumé ensemble?
Cependant, je ne parviens toujours pas à discerner entre ceux-ci. Ces explications me font penser qu'elles sont les mêmes.
Encore plus déroutant, leurs valeurs par défaut sont exactement les mêmes: 8192 Mo. Comment puis-je faire la différence entre ceux-ci? Merci.
Considérez dans un scénario où vous configurez un cluster où chaque machine a 48 Go de RAM. Une partie de ceci RAM doit être réservée au système d'exploitation et aux autres applications installées.
yarn.nodemanager.resource.memory-mb:
Quantité de mémoire physique, en Mo, qui peut être allouée aux conteneurs. Cela signifie que la quantité de mémoire que YARN peut utiliser sur ce nœud et que cette propriété doit donc être inférieure à la mémoire totale de cette machine.
<name>yarn.nodemanager.resource.memory-mb</name>
<value>40960</value> <!-- 40 GB -->
L'étape suivante consiste à fournir des conseils YARN sur la façon de répartir les ressources totales disponibles en conteneurs . Pour ce faire, spécifiez l'unité minimale de RAM à allouer à un conteneur.
Dans yarn-site.xml
<name>yarn.scheduler.minimum-allocation-mb</name> <!-- RAM-per-container ->
<value>2048</value>
yarn.scheduler.maximum-allocation-mb:
Il définit le maximum allocation de mémoire disponible pour un conteneur en Mo
cela signifie que RM peut uniquement allouer de la mémoire aux conteneurs par incréments de "yarn.scheduler.minimum-allocation-mb"
et ne pas dépasser "yarn.scheduler.maximum-allocation-mb"
et Il ne doit pas être supérieur à la mémoire totale allouée du nœud.
Dans yarn-site.xml
<name>yarn.scheduler.maximum-allocation-mb</name> <!-Max RAM-per-container->
<value>8192</value>
Pour les applications MapReduce, YARN traite chaque carte ou réduit la tâche dans un conteneur et sur une seule machine, il peut y avoir un certain nombre de conteneurs. Nous voulons autoriser un maximum de 20 conteneurs sur chaque nœud, et avons donc besoin de (40 Go de RAM totale)/(20 # de conteneurs) = 2 Go minimum par conteneur contrôlé par la propriété yarn.scheduler.minimum-allocation-mb
Encore une fois, nous voulons limiter l'utilisation maximale de la mémoire pour un conteneur contrôlé par la propriété "yarn.scheduler.maximum-allocation-mb"
Par exemple, si un travail demande 2049 Mo de mémoire par conteneur de carte (mapreduce.map.memory.mb=2048 set in mapred-site.xml
), RM lui donnera un 4096 Mo (2*yarn.scheduler.minimum-allocation-mb
) récipient.
Si vous avez un énorme travail MR qui demande un conteneur de carte de 9999 Mo, le travail sera tué avec le message d'erreur.