YARN-Architektur und -Entwicklung

LinuxBeginner
Jetzt üben

Einführung

Mit Hadoop 2.0 wurde YARN als neues Ressourcenverwaltungsmodell eingeführt. Es verbessert die Auslastung des Clusters, ermöglicht eine einheitliche Ressourcenverwaltung und unterstützt die gemeinsame Nutzung von Daten. Aufbauend auf dem Hadoop-Pseudoverteilungscluster lernen Sie in diesem Abschnitt die Architektur und Funktionsweise des YARN-Frameworks sowie dessen Konfiguration, Entwicklung und Überwachung kennen.

Für dieses Lab benötigen Sie grundlegende Kenntnisse in der Java-Programmierung.

Die Entwicklungsschritte enthalten vollständige Java-Quelldateien. Fügen Sie jede Datei vollständig in Ihren Editor ein. Sehen Sie sich anschließend an, wie der Client eine Anwendung übermittelt und wie der ApplicationMaster einen Aufgaben-Container anfordert und startet.

YARN-Architektur und -Komponenten

Machen Sie sich in diesem Schritt mit der YARN-Architektur und den Aufgaben ihrer Komponenten vertraut.

YARN wurde mit Hadoop 0.23 als Teil von MapReduce 2.0 (MRv2) eingeführt und veränderte die Ressourcenverwaltung und Auftragsplanung in Hadoop-Clustern grundlegend:

  • Aufteilung des JobTrackers: MRv2 teilt die Funktionen des JobTracker auf separate Daemons auf: Der ResourceManager verwaltet Ressourcen, während der ApplicationMaster die Auftragsplanung und -überwachung übernimmt.
  • Globaler ResourceManager: Zu jeder Anwendung gehört ein eigener ApplicationMaster. Bei der Anwendung kann es sich um einen MapReduce-Auftrag oder um einen DAG handeln, der den Auftrag beschreibt.
  • Framework für Datenverarbeitung: ResourceManager, Slave und NodeManager bilden ein Framework, in dem der ResourceManager die Ressourcen aller Anwendungen verwaltet.
  • Komponenten des ResourceManager: Der Scheduler weist Ressourcen anhand von Kriterien wie Kapazitäten und Warteschlangen zu. Der ApplicationsManager verwaltet die Auftragsübermittlung und die Ausführung des ApplicationMaster.
  • Ressourcenzuweisung: Der Ressourcenbedarf wird über Ressourcenkontainer mit Angaben wie Arbeitsspeicher, CPU, Festplatte und Netzwerk festgelegt.
  • Aufgabe des NodeManager: Der NodeManager überwacht die Ressourcennutzung der Container und meldet sie an den ResourceManager und den Scheduler.
  • Aufgaben des ApplicationMaster: Der ApplicationMaster handelt Ressourcenkontainer mit dem Scheduler aus, verfolgt den Status und überwacht den Fortschritt.

Die folgende Abbildung zeigt die Zusammenhänge:

YARN architecture components diagram

YARN gewährleistet die API-Kompatibilität mit früheren Versionen. Dadurch können laufende MapReduce-Aufträge nahtlos übernommen werden. Um Ressourcen effizient zu verwalten und Aufträge in Hadoop-Clustern zu planen, müssen Sie die Architektur und Komponenten von YARN verstehen.

Hadoop-Daemons starten

Starten Sie in diesem Schritt die Hadoop-Daemons, die für die YARN-Anwendung benötigt werden.

Bevor Sie die relevanten Konfigurationsparameter und die Entwicklung von YARN-Anwendungen kennenlernen, müssen Sie die Hadoop-Daemons starten. So stehen sie jederzeit zur Verfügung.

Öffnen Sie zunächst das Xfce-Terminal auf dem Desktop mit einem Doppelklick. Geben Sie den folgenden Befehl ein, um zum Benutzer hadoop zu wechseln:

su - hadoop

Tipp: Das Passwort für den Benutzer hadoop lautet „hadoop“.

Nach dem Wechsel können Sie die zu Hadoop gehörenden Daemons starten, darunter die Daemons für HDFS und YARN.

Geben Sie die folgenden Befehle im Terminal ein, um die Daemons zu starten:

/home/hadoop/hadoop/sbin/start-dfs.sh
/home/hadoop/hadoop/sbin/start-yarn.sh

Nach dem Start können Sie mit dem Befehl jps überprüfen, ob die zugehörigen Daemons laufen.

hadoop:~$ jps
3378 NodeManager
3028 SecondaryNameNode
3717 Jps
2791 DataNode
2648 NameNode
3240 ResourceManager

Konfigurationsdatei vorbereiten

In diesem Schritt lernen Sie yarn-site.xml kennen. Diese wichtige Hadoop-Konfigurationsdatei enthält Einstellungen für den YARN-Cluster.

Damit Änderungen an der Konfigurationsdatei die ursprüngliche Datei nicht unbeabsichtigt beeinflussen, sollten Sie die Hadoop-Konfigurationsdatei in ein anderes Verzeichnis kopieren und dort öffnen.

Erstellen Sie dazu mit dem folgenden Befehl im Terminal ein Verzeichnis für die Konfigurationsdatei:

mkdir /home/hadoop/hadoop_conf

Kopieren Sie anschließend die YARN-Hauptkonfigurationsdatei yarn-site.xml aus dem Installationsverzeichnis in das neu erstellte Verzeichnis.

Führen Sie dazu diesen Befehl im Terminal aus:

cp /home/hadoop/hadoop/etc/hadoop/yarn-site.xml /home/hadoop/hadoop_conf/yarn-site.xml

Öffnen Sie die Datei anschließend mit dem Editor vim, um ihren Inhalt anzusehen:

vim /home/hadoop/hadoop_conf/yarn-site.xml

Funktionsweise der Konfigurationsdatei

Sehen Sie sich in diesem Schritt die Konfigurationsparameter an, die der laufende Hadoop-Cluster verwendet.

Im YARN-Framework gibt es zwei wichtige Komponenten: ResourceManager und NodeManager. Die Konfigurationseinträge in der Datei legen daher Einstellungen für diese beiden Komponenten fest.

In dieser Datei können viele Konfigurationseinträge gesetzt werden. Standardmäßig enthält sie jedoch keine benutzerdefinierten Einträge. Die Datei, die Sie gerade geöffnet haben, enthält beispielsweise nur das Attribut aux-services, das bei der vorherigen Konfiguration des Hadoop-Pseudoverteilungsclusters festgelegt wurde. Die folgende Abbildung zeigt ein Beispiel:

hadoop:~$ cat /home/hadoop/hadoop/etc/hadoop/mapred-site.xml

...
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

Dieser Konfigurationseintrag legt fest, welche abhängigen Dienste auf dem NodeManager ausgeführt werden müssen. Der angegebene Konfigurationswert mapreduce_shuffle bedeutet, dass der Standardwert für MapReduce-Programme festlegt, dass diese unter YARN ausgeführt werden.

Heißt das, nicht eingetragene Konfigurationen sind wirkungslos? Nicht unbedingt. Wenn Sie Konfigurationsparameter nicht explizit in der Datei angeben, liest das YARN-Framework von Hadoop die Standardwerte aus internen Dateien. Alle in yarn-site.xml explizit angegebenen Konfigurationseinträge überschreiben die Standardwerte. So kann das Hadoop-System an unterschiedliche Einsatzszenarien angepasst werden.

Konfigurationseinträge des ResourceManager

Damit Ressourcen effizient verwaltet und Aufträge in einem Hadoop-Cluster ausgeführt werden können, müssen Sie die Einstellungen des ResourceManager in der Datei yarn-site.xml verstehen und korrekt konfigurieren. Hier finden Sie eine Übersicht über wichtige Konfigurationseinträge für den ResourceManager:

  • yarn.resourcemanager.address: Stellt Clients eine Adresse zum Übermitteln und Beenden von Anwendungen bereit. Der Standardport ist 8032.
  • yarn.resourcemanager.scheduler.address: Stellt dem ApplicationMaster eine Adresse zum Anfordern und Freigeben von Ressourcen bereit. Der Standardport ist 8030.
  • yarn.resourcemanager.resource-tracker.address: Stellt dem NodeManager eine Adresse zum Senden von Heartbeats und Abrufen von Aufgaben bereit. Der Standardport ist 8031.
  • yarn.resourcemanager.admin.address: Stellt Administratoren eine Adresse für Verwaltungsbefehle bereit. Der Standardport ist 8033.
  • yarn.resourcemanager.webapp.address: WebUI-Adresse zum Anzeigen von Clusterinformationen. Der Standardport ist 8088.
  • yarn.resourcemanager.scheduler.class: Gibt den Klassennamen des Schedulers an (z. B. FIFO, CapacityScheduler, FairScheduler).
  • Thread-Konfiguration:
    • yarn.resourcemanager.resource-tracker.client.thread-count
    • yarn.resourcemanager.scheduler.client.thread-count
  • Ressourcenzuweisung:
    • yarn.scheduler.minimum-allocation-mb
    • yarn.scheduler.maximum-allocation-mb
    • yarn.scheduler.minimum-allocation-vcores
    • yarn.scheduler.maximum-allocation-vcores
  • Verwaltung des NodeManager:
    • yarn.resourcemanager.nodes.exclude-path
    • yarn.resourcemanager.nodes.include-path
  • Heartbeat-Konfiguration:
    • yarn.resourcemanager.nodemanagers.heartbeat-interval-ms

Mit diesen Parametern können Sie das Verhalten des ResourceManager, die Ressourcenzuweisung, die Thread-Verarbeitung, die Verwaltung des NodeManager und die Heartbeat-Intervalle in einem Hadoop-Cluster gezielt anpassen. Wenn Sie diese Einträge kennen, können Sie Problemen vorbeugen und einen reibungslosen Clusterbetrieb sicherstellen.

Konfigurationseinträge des NodeManager

Die Einstellungen des NodeManager in der Datei yarn-site.xml sind entscheidend, um Ressourcen und Aufgaben in einem Hadoop-Cluster effizient zu verwalten. Hier finden Sie eine Übersicht über wichtige Konfigurationseinträge für den NodeManager:

  • yarn.nodemanager.resource.memory-mb: Gibt den gesamten physischen Arbeitsspeicher an, der dem NodeManager zur Verfügung steht. Dieser Wert bleibt während der Laufzeit von YARN konstant.
  • yarn.nodemanager.vmem-pmem-ratio: Legt das Verhältnis zwischen virtuellem und physischem Arbeitsspeicher fest. Das Standardverhältnis ist 2.1.
  • yarn.nodemanager.resource.cpu-vcores: Gibt die Gesamtzahl der virtuellen CPUs an, die dem NodeManager zur Verfügung stehen. Der Standardwert ist 8.
  • yarn.nodemanager.local-dirs: Pfad zum Speichern von Zwischenergebnissen auf dem NodeManager. Sie können mehrere Verzeichnisse konfigurieren.
  • yarn.nodemanager.log-dirs: Pfad zum Protokollverzeichnis des NodeManager. Sie können mehrere Verzeichnisse konfigurieren.
  • yarn.nodemanager.log.retain-seconds: Maximale Aufbewahrungsdauer der NodeManager-Protokolle. Der Standardwert beträgt 10800 Sekunden (3 Stunden).

Mit diesen Parametern können Sie Ressourcenzuweisung, Arbeitsspeicherverwaltung, Verzeichnispfade und Aufbewahrungsdauer der Protokolle anpassen. So lassen sich die Leistung und Ressourcennutzung des NodeManager in einem Hadoop-Cluster optimieren. Wenn Sie diese Einträge kennen, können Sie einen reibungslosen Clusterbetrieb und eine effiziente Aufgabenausführung sicherstellen.

Konfigurationseinträge und Standardwerte nachschlagen

Die Standardkonfigurationsdateien von Apache Hadoop enthalten alle verfügbaren Konfigurationseinträge für YARN und andere gängige Hadoop-Komponenten. Über die folgenden Links können Sie auf die Standardkonfigurationen zugreifen:

In den Standardkonfigurationen finden Sie ausführliche Beschreibungen der einzelnen Konfigurationseinträge und ihrer Zwecke. So können Sie die Bedeutung der Parameter für die Hadoop-Architektur besser verstehen.

Schließen Sie vim, nachdem Sie die Konfigurationen geprüft haben, um die Untersuchung der Hadoop-Einstellungen abzuschließen.

Projektverzeichnisse und Dateien erstellen

Erstellen Sie in diesem Schritt die Quelldateien für die Anwendung. Sie erstellen eine vollständige, minimale YARN-Anwendung: Ein Client übermittelt den ApplicationMaster, der einen Aufgaben-Container anfordert, um eine Begrüßung auszugeben.

Erstellen Sie zunächst ein Projektverzeichnis. Geben Sie dazu den folgenden Befehl im Terminal ein:

mkdir /home/hadoop/yarn_app

Erstellen Sie anschließend die beiden Quelldateien im Projektverzeichnis.

Erstellen Sie zuerst die Datei Client.java mit dem Befehl touch im Terminal:

touch /home/hadoop/yarn_app/Client.java

Erstellen Sie danach die Datei ApplicationMaster.java:

touch /home/hadoop/yarn_app/ApplicationMaster.java
hadoop:~$ tree /home/hadoop/yarn_app/
/home/hadoop/yarn_app/
├── ApplicationMaster.java
└── Client.java

0 directories, 2 files

Client-Code schreiben

Schreiben Sie in diesem Schritt den vollständigen Client, der die Anwendung übermittelt. Arbeiten Sie weiterhin als Benutzer hadoop. Öffnen Sie die Quelldatei:

vim /home/hadoop/yarn_app/Client.java

Ersetzen Sie den gesamten Dateiinhalt durch den folgenden Code, einschließlich der Paketdeklaration und der Imports. Geben Sie in Vim :set paste ein und drücken Sie die Eingabetaste, bevor Sie mit i den Einfügemodus aktivieren. Fügen Sie die vollständige Datei ein und warten Sie, bis alle Zeilen angezeigt werden. Drücken Sie anschließend Esc und geben Sie :wq ein, um die Datei zu speichern und Vim zu beenden.

package com.labex.yarn.app;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.yarn.api.ApplicationConstants;
import org.apache.hadoop.yarn.api.records.*;
import org.apache.hadoop.yarn.client.api.YarnClient;
import org.apache.hadoop.yarn.client.api.YarnClientApplication;
import org.apache.hadoop.yarn.conf.YarnConfiguration;
import org.apache.hadoop.yarn.util.ConverterUtils;

public class Client {
    public static void main(String[] args) throws Exception {
        if (args.length != 1) {
            throw new IllegalArgumentException("Usage: Client /absolute/path/to/yarn-app.jar");
        }
        YarnConfiguration conf = new YarnConfiguration();
        YarnClient client = YarnClient.createYarnClient();
        client.init(conf);
        client.start();
        try {
            YarnClientApplication application = client.createApplication();
            ApplicationSubmissionContext context = application.getApplicationSubmissionContext();
            ApplicationId id = context.getApplicationId();
            FileSystem fs = FileSystem.get(conf);
            Path destination = new Path(fs.getHomeDirectory(), "yarn-app/" + id + "/app.jar");
            fs.mkdirs(destination.getParent());
            fs.copyFromLocalFile(new Path(args[0]), destination);
            FileStatus status = fs.getFileStatus(destination);
            LocalResource jar = LocalResource.newInstance(
                ConverterUtils.getYarnUrlFromPath(fs.makeQualified(destination)),
                LocalResourceType.FILE, LocalResourceVisibility.APPLICATION,
                status.getLen(), status.getModificationTime());
            Map<String, LocalResource> resources = new HashMap<>();
            resources.put("app.jar", jar);
            Map<String, String> environment = new HashMap<>();
            // The single-node lab uses the same Hadoop installation in every container.
            environment.put("CLASSPATH", "./app.jar:" + System.getProperty("java.class.path"));
            String command = ApplicationConstants.Environment.JAVA_HOME.$$()
                + "/bin/java -Xmx128m com.labex.yarn.app.ApplicationMaster"
                + " 1>" + ApplicationConstants.LOG_DIR_EXPANSION_VAR + "/stdout"
                + " 2>" + ApplicationConstants.LOG_DIR_EXPANSION_VAR + "/stderr";
            ContainerLaunchContext launch = ContainerLaunchContext.newInstance(
                resources, environment, Collections.singletonList(command), null, null, null);
            context.setApplicationName("LabEx YARN Hello");
            context.setQueue("default");
            context.setResource(Resource.newInstance(256, 1));
            context.setAMContainerSpec(launch);
            client.submitApplication(context);
            System.out.println("Application ID: " + id);
            long deadline = System.currentTimeMillis() + 180000;
            while (System.currentTimeMillis() < deadline) {
                ApplicationReport report = client.getApplicationReport(id);
                YarnApplicationState state = report.getYarnApplicationState();
                if (state == YarnApplicationState.FINISHED
                    || state == YarnApplicationState.FAILED
                    || state == YarnApplicationState.KILLED) {
                    System.out.println("Final status: " + report.getFinalApplicationStatus());
                    if (report.getFinalApplicationStatus() != FinalApplicationStatus.SUCCEEDED) {
                        throw new IllegalStateException(report.getDiagnostics());
                    }
                    return;
                }
                Thread.sleep(1000);
            }
            client.killApplication(id);
            throw new IllegalStateException("Application timed out after three minutes");
        } finally {
            client.stop();
        }
    }
}

YarnClient stellt eine Verbindung zum ResourceManager her und erhält eine Anwendungs-ID. Der Client kopiert die JAR-Datei nach HDFS und deklariert sie als lokale Ressource app.jar, damit YARN sie im Arbeitsverzeichnis des ApplicationMaster bereitstellen kann. Der Startkontext enthält den Klassenpfad und den Java-Befehl. Der Übermittlungskontext legt die Warteschlange und die Container-Ressourcen fest.

Der Klassenpfad verwendet die installierten Hadoop-Bibliotheken, die von den Containern in diesem Einzelknoten-Lab gemeinsam genutzt werden. Ein Download über Maven oder Gradle ist nicht erforderlich. Dieses Beispiel ist für den Kerberos-freien Cluster des Labs ausgelegt.

Nach der Übermittlung fragt der Client den Anwendungsbericht wiederholt ab, bis ein Endzustand erreicht ist, und prüft den endgültigen Status. killApplication wird nur aufgerufen, wenn die Anwendung das Zeitlimit von drei Minuten überschreitet. Im letzten Schritt kompilieren und starten Sie beide Klassen.

ApplicationMaster-Code schreiben

Schreiben Sie in diesem Schritt den vollständigen ApplicationMaster. Er registriert sich beim ResourceManager, fordert einen Container an, startet über den NodeManager eine Begrüßung und meldet das Ergebnis der Aufgabe.

Öffnen Sie die Datei als Benutzer hadoop:

vim /home/hadoop/yarn_app/ApplicationMaster.java

Ersetzen Sie den gesamten Dateiinhalt durch den folgenden Code. Geben Sie :set paste ein und drücken Sie die Eingabetaste, bevor Sie mit i den Einfügemodus aktivieren. Fügen Sie die vollständige Datei ein und warten Sie, bis alle Zeilen angezeigt werden. Drücken Sie anschließend Esc und geben Sie :wq ein, um die Datei zu speichern und Vim zu beenden.

package com.labex.yarn.app;

import java.util.Collections;
import org.apache.hadoop.yarn.api.ApplicationConstants;
import org.apache.hadoop.yarn.api.protocolrecords.AllocateResponse;
import org.apache.hadoop.yarn.api.records.*;
import org.apache.hadoop.yarn.client.api.AMRMClient;
import org.apache.hadoop.yarn.client.api.NMClient;
import org.apache.hadoop.yarn.conf.YarnConfiguration;

public class ApplicationMaster {
    public static void main(String[] args) throws Exception {
        YarnConfiguration conf = new YarnConfiguration();
        AMRMClient<AMRMClient.ContainerRequest> rm = AMRMClient.createAMRMClient();
        NMClient nm = NMClient.createNMClient();
        rm.init(conf);
        nm.init(conf);
        rm.start();
        nm.start();
        try {
            rm.registerApplicationMaster("", 0, "");
            AMRMClient.ContainerRequest request = new AMRMClient.ContainerRequest(
                Resource.newInstance(256, 1), null, null, Priority.newInstance(0));
            rm.addContainerRequest(request);
            boolean launched = false;
            long deadline = System.currentTimeMillis() + 120000;
            while (System.currentTimeMillis() < deadline) {
                // Each allocate call also sends a heartbeat to the ResourceManager.
                AllocateResponse response = rm.allocate(launched ? 0.5f : 0.0f);
                for (Container container : response.getAllocatedContainers()) {
                    if (launched) {
                        rm.releaseAssignedContainer(container.getId());
                        continue;
                    }
                    rm.removeContainerRequest(request);
                    String command = "/bin/echo Hello-from-YARN"
                        + " 1>" + ApplicationConstants.LOG_DIR_EXPANSION_VAR + "/stdout"
                        + " 2>" + ApplicationConstants.LOG_DIR_EXPANSION_VAR + "/stderr";
                    ContainerLaunchContext launch = ContainerLaunchContext.newInstance(
                        Collections.emptyMap(), Collections.emptyMap(),
                        Collections.singletonList(command), null, null, null);
                    nm.startContainer(container, launch);
                    launched = true;
                }
                for (ContainerStatus status : response.getCompletedContainersStatuses()) {
                    if (status.getExitStatus() != 0) {
                        throw new IllegalStateException(status.getDiagnostics());
                    }
                    rm.unregisterApplicationMaster(FinalApplicationStatus.SUCCEEDED,
                        "Hello container completed", "");
                    return;
                }
                Thread.sleep(1000);
            }
            rm.unregisterApplicationMaster(FinalApplicationStatus.FAILED,
                "No successful container within two minutes", "");
            throw new IllegalStateException("Container timed out");
        } finally {
            nm.stop();
            rm.stop();
        }
    }
}

AMRMClient übernimmt die Registrierung und die Ressourcenanforderungen. Jeder Aufruf von allocate sendet einen Heartbeat und liefert neu zugewiesene Container sowie Statusinformationen zu abgeschlossenen Containern zurück. NMClient startet den Befehl im zugewiesenen Container. Diese synchrone Abfrageschleife hält das Beispiel in sich geschlossen, ohne nicht definierte Callback-Klassen oder Hilfsmethoden zu benötigen.

Die Aufgabe gibt Hello-from-YARN im Protokoll des Containers aus. Bei einem Exit-Status von null meldet sich der ApplicationMaster mit dem Status SUCCEEDED ab. Der Client gibt diesen endgültigen Status anschließend aus. Der ResourceManager kann die angeforderten 256 MB auf seine Mindestzuweisung aufrunden. Während der Wartezeit sendet die Schleife weiterhin Heartbeats.

Ablauf des Anwendungsstarts

Kompilieren und starten Sie in diesem Schritt die beiden Java-Klassen, die Sie geschrieben haben. Untersuchen Sie anschließend die Anwendung in der Weboberfläche des ResourceManager. Arbeiten Sie im Terminal weiterhin als Benutzer hadoop.

Anwendung kompilieren und starten

Wechseln Sie in das Quellverzeichnis:

cd /home/hadoop/yarn_app

Erstellen Sie das Ausgabeverzeichnis:

mkdir -p classes

Kompilieren Sie beide vollständigen Quelldateien mit den Hadoop-Bibliotheken, die bereits in der VM installiert sind. --release 8 erzeugt Klassen, die mit der Java-8-Laufzeit von Hadoop kompatibel sind, auch wenn der Standardcompiler neuer ist:

javac --release 8 -cp "$(/home/hadoop/hadoop/bin/hadoop classpath --glob)" -d classes Client.java ApplicationMaster.java

Ein Hinweis zu veralteten APIs ist unbedenklich. Es sollten keine Kompilierungsfehler auftreten. Packen Sie die kompilierten Klassen in eine JAR-Datei:

jar cf yarn-app.jar -C classes .

Übermitteln Sie den Client und speichern Sie seine Ausgabe. Das letzte Argument gibt die JAR-Datei an, die der Client für den ApplicationMaster nach HDFS hochlädt:

set -o pipefail
/home/hadoop/hadoop/bin/yarn jar /home/hadoop/yarn_app/yarn-app.jar com.labex.yarn.app.Client /home/hadoop/yarn_app/yarn-app.jar | tee /home/hadoop/yarn_app/application.log

Warten Sie, bis die Anwendung abgeschlossen ist. Zwischen den Hadoop-Protokollmeldungen sollten Sie Folgendes sehen:

Application ID: application_<timestamp>_<sequence>
Final status: SUCCEEDED

Die ID ändert sich bei jedem Lauf. Die Begrüßung wird in das Protokoll des Aufgaben-Containers geschrieben. Der Client gibt die Anwendungs-ID und das endgültige Ergebnis aus. Bei diesem Lauf verwenden Sie Ihren eigenen Client und ApplicationMaster statt eines separaten, vorkompilierten MapReduce-Beispiels.

Ergebnisse der Anwendungsausführung anzeigen

Öffnen Sie Firefox auf dem Desktop und rufen Sie die folgende Adresse auf:

http://localhost:8088

Suchen Sie in der Anwendungsliste nach LabEx YARN Hello. Verwenden Sie dazu die Anwendungs-ID, die im Terminal ausgegeben wurde. Der Status sollte FINISHED und der endgültige Status SUCCEEDED sein. Klicken Sie auf die Anwendungs-ID, um die Details anzusehen. Der ResourceManager verfolgt die Anwendung, der ApplicationMaster verwaltet den Aufgaben-Container und der NodeManager führt diesen Container aus.

Zusammenfassung

Aufbauend auf dem Hadoop-Pseudoverteilungscluster lernen Sie in diesem Lab die Architektur und Funktionsweise des YARN-Frameworks sowie dessen Konfiguration, Entwicklung und Überwachung kennen. Das Lab enthält zahlreiche Codebeispiele und Konfigurationsdateien. Lesen Sie diese sorgfältig durch.