Scheduler in Hadoop anwenden

LinuxBeginner
Jetzt üben

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.