Apache Oozie-Tutorial: Was ist, Workflow, Beispiel – Hadoop

Was ist OOZIE?

Apache Oozie ist ein Workflow-Planer für Hadoop. Es handelt sich um ein System, das den Arbeitsablauf abhängiger Jobs ausführt. Hier dürfen Benutzer erstellen Gerichtete azyklische Graphen von Workflows, die in Hadoop parallel und sequentiell ausgeführt werden können.

Es besteht aus zwei Teilen:

  • Workflow-Engine: Die Aufgabe einer Workflow-Engine besteht darin, Workflows zu speichern und auszuführen, die aus Hadoop-Jobs bestehen, z. B. MapReduce, Pig, Hive.
  • Koordinator-Engine: Es führt Workflow-Jobs basierend auf vordefinierten Zeitplänen und der Verfügbarkeit von Daten aus.

Oozie ist skalierbar und kann die zeitgerechte Ausführung Tausender Workflows (jeder besteht aus Dutzenden von Jobs) in einem Hadoop-Cluster verwalten.

OOZIE

Oozie ist auch sehr flexibel. Man kann Jobs ganz einfach starten, stoppen, anhalten und erneut ausführen. Oozie macht es sehr einfach, fehlgeschlagene Arbeitsabläufe erneut auszuführen. Man kann leicht verstehen, wie schwierig es sein kann, versäumte oder gescheiterte Aufträge aufgrund von Ausfallzeiten oder Ausfällen nachzuholen. Es ist sogar möglich, einen bestimmten ausgefallenen Knoten zu überspringen.

Wie funktioniert OOZIE?

Oozie wird als Dienst im Cluster ausgeführt und Clients übermitteln Workflow-Definitionen zur sofortigen oder späteren Verarbeitung.

Der Oozie-Workflow besteht aus Aktionsknoten und Kontrollflussknoten.

An Aktionsknoten stellt eine Workflow-Aufgabe dar, z. B. das Verschieben von Dateien in HDFS, das Ausführen von MapReduce, Pig oder Bienenstock Jobs, Importieren von Daten mit Sqoop oder Ausführen eines Shell-Skripts eines in Java.

A Kontrollflussknoten steuert die Workflow-Ausführung zwischen Aktionen, indem es Konstrukte wie bedingte Logik zulässt, bei der je nach Ergebnis des vorherigen Aktionsknotens unterschiedliche Verzweigungen verfolgt werden können.

Knoten starten, Endknoten und Fehlerknoten fallen unter diese Kategorie von Knoten.

Startknoten, bezeichnet den Start des Workflow-Jobs.

Endknoten, signalisiert das Ende der Arbeit.

Fehlerknoten bezeichnet das Auftreten eines Fehlers und die entsprechende auszudruckende Fehlermeldung.

Am Ende der Ausführung eines Workflows verwendet Oozie einen HTTP-Rückruf, um den Client mit dem Workflow-Status zu aktualisieren. Der Ein- oder Ausstieg aus einem Aktionsknoten kann ebenfalls den Rückruf auslösen.

Beispiel-Workflow-Diagramm

Beispiel-Workflow-Diagramm

Verpacken und Bereitstellen einer Oozie-Workflow-Anwendung

Eine Workflow-Anwendung besteht aus der Workflow-Definition und allen zugehörigen Ressourcen wie MapReduce Jar-Dateien, Pig-Skripten usw. Anwendungen müssen einer einfachen Verzeichnisstruktur folgen und werden bereitgestellt an HDFS damit Oozie darauf zugreifen kann.

Eine Beispielverzeichnisstruktur ist unten dargestellt:

<name of workflow>/</name>
??? lib/
? ??? hadoop-examples.jar
??? workflow.xml

Es ist notwendig, „workflow.xml“ (eine Workflow-Definitionsdatei) im Verzeichnis der obersten Ebene (übergeordnetes Verzeichnis mit Workflow-Namen) aufzubewahren. Das Lib-Verzeichnis enthält Jar-Dateien mit MapReduce-Klassen. Eine diesem Layout entsprechende Workflow-Anwendung kann mit jedem Build-Tool erstellt werden, z. B. Ant oder Maven.

Ein solcher Build muss beispielsweise mit einem Befehl nach HDFS kopiert werden:

% hadoop fs -put hadoop-examples/target/<name of workflow dir> name of workflow

Schritte zum Ausführen eines Oozie-Workflow-Jobs

In diesem Abschnitt erfahren Sie, wie Sie einen Workflow-Job ausführen. Um dies auszuführen, verwenden wir das Oozie-Befehlszeilentool (ein Client-Programm, das mit dem Oozie-Server kommuniziert).

1. Exportieren Sie die Umgebungsvariable OOZIE_URL, die dem Oozie-Befehl mitteilt, welcher Oozie-Server verwendet werden soll (hier verwenden wir einen, der lokal ausgeführt wird):

% export OOZIE_URL="http://localhost:11000/oozie"

2. Führen Sie den Workflow-Job aus mit:

% oozie job -config ch05/src/main/resources/max-temp-workflow.properties -run

Die Option -config bezieht sich auf eine lokale Java Properties-Datei mit Definitionen für die Parameter in der Workflow-XML-Datei sowie oozie.wf.application.path, die Oozie den Speicherort der Workflow-Anwendung in HDFS mitteilt.

Beispielinhalt der Eigenschaftendatei:

nameNode=hdfs://localhost:8020
jobTracker=localhost:8021
oozie.wf.application.path=${nameNode}/user/${user.name}/<name of workflow>

3. Rufen Sie den Status des Workflow-Jobs ab.

Der Status des Workflow-Jobs kann mithilfe des Unterbefehls „Job“ mit der Option „-info“ und der Angabe der Job-ID nach „-info“ angezeigt werden.

e.g., % oozie job -info <job id>

Die Ausgabe zeigt den Status „RUNNING“, „KILLED“ oder „SUCCEEDED“ an.

4. Die Ergebnisse einer erfolgreichen Workflow-Ausführung können mithilfe von Hadoop-Befehlen angezeigt werden:

% hadoop fs -cat <location of result>

Warum Oozie verwenden?

Der Hauptzweck der Verwendung von Oozie besteht darin, verschiedene Arten von Jobs zu verwalten, die im Hadoop-System verarbeitet werden.

Abhängigkeiten zwischen Jobs werden von einem Benutzer in Form von gerichteten azyklischen Diagrammen angegeben. Oozie konsumiert diese Informationen und kümmert sich um deren Ausführung in der richtigen Reihenfolge, wie in einem Workflow festgelegt. Auf diese Weise wird dem Benutzer Zeit gespart, den gesamten Arbeitsablauf zu verwalten. Darüber hinaus verfügt Oozie über eine Bestimmung, mit der die Häufigkeit der Ausführung eines bestimmten Jobs festgelegt werden kann.

Merkmale von Oozie

  • Oozie verfügt über eine Client-API und eine Befehlszeilenschnittstelle, mit der Jobs gestartet, gesteuert und überwacht werden können von Java Anwendung.
  • Mit seinen Web-Service-APIs kann man Jobs von überall aus steuern.
  • Oozie verfügt über die Möglichkeit, Jobs auszuführen, deren Ausführung in regelmäßigen Abständen geplant ist.
  • Oozie verfügt über die Möglichkeit, nach Abschluss von Aufträgen E-Mail-Benachrichtigungen zu senden.