Application des ordonnanceurs Hadoop

LinuxBeginner
Pratiquer maintenant

Introduction

Dans l’Égypte ancienne, le palais du pharaon témoignait magnifiquement de la puissance et de la prospérité du royaume. Pourtant, derrière ses façades dorées, une crise se préparait. Les immenses réserves du pharaon, remplies des richesses du Nil, étaient en plein désordre. Les prêtres chargés de gérer la distribution des ressources peinaient à répondre aux besoins de la population.

C’est alors qu’Amenhotep, un jeune prêtre brillant, fut chargé de rétablir l’ordre dans la gestion des ressources du royaume. Sa mission consistait à mettre au point un système garantissant une répartition équitable et efficace des précieuses denrées, afin que chaque citoyen reçoive sa juste part.

Impressionné par son intelligence et son dévouement, le pharaon donna à Amenhotep accès à une merveille technologique de pointe : Hadoop YARN (Yet Another Resource Negotiator). Grâce à cet outil puissant, Amenhotep entreprit d’étudier le fonctionnement de l’ordonnanceur, un composant essentiel de YARN qui l’aiderait à atteindre son objectif.

Découvrir les ordonnanceurs Hadoop YARN

Dans cette étape, vous allez découvrir les différentes politiques d’ordonnancement disponibles dans Hadoop YARN et examiner l’ordonnanceur en cours d’exécution.

Commencez par passer à l’utilisateur Hadoop. Exécutez toutes les commandes de ce laboratoire dans ce terminal :

su - hadoop

Définissez explicitement le répertoire de configuration. Dans cette image, Hadoop est installé dans /home/hadoop/hadoop ; /etc/hadoop/conf n’est pas utilisé.

export HADOOP_CONF_DIR=/home/hadoop/hadoop/etc/hadoop

Hadoop YARN prend en charge le Fair Scheduler et le Capacity Scheduler. Le Fair Scheduler répartit les ressources entre les applications au fil du temps, et les pondérations des files d’attente influent sur leurs parts respectives. Le Capacity Scheduler attribue des capacités garanties aux files d’attente organisées en hiérarchie, tout en permettant le partage des ressources inutilisées.

Hadoop 3.3.6 ne fournit pas de sous-commande yarn scheduler. Pour examiner l’ordonnanceur réellement en cours d’exécution, interrogez l’API REST du ResourceManager au lieu de supposer qu’un fichier de configuration a été appliqué. Enregistrez la réponse :

curl -fsS --retry 15 --retry-connrefused --retry-delay 1 http://localhost:8088/ws/v1/cluster/scheduler -o /home/hadoop/scheduler-initial.json

Affichez le type d’ordonnanceur actif :

python3 - <<'PY'
import json
with open('/home/hadoop/scheduler-initial.json') as stream:
    info = json.load(stream)['scheduler']['schedulerInfo']
print(info['type'])
PY

Résultat attendu dans un environnement de laboratoire fraîchement initialisé :

capacityScheduler

Gardez ce terminal ouvert pour les étapes suivantes. Vous allez configurer chaque ordonnanceur dans les fichiers de configuration de Hadoop, puis redémarrer le ResourceManager afin qu’il charge la classe d’ordonnanceur sélectionnée.

Configurer le Fair Scheduler

Dans cette étape, vous allez configurer le Fair Scheduler pour répartir les ressources entre les files d’attente citizens et priests.

En tant qu’utilisateur Hadoop, créez le fichier d’allocation en exécutant le bloc complet suivant :

cat > /home/hadoop/fair-scheduler.xml <<'XML'
<?xml version="1.0"?>
<allocations>
  <defaultQueueSchedulingPolicy>fair</defaultQueueSchedulingPolicy>
  <queue name="root">
    <weight>1.0</weight>
    <queue name="citizens">
      <weight>1.0</weight>
      <minResources>1024 mb, 1 vcores</minResources>
    </queue>
    <queue name="priests">
      <weight>2.0</weight>
      <minResources>2048 mb, 2 vcores</minResources>
    </queue>
  </queue>
</allocations>
XML

La file d’attente citizens a une pondération de 1 et un minimum de 1024 MB de mémoire et de 1 vcore. La file d’attente priests a une pondération de 2 et un minimum de 2048 MB de mémoire et de 2 vcores. Ces ressources minimales sont des objectifs qui dépendent des ressources disponibles dans le cluster ; les pondérations influent sur le partage des ressources restantes.

Sélectionnez le Fair Scheduler et indiquez-lui le chemin du fichier d’allocation dans yarn-site.xml. La commande suivante préserve les paramètres NodeManager existants :

python3 - <<'PY'
import os
import xml.etree.ElementTree as ET

path = os.path.join(os.environ['HADOOP_CONF_DIR'], 'yarn-site.xml')
tree = ET.parse(path)
root = tree.getroot()
settings = {
    'yarn.resourcemanager.scheduler.class':
        'org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler',
    'yarn.scheduler.fair.allocation.file': '/home/hadoop/fair-scheduler.xml',
}
for name, value in settings.items():
    prop = next((p for p in root.findall('property') if p.findtext('name') == name), None)
    if prop is None:
        prop = ET.SubElement(root, 'property')
        ET.SubElement(prop, 'name').text = name
        ET.SubElement(prop, 'value')
    prop.find('value').text = value
tree.write(path, encoding='UTF-8', xml_declaration=True)
PY

Pour changer de classe d’ordonnanceur, vous devez redémarrer le ResourceManager. Ce cluster de laboratoire n’exécute aucune application. Arrêtez et démarrez uniquement le ResourceManager :

yarn --daemon stop resourcemanager
yarn --daemon start resourcemanager

Interrogez de nouveau l’ordonnanceur en cours d’exécution. Les options de nouvelle tentative laissent au ResourceManager le temps de démarrer ; de brèves erreurs de connexion peuvent survenir pendant le démarrage.

curl -fsS --retry 15 --retry-connrefused --retry-delay 1 http://localhost:8088/ws/v1/cluster/scheduler -o /home/hadoop/scheduler-fair.json
python3 - <<'PY'
import json
with open('/home/hadoop/scheduler-fair.json') as stream:
    info = json.load(stream)['scheduler']['schedulerInfo']
print(info['type'])
for queue in info['rootQueue']['childQueues']['queue']:
    if queue['queueName'] in ('root.citizens', 'root.priests'):
        resources = queue['minResources']
        print(queue['queueName'], resources['memory'], resources['vCores'])
PY

Résultat attendu (l’ordre des files d’attente peut varier) :

fairScheduler
root.citizens 1024 1
root.priests 2048 2

Vérifiez le résultat de cette étape avant de passer à un autre ordonnanceur à l’étape 3.

Configurer le Capacity Scheduler

Dans cette étape, vous allez passer au Capacity Scheduler et attribuer 50 % de la capacité du cluster à chaque file d’attente.

En tant qu’utilisateur Hadoop, écrivez directement capacity-scheduler.xml dans le répertoire de configuration de Hadoop. Si vous placez le fichier uniquement dans /home/hadoop, cet ordonnanceur ne le chargera pas :

cat > /home/hadoop/hadoop/etc/hadoop/capacity-scheduler.xml <<'XML'
<?xml version="1.0"?>
<configuration>
  <property>
    <name>yarn.scheduler.capacity.root.queues</name>
    <value>citizens,priests</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.citizens.capacity</name>
    <value>50</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.priests.capacity</name>
    <value>50</value>
  </property>
</configuration>
XML

La somme des capacités des files d’attente enfants est de 100 %. Sélectionnez le Capacity Scheduler dans yarn-site.xml :

sed -i 's/org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler/org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler/' /home/hadoop/hadoop/etc/hadoop/yarn-site.xml

Redémarrez le ResourceManager pour qu’il charge la nouvelle classe d’ordonnanceur et la configuration des files d’attente :

yarn --daemon stop resourcemanager
yarn --daemon start resourcemanager

Examinez l’ordonnanceur actif et ses files d’attente :

curl -fsS --retry 15 --retry-connrefused --retry-delay 1 http://localhost:8088/ws/v1/cluster/scheduler -o /home/hadoop/scheduler-capacity.json
python3 - <<'PY'
import json
with open('/home/hadoop/scheduler-capacity.json') as stream:
    info = json.load(stream)['scheduler']['schedulerInfo']
print(info['type'])
for queue in info['queues']['queue']:
    print(queue['queueName'], queue['capacity'])
PY

Résultat attendu (l’ordre des files d’attente peut varier) :

capacityScheduler
citizens 50.0
priests 50.0

Lorsque les deux files d’attente ont besoin de ressources, chacune dispose d’une capacité garantie de 50 %. La capacité inutilisée peut être partagée : ces valeurs n’imposent pas de laisser les ressources inactives.

Résumé

Dans ce laboratoire, vous avez appris à configurer et à appliquer différentes politiques d’ordonnancement dans Hadoop YARN afin de gérer efficacement l’allocation des ressources. En maîtrisant le Fair Scheduler et le Capacity Scheduler, Amenhotep peut assurer une répartition équitable des ressources entre les citoyens du royaume et donner la priorité aux tâches essentielles des prêtres.

Cette expérience pratique vous a permis de mieux comprendre les capacités de Hadoop YARN et sa faculté à gérer les ressources dans un environnement complexe. En appliquant les connaissances acquises dans ce laboratoire, vous pouvez créer des systèmes de gestion des ressources efficaces et équitables, adaptés aux besoins spécifiques de votre organisation.