Gorodenkoff - stock.adobe.com

Einstieg in das Workflow-Management mit Apache Airflow

In diesem Artikel erfahren Sie alles über Apache Workflow, um mit der Open-Source-Lösung für Workflow-Automatisierung loslegen zu können – von der Installation bis zu GUI-Optionen.

Apache Airflow ist ein Open-Source-Workflow-Management-Tool, mit dem IT-Teams die Datenverarbeitung und die DevOps-Automatisierungs-Pipelines optimieren können.

Airflow basiert auf Python und wird von einer SQLite-Datenbank unterstützt. Mit Airflow können Administratoren Workflows programmgesteuert verwalten und geplante Jobs überwachen. In diesem einführenden Artikel behandeln wir die Installation, Integrationen, Kernkonzepte und grundlegende Befehle für das Tool. Anschließend erstellen wir eine Beispielaufgabe mit Python und zeigen die grafische Benutzeroberfläche von Airflow.

Grundlagen und Installation von Apache Airflow

Apache Airflow definiert seine Workflows als Code. Mitarbeiter führen in Airflow Aufgaben in Workflows aus; eine Reihe von Aufgaben wird als Pipeline bezeichnet. Airflow verwendet außerdem Directed Acyclic Graphs (DAGs). Ein DAG Run ist eine einzelne Instanz einer aktiven codierten Aufgabe. Pools steuern die Anzahl gleichzeitiger Aufgaben, um eine Systemüberlastung zu vermeiden.

Für Apache Airflow gibt es keine TAR-Datei und kein .deb-Paket zum Herunterladen und Installieren, wie beispielsweise bei anderen Tools wie Salt.

Stattdessen installieren Benutzer alle Betriebssystemabhängigkeiten über das Installationsprogramm für pip-Python-Pakete, wie zum Beispiel Build-Essential-Pakete, die Kerneldateien, Compiler, SO-Dateien und Header-Dateien enthalten. Anschließend installieren Sie ein einzelnes Python-Paket. Die vollständige Liste der Abhängigkeiten finden Sie in der Airflow-Dokumentation.

Airflow-Abhängigkeiten können unterschiedlich sein, doch zu den Obermengen gehören:

  • sudo apt-get install -y --no-install-recommends \
  • freetds-bin \
  • krb5-user \
  • ldap-utils \
  • libffi6 \
  • libsasl2-2 \
  • libsasl2-modules \
  • 1 \
  • locales \
  • lsb-release \
  • sasl2-bin \
  • sqlite3 \
  • unixodbc

Beginnen Sie den Installationsprozess mit folgendem Befehl:

pip install apache-airflow

Als nächstes initiieren Sie die SQLite-Datenbank, die Job-Metadaten enthält:

airflow initdb

Jetzt können Sie Airflow starten:

airflow webserver -p 8080

Öffnen Sie abschließend den Webserver unter localhost: 8080. Führen Sie das System nicht über den Webserver aus, da es nur zur Überwachung und Optimierung vorgesehen ist. Verwenden Sie stattdessen Python- und Jinja-Vorlagen, die Sie in den Python-Boilerplate-Code einfügen, um Aufgaben über die Kommandozeile (Command Line Interface, CLI) auszuführen. Jinja besteht aus Python-Code, ist aber keine Python-Sprache.

Benutzer können zusätzliche Pakete hinzufügen, und Airflow bietet eine Vielzahl möglicher Verknüpfungen mit Programmen von Dritten. Verbinden Sie Hadoop beispielsweise über den Befehl pip install apache-airflowhdfs, um mit dem verteilten Hadoop-Dateisystem zu arbeiten.

Kompatibilität

Airflow funktioniert mit Bash-Befehlen sowie einer Vielzahl anderer Tools. Dazu gehören beispielsweise Kubernetes, AWS Lambda und PostgreSQL. Weitere Programme, mit denen Apache Airflow zusammenarbeiten kann, sehen Sie in Abbildung 1.

Abbildung 1: Airflow ist mit vielen Programmen kompatibel, die für DevOps-Anwendungen interessant sind.
Abbildung 1: Airflow ist mit vielen Programmen kompatibel, die für DevOps-Anwendungen interessant sind.

Kommandozeile

Airflow wird über eine Kommandozeile gesteuert. Zu den wichtigsten Befehlen, die Benutzer kennen müssen, gehören:

  • airflow run, um einen Task auszuführen;
  • airflow task, um einen Task zu debuggen;
  • airflow backfill, um einen Teil eines DAGs zu einem bestimmten Datum auszuführen – nicht den ganzen.
  • airflow webserver, um die grafische Benutzeroberfläche (graphic user interface, GUI) auszuführen
  • airflow show_dag, um Tasks und deren Abhängigkeiten anzuzeigen.

Benutzer definieren Aufgaben (Tasks) in Python. Sie benötigen zwar nicht viele Python-Programmierkenntnisse, um Airflow zu verwenden, da sie Vorlagen kopieren können; Grundkenntnisse sollten jedoch vorhanden sein. So müssen Nutzer wissen, wie sie datetime-Objekte und timedelta-Objekte verwenden.

Im Folgenden finden Sie eine reduzierte Version des Python-Beispiel-Tasks aus der Apache-Airflow-Dokumentation. Die Codeabschnitte werden durchgehend erläutert

In diesem Beispiel-Code sehen Sie Argumente für den DAG-Konstruktur mit dem BashOperator
Abbildung 2: In diesem Beispiel-Code sehen Sie Argumente für den DAG-Konstruktur mit dem BashOperator

Die Beispielaufgabe hat drei Operationen, wobei die erste von den folgenden zweien abhängt. Abhängigkeiten sind für DevOps von großer Bedeutung, da sich dadurch bestimmen lässt, dass bestimmte Jobs unabhängig von den Ergebnissen anderer Jobs laufen und andere nicht.

Auf diese Weise können IT-Administratoren mehrere DevOps-Schritte ausführen, die voneinander abhängig sind. Bash-Befehle erledigen einfache und komplexe Aufgaben wie das Kopieren von Dateien, das Starten eines Servers oder das Übertragen von Dateien. Beispielsweise kann ein Skript eine Datei in einer Amazon Glue Staging Area kopieren, jedoch nur, wenn der vorherige Schritt, zum Beispiel das Abrufen dieser Datei von einem anderen System, erfolgreich abgeschlossen wurde.

Die Argumente für den DAG-Konstruktor sind in Abbildung 2 dargestellt. In diesem Beispiel wird BashOperator verwendet, da er einen einfachen Bash-Befehl ausführt. Alle Operatoren sind Erweiterungen des BaseOperator-Befehls.

Zu den anderen wichtigen APIs gehören außerdem BaseSensorOperators, die auf Ereignisse aus angebundenen Drittanbieterprogrammen stammen, zum Beispiel Amazon Glue, sowie aus Transfers, die Daten zwischen Systemen versenden.

Der Code in Abbildung 2 verwendet Jinja, eine beliebte Makro-Programmiersprache.

Jinja übergibt Makros und Parameter über eine kompakte Syntax an BashOperator und andere Python-Objekte.

Abbildung 3: Templated_Command wird fünfmal in das BashOperator-Objekt eingespeist, um einen Parameterwert für die Weitergabe zu erhalten.Abbildung 3: Templated_Command wird fünfmal in das BashOperator-Objekt eingespeist, um
einen Parameterwert für die Weitergabe zu erhalten.

Zum Beispiel ist templated_command ein vollständiges Jinja-Makro. Es wird in das BashOperator-Objekt eingespeist. Wie in Abbildung 3 dargestellt, wird dies fünfmal ausgeführt und der Parameterwert params.my_param aus dem t3-BashOperator-Objekt wiedergegeben.

In diesem letzten Abschnitt in Abbildung 4 teilt t1 >> [t2, t3] Airflow mit, dass es Aufgabe 1 erst ausführen soll, wenn die Aufgaben 2 und 3 erfolgreich abgeschlossen wurden.

Abbildung 4: Durch Abhängigkeiten kann festgelegt werden, in welcher Reihenfolge Aufgaben abhängig vom jeweiligen Ergebnis ausgeführt werden.Abbildung 4: Durch Abhängigkeiten kann festgelegt werden, in welcher Reihenfolge Aufgaben
abhängig vom jeweiligen Ergebnis ausgeführt werden.

Der Codeabschnitt in Abbildung 5 – entnommen aus dem Segment von Abbildung 1 vor den t3-Befehlen – legt fest, dass Apache Airflow eine Dokumentation schreiben soll, die in der GUI angezeigt wird.

Markdown ist die Syntax, die von GitHub und anderen Systemen verwendet wird, um Links zu erstellen, Listen mit Aufzählungszeichen zu erstellen und Passagen gefettet anzuzeigen, um beispielsweise eine Anzeige mit vielen relevanten Aufgabeninformationen leserlicher zu strukturieren.

Die Benutzeroberfläche von Apache Airflow

Führen Sie die GUI über die Befehlszeile mit dem Python-Befehl airflow webserver und einer REST-Schnittstelle aus. Dabei sollten Sie beachten, dass diese sich zum Zeitpunkt der Veröffentlichung in der Beta-Phase befindet. Die GUI können Sie zur Überwachung und für die Feinabstimmung verwenden.

Abbildung 5: In diesem Codeabschnitt legt der Nutzer fest, dass Airflow eine Dokumentation schreiben soll.Abbildung 5: In diesem Codeabschnitt legt der Nutzer fest, dass Airflow eine Dokumentation
schreiben soll.

Jede DAG oder Aufgabe ist in einem Listenformat auf dem DAG-Bildschirm der GUI verfügbar. Benutzer haben jedoch auch andere Ansichtsoptionen, wie die Baumansicht, die DAGs entlang des Zeitverlaufs anzeigt, beispielsweise beim Ausführen, Herunterfahren und Warten. Denken Sie daran, dass jede DAG einen festgelegten Startzeitpunkt hat. Eine weitere Ansichtsoption ist die Diagrammansicht. Abbildung 6 zeigt Jobs, ihre Abhängigkeiten und ihren aktuellen Status.

Andere Ansichten umfassen:

  • Variablenansicht, in der bestimmte Variablen wie Anmeldeinformationen angezeigt werden;
  • Gantt-Diagramm, das die Aufgabendauer und deren Überlappung anzeigt;
  • Aufgabendauer, die eine Zeitleiste der Aufgabendauer anzeigt;
  • Codeansicht, die den Python-Code jedes Pipeline-Jobs anzeigt; und
  • Kontextmenü für Aufgabeninstanzen, das Aufgabenmetadaten anzeigt.
Abbildung 6: Apache Airflow kann DAGs auf verschiedene Weisen anzeigen.
Abbildung 6: Apache Airflow kann DAGs auf verschiedene Weisen anzeigen.

Erfahren Sie mehr über Data-Center-Betrieb