Einführung
Im alten Ägypten zeugte der Palast des Pharaos eindrucksvoll von der Macht und dem Wohlstand des Königreichs. Doch hinter der vergoldeten Fassade bahnte sich eine Krise an. In den riesigen Vorratshäusern des Pharaos, gefüllt mit den Gaben des Nils, herrschte Unordnung. Die Priester, die für die Verteilung der Ressourcen zuständig waren, konnten mit dem Bedarf der Bevölkerung kaum Schritt halten.
Da kam Amenhotep ins Spiel, ein brillanter junger Priester, der den Auftrag erhielt, Ordnung in die Ressourcen des Königreichs zu bringen. Er sollte ein System entwickeln, das eine gerechte und effiziente Verteilung der wertvollen Güter sicherstellte, damit jeder Bürger seinen angemessenen Anteil erhielt.
Der Pharao war von Am enhoteps Scharfsinn und Einsatz beeindruckt und gewährte ihm Zugang zu einer bahnbrechenden neuen Technologie: Hadoop YARN (Yet Another Resource Negotiator). Mit diesem leistungsstarken Werkzeug machte sich Amenhotep daran, die Feinheiten des Applying Scheduler kennenzulernen – einer zentralen Komponente von YARN, die ihm helfen sollte, sein Ziel zu erreichen.
Die Scheduler in Hadoop YARN kennenlernen
In diesem Schritt lernen Sie die verschiedenen Scheduling-Richtlinien von Hadoop YARN kennen und untersuchen den laufenden Scheduler.
Wechseln Sie zunächst zum Hadoop-Benutzer. Führen Sie alle Befehle in diesem Lab in diesem Terminal aus:
su - hadoop
Legen Sie das Konfigurationsverzeichnis ausdrücklich fest. In diesem Image ist Hadoop unter /home/hadoop/hadoop installiert; /etc/hadoop/conf wird nicht verwendet.
export HADOOP_CONF_DIR=/home/hadoop/hadoop/etc/hadoop
Hadoop YARN unterstützt den Fair Scheduler und den Capacity Scheduler. Der Fair Scheduler verteilt Ressourcen im Zeitverlauf auf Anwendungen. Die Gewichtung der Warteschlangen beeinflusst dabei deren jeweilige Anteile. Der Capacity Scheduler weist Warteschlangen in einer Hierarchie garantierte Kapazitäten zu und ermöglicht gleichzeitig, dass ungenutzte Ressourcen gemeinsam genutzt werden.
Hadoop 3.3.6 bietet keinen Unterbefehl yarn scheduler. Fragen Sie die REST-API des ResourceManager ab, um den tatsächlich laufenden Scheduler zu untersuchen, statt davon auszugehen, dass eine Konfigurationsdatei angewendet wurde. Speichern Sie die Antwort:
curl -fsS --retry 15 --retry-connrefused --retry-delay 1 http://localhost:8088/ws/v1/cluster/scheduler -o /home/hadoop/scheduler-initial.json
Geben Sie den Typ des aktiven Schedulers aus:
python3 - <<'PY'
import json
with open('/home/hadoop/scheduler-initial.json') as stream:
info = json.load(stream)['scheduler']['schedulerInfo']
print(info['type'])
PY
Erwartete Ausgabe in einer frisch gestarteten Lab-Umgebung:
capacityScheduler
Lassen Sie dieses Terminal für die nächsten Schritte geöffnet. Sie konfigurieren jeden Scheduler über die Hadoop-Konfigurationsdateien und starten den ResourceManager neu, damit die ausgewählte Scheduler-Klasse geladen wird.
Den Fair Scheduler konfigurieren
In diesem Schritt konfigurieren Sie den Fair Scheduler so, dass Ressourcen zwischen den Warteschlangen citizens und priests aufgeteilt werden.
Erstellen Sie als Hadoop-Benutzer die Zuweisungsdatei. Führen Sie dazu den gesamten folgenden Block aus:
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
Die Warteschlange citizens hat die Gewichtung 1 und mindestens 1024 MB Arbeitsspeicher sowie 1 vCore. Die Warteschlange priests hat die Gewichtung 2 und mindestens 2048 MB Arbeitsspeicher sowie 2 vCores. Die Mindestressourcen sind Zielwerte, die von den verfügbaren Clusterressourcen abhängen. Die Gewichtungen beeinflussen, wie die verbleibenden Ressourcen aufgeteilt werden.
Wählen Sie in yarn-site.xml den Fair Scheduler aus und verweisen Sie auf die Zuweisungsdatei. Der folgende Befehl lässt die vorhandenen NodeManager-Einstellungen unverändert:
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
Damit die geänderte Scheduler-Klasse geladen wird, muss der ResourceManager neu gestartet werden. In diesem Übungscluster laufen keine Anwendungen. Stoppen und starten Sie nur den ResourceManager:
yarn --daemon stop resourcemanager
yarn --daemon start resourcemanager
Fragen Sie den laufenden Scheduler erneut ab. Die Wiederholungsoptionen geben dem ResourceManager Zeit zum Starten; währenddessen können kurzzeitig Verbindungsfehler auftreten.
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
Erwartete Ausgabe (die Reihenfolge der Warteschlangen kann abweichen):
fairScheduler
root.citizens 1024 1
root.priests 2048 2
Schließen Sie die Überprüfung dieses Schritts ab, bevor Sie in Schritt 3 den Scheduler wechseln.
Den Capacity Scheduler konfigurieren
In diesem Schritt wechseln Sie zum Capacity Scheduler und weisen jeder Warteschlange 50 % der Clusterkapazität zu.
Schreiben Sie als Hadoop-Benutzer capacity-scheduler.xml direkt in das Hadoop-Konfigurationsverzeichnis. Eine Datei, die nur unter /home/hadoop liegt, wird von diesem Scheduler nicht geladen:
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
Die Kapazitäten der untergeordneten Warteschlangen ergeben zusammen 100 %. Wählen Sie den Capacity Scheduler in yarn-site.xml aus:
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
Starten Sie den ResourceManager neu, damit die neue Scheduler-Klasse und die Warteschlangenkonfiguration geladen werden:
yarn --daemon stop resourcemanager
yarn --daemon start resourcemanager
Untersuchen Sie den aktiven Scheduler und seine Warteschlangen:
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
Erwartete Ausgabe (die Reihenfolge der Warteschlangen kann abweichen):
capacityScheduler
citizens 50.0
priests 50.0
Wenn beide Warteschlangen Ressourcen benötigen, hat jede eine garantierte Kapazität von 50 %. Ungenutzte Kapazität kann gemeinsam genutzt werden; diese Werte zwingen nicht dazu, ungenutzte Ressourcen ungenutzt zu lassen.
Zusammenfassung
In diesem Lab haben wir gelernt, wie sich verschiedene Scheduling-Richtlinien in Hadoop YARN konfigurieren und anwenden lassen, um Ressourcen effizient zu verwalten. Mit dem Fair Scheduler und dem Capacity Scheduler kann Amenhotep Ressourcen gerecht auf die Bürger des Königreichs verteilen und wichtige Aufgaben der Priester priorisieren.
Durch diese praktische Übung haben wir die leistungsstarken Möglichkeiten von Hadoop YARN und seine Fähigkeit, Ressourcen in einer komplexen Umgebung zu verwalten, besser kennengelernt. Mit dem Wissen aus diesem Lab können wir effiziente und faire Ressourcenverwaltungssysteme entwickeln, die auf die besonderen Anforderungen unserer Organisation zugeschnitten sind.



