NextLytics Blog

Apache Airflow Best Practices - Unsere Tipps für Anwender

Geschrieben von Markus Suhr | 25.02.2021 13:26:55

Der Einstieg in das Workflowmanagement-Tool Airflow ist einfach. Mit einfachen Python-Skripten werden Workflows definiert, geplant und ausgeführt. Die gebotene Weboberfläche informiert den Anwender jederzeit über den Status der Workflowläufe und beschleunigt die Fehlerbehebung ungemein. Die umfangreiche Funktionalität überzeugt zudem Anwender in tausenden von Unternehmen. Einfach zu lernen - schwierig zu meistern: Gerade in der Anfangsphase besteht die Gefahr, einige Fallstricke zu übersehen. Diese sind jedoch vermeidbar! Wir möchten Ihnen aus diesem Grund mit diesem Beitrag unsere Apache Airflow Best Practices für das Workflowmanagement mitgeben.

Für diesen Artikel werden Kenntnisse über den grundsätzlichen Aufbau von Airflow vorausgesetzt. Wenn Ihnen die Begriffe Scheduler, Operator und DAG zunächst nichts sagen, lesen Sie gerne hier weiter oder werfen Sie einen Blick in unser Whitepaper zum Thema Apache Airflow 2.0.

 

  • Planen Sie Wartungen ein

Früher oder später kommt ein Moment in dem ein Workflow vorübergehend nicht ausführbar ist. Bei einer Systemumstellung oder Wartung ist beispielsweise die Datenquelle temporär nicht erreichbar. Über die Weboberfläche oder das CLI kann der Workflow einfach pausiert werden. Problematisch ist meistens der Wiedereinstieg. Standardmäßig werden verpasste Läufe nachgeholt, was zu einer Überlastung des Systems führen kann. Sollen die Workflowläufe nicht nachgeholt werden, empfiehlt sich die Verwendung des Parameters catchup=False in der Workflowkonfiguration und die Verwendung des LatestOnlyOperators als Workfloweinstieg, um nur den aktuellsten Lauf auszuführen. 

  • Halten Sie Ihre Workflow-Files aktuell

Die Versionierung und das Deployment von Programmcode ist in der IT ein ständig wiederkehrendes Thema. Da die Workflows in Airflow selbst mit Python-Code generiert werden, muss auch ein Weg gefunden werden, um diese aktuell zu halten. In der Praxis bietet sich auf einfachste Weise eine Synchronisation mit einem Git-Repository an. Airflow lädt die Dateien aus dem dags Ordner im Airflow-Verzeichnis. Dort kann ein Unterordner angelegt werden, der mit dem Git-Repo verknüpft ist. Die Synchronisierung selbst kann über einen Workflow mit einem BashOperator und dem entsprechenden pull-Request realisiert werden. Andere Dateien, die innerhalb eines Workflows benutzt werden, (im Machine Learning Bereich beispielsweise das Trainingsskript) sind auch über ein Git-Repository synchronisierbar. Der Pull-Request kann hier zu Beginn des Workflows stattfinden. 

  • Verschieben Sie das Data Processing in separate Skripte

Ein Workflow wird in der Python-Datei über ein DAG-Objekt angelegt. Dieses enthält die einzelnen Workflowschritte und regelt die Reihenfolge. Die eigentliche Arbeit findet dann innerhalb der Aufgaben während der Ausführung statt. Sehr oft sind jedoch wesentliche Schritte der Datenverarbeitung in der DAG-Datei angelegt, die eigentlich nur den Workflow definieren soll. Das ist problematisch, da die Datei innerhalb von Sekunden lesbar sein muss. Das Workflow-File wird in sehr kurzen Intervallen evaluiert, um die Änderungen direkt übertragen zu können.
Um die Datei schlank zu halten, bietet sich somit die Verwendung von Modulen an. Auf die importierten Funktionen kann mittels PythonOperator zugegriffen werden. Für ein vereinfachtes Anlegen, steht dann auch die TaskflowAPI seit Airflow 2.0 zur Verfügung.


Mit der TaskFlow-API lassen sich neue Workflows als Reihenschaltung von
Python-Funktionen leicht definieren

  • Nutzen Sie Variablen für mehr Flexibilität

In Airflow gibt es viele Wege die DAG-Objekte flexibler zu gestalten. Während der Laufzeit werden jedem Workflowlauf Kontext-Variablen übergeben. Hierzu zählen die Run-ID, das Ausführungsdatum und die Zeitpunkte des letzten und nächsten Laufes. Diese sind schnell in ein SQL-Statement integriert. So kann beispielsweise der Datenzeitraum an das eingestellte Ausführungsintervall angepasst werden. Airflow bietet eine zusätzliche Möglichkeit, Variablen in der Metadaten-Datenbank zu speichern. Diese sind über die Weboberfläche, die API und die CLI anpassbar. Hiermit kann zum Beispiel ein Dateipfad flexibel gehalten werden.
Praxistipp: Für jeden Aufruf einer Variable aus der Metadatenbank ist eine separate Connection erforderlich. Damit die Verbindungsanzahl nicht gesprengt wird, empfiehlt es sich, zusammengehörige Variablen als JSON-Objekt zu speichern.

Optimieren Sie Ihr Workflowmanagement
mit Apache Airflow

  • Haben Sie ein Auge auf die Zeit

Zeit spielt in Airflow die Hauptrolle. Die Ausführung sämtlicher Workflows ist präzise zeitgesteuert. Ironischerweise sorgt das Zeit-Konzept an mehreren Punkten für Verwirrung. Beispielsweise entspricht die Ausführungszeit (execution_time) nicht der wirklichen Laufzeit. Die execution time bezeichnet vielmehr den Startzeitstempel seiner Planungsperiode. Die eigentliche Laufzeit ist erst am Ende der Periode.
Beispiel: Ist der erste Lauf am 2021-01-01 um 09:00 geplant und soll alle 24h wiederholt werden, ist die erste Laufzeit am 2021-01-02 um 08:59. Problematisch kann diese Verschiebung sein, wenn die Ausführungszeit als Kontext-Variablen fehlerhaft in einem SQL Statement genutzt wird. Langfristig gesehen wird es in Apache Airflow eine Option geben, um zwischen der Ausführung am Anfang und am Ende eines Intervalls umzuschalten.

Praxistipp: Wenn zudem auf Dauer das gedankliche Umrechnen der UTC-Zeit aus der Weboberfläche zu anstrengend wird, gibt es seit Airflow 1.10.10 die Möglichkeit, in der Weboberfläche die benutzerbezogene Zeitzone einzustellen.

  • Setzen Sie Prioritäten

Sobald mehrere Workflows gleichzeitig um die Ausführung kämpfen, entstehen temporäre Engpässe. Welcher Workflow hierbei bevorzugt wird, kann mit den Parameter priority_weight gesteuert werden. Der Parameter wird pro einzelne Aufgabe gesetzt oder kann als Standardargument für den gesamten DAG übergeben werden. Die Latenzzeit beim Starten eines Workflows kann seit Airflow 2.0 zudem über mehrere Scheduler-Instanzen reduziert werden.

  • Definieren Sie Service Level Agreements (SLA)

In Airflow kann eine Zeit definiert werden, in der eine Aufgabe oder der gesamte Workflow erfolgreich durchgeführt werden muss. Falls diese Zeitschranke überschritten wird, werden die zuständigen Personen informiert und das Event in der Datenbank festgehalten. Auf dieser Basis kann nach Auffälligkeiten gesucht werden, die zu der Verzögerung geführt haben. Beispielsweise kann eine unüblich hohe Datenmenge vorliegen.

Noch nicht genug? In unserem Whitepaper haben wir für Sie weitere praktische Tipps für den Einsatz von Apache Airflow zusammengefasst. Wir helfen Ihnen gerne auch persönlich bei individuellen Fragen zur bestmöglichen Gestaltung Ihres Workflowmanagements. Sprechen Sie uns an und profitieren Sie von der umfangreichen Praxiserfahrung unserer Berater.