Probleme mit dem Airflow-Planer beheben

Cloud Composer 1 Cloud Composer 2

Diese Seite enthält Schritte zur Fehlerbehebung und Informationen zu häufigen Problemen bei Airflow-Planern.

Problemursache identifizieren

Ermitteln Sie zu Beginn der Fehlerbehebung, ob das Problem zur DAG-Parsing-Zeit oder bei der Verarbeitung von Aufgaben zur Ausführungszeit auftritt. Weitere Informationen zur Parsing- und zur Ausführungszeit finden Sie unter Unterschied zwischen der DAG-Parsing-Zeit und der DAG-Ausführungszeit.

DAG-Parsing-Zeiten prüfen

Führen Sie folgende Schritte aus, um festzustellen, ob das Problem beim DAG-Parsen auftritt.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Umgebungen auf.

    Zur Seite Umgebungen“

  2. Klicken Sie in der Liste der Umgebungen auf den Namen Ihrer Umgebung. Die Seite Umgebungsdetails wird geöffnet.

  3. Rufen Sie den Tab Monitoring auf.

  4. Prüfen Sie im Tab Monitoring das Diagramm Gesamte Parsing-Zeit für alle DAG-Dateien im Abschnitt DAG-Ausführungen und identifizieren Sie mögliche Probleme.

    Der Abschnitt „DAG-Ausführungen“ auf dem Tab „Monitoring“ von Composer zeigt Gesundheitsmesswerte für die DAGs in Ihrer Umgebung

gcloud

Verwenden Sie den list_dags-Befehl mit dem -r-Flag, um die Parsing-Zeit für alle DAGs anzuzeigen.

gcloud composer environments run ENVIRONMENT_NAME \
    --location LOCATION \
    list_dags -- -r

Ersetzen Sie:

  • ENVIRONMENT_NAME durch den Namen der Umgebung.
  • LOCATION durch die Region, in der sich die Umgebung befindet.

Die Ausgabe sieht dann ungefähr so aus:

-------------------------------------------------------------------
DagBag loading stats for /home/airflow/gcs/dags
-------------------------------------------------------------------
Number of DAGs: 5
Total task number: 13
DagBag parsing time: 0.6765180000000001
-----------+----------+---------+----------+-----------------------
file       | duration | dag_num | task_num | dags
-----------+----------+---------+----------+-----------------------
/dag_1.py  | 0.6477   |       1 |        2 | ['dag_1']
/dag_2.py  | 0.018652 |       1 |        2 | ['dag_2']
/dag_3.py  | 0.004024 |       1 |        6 | ['dag_3']
/dag_4.py  | 0.003476 |       1 |        2 | ['dag_4']
/dag_5.py  | 0.002666 |       1 |        1 | ['dag_5']
-----------+----------+---------+----------+-----------------------

Suchen Sie nach dem Wert DagBag-Parsing-Zeit. Ein hoher Wert kann darauf hinweisen, dass einer Ihrer DAGs nicht optimal implementiert ist. In der Ausgabetabelle können Sie ermitteln, welche DAGs eine lange Parsing-Zeit haben.

Laufende und in der Warteschlange befindliche Aufgaben überwachen

So prüfen Sie, ob Aufgaben in einer Warteschlange hängen:

  1. Rufen Sie in der Google Cloud Console die Seite Umgebungen auf.

    Zur Seite Umgebungen“

  2. Klicken Sie in der Liste der Umgebungen auf den Namen Ihrer Umgebung. Die Seite Umgebungsdetails wird geöffnet.

  3. Rufen Sie den Tab Monitoring auf.

  4. Sehen Sie sich auf dem Tab Monitoring das Diagramm Laufende und in der Warteschlange im Abschnitt DAG-Ausführungen an und suchen Sie nach möglichen Problemen.

Probleme zur DAG-Parsing-Zeit beheben

In folgenden Abschnitten werden Symptome und mögliche Lösungen für einige während der DAG-Parsing-Zeit häufig auftretende Probleme beschrieben.

Begrenzte Anzahl an Threads

Wenn Sie dem DAG-Prozessormanager, einem Teil des Planers, der DAG-Dateien verarbeitet, nur eine begrenzte Anzahl von Threads gestatten, kann sich dies auf die DAG-Parsing-Zeit auswirken.

Wenden Sie zur Behebung des Problems folgende Änderungen auf die Konfigurationsdatei "airflow.cfg" an:

  • Für Airflow 1.10.12 und frühere Versionen verwenden Sie den Parameter max_threads:

    [scheduler]
    max_threads = <NUMBER_OF_CORES_IN_MACHINE - 1>
    
  • Verwenden Sie für Airflow 1.10.14 und spätere Versionen den parsing_processes-Parameter:

    [scheduler]
    parsing_processes = <NUMBER_OF_CORES_IN_MACHINE - 1>
    

Ersetzen Sie NUMBER_OF_CORES_IN_MACHINE durch die Anzahl der Kerne auf den Maschinen der Worker-Knoten.

Anzahl und Zeitverteilung der Aufgaben

Airflow ist dafür bekannt, dass bei der Planung einer großen Zahl kleiner Aufgaben Probleme auftreten. In solchen Situationen sollten Sie eine kleinere Anzahl konsolidierter Aufgaben verwenden.

Die gleichzeitige Planung einer großen Zahl an DAGs oder Aufgaben kann ebenfalls zu Problemen führen. Um dieses Problem zu vermeiden, verteilen Sie Ihre Aufgaben gleichmäßiger über die Zeit.

Fehlerbehebung bei laufenden und in der Warteschlange befindlichen Aufgaben

In folgenden Abschnitten werden Symptome und mögliche Lösungen für einige bei laufenden und in der Warteschlange befindlichen Aufgaben häufig auftretenden Problemen beschrieben.

Die Aufgabenwarteschlangen sind zu lang

In einigen Fällen ist eine Aufgabenwarteschlange möglicherweise zu lang für den Planer. Informationen zum Optimieren von Worker- und Celery-Parametern finden Sie unter Cloud Composer-Umgebung mit Ihrem Unternehmen skalieren.

Eingeschränkte Clusterressourcen

Dieser Abschnitt gilt nur für Cloud Composer 1.

Wenn der GKE-Cluster Ihrer Umgebung zu klein ist, um alle DAGs und Aufgaben zu verarbeiten, können Leistungsprobleme auftreten. Versuchen Sie in diesem Fall eine der folgenden Lösungen:

  • Erstellen Sie eine neue Umgebung mit einem Maschinentyp, der mehr Leistung bietet, und migrieren Sie Ihre DAGs dorthin.
  • Erstellen Sie weitere Cloud Composer-Umgebungen und teilen Sie die DAGs zwischen ihnen auf.
  • Ändern Sie den Maschinentyp für GKE-Knoten wie unter Maschinentyp für GKE-Knoten aktualisieren beschrieben. Da dieses Verfahren fehleranfällig ist, ist es die am wenigsten empfohlene Option.
  • Führen Sie ein Upgrade des Maschinentyps der Cloud SQL-Instanz durch, auf der die Airflow-Datenbank in Ihrer Umgebung ausgeführt wird, z. B. mit den gcloud composer environments update-Befehlen. Die Leistung der Airflow-Datenbank kann der Grund sein, warum der Planer langsam ist.

Aufgabenplanung während Wartungsfenstern vermeiden

Sie können für Ihre Umgebung bestimmte Wartungsfenster definieren. In diesen Zeiträumen werden Wartungsereignisse für Cloud SQL und GKE ausgeführt.

So bestimmen Sie, dass der Airflow-Planer unnötige Dateien ignoriert:

Sie können die Leistung des Airflow-Planers verbessern, wenn Sie unnötige Dateien im DAGs-Ordner überspringen. Der Airflow-Planer ignoriert Dateien und Ordner, die in der Datei .airflowignore angegeben sind.

So bestimmen Sie, dass der Airflow-Planer unnötige Dateien ignoriert:

  1. Erstellen Sie eine .airflowignore-Datei.
  2. Listen Sie in dieser Datei Dateien und Ordner auf, die ignoriert werden sollen.
  3. Laden Sie diese Datei in den Ordner /dags in Ihrem Bucket hoch.

Weitere Informationen zum Dateiformat .airflowignore finden Sie in der Airflow-Dokumentation.

Airflow-Planer verarbeitet pausierte DAGs

Airflow-Nutzer pausieren DAGs, um ihre Ausführung zu vermeiden. Dies spart Airflow-Worker-Verarbeitungszyklen.

Der Airflow-Planer parst pausierte DAGs weiter. Wenn Sie die Leistung des Airflow-Planers wirklich verbessern möchten, verwenden Sie .airflowignore oder löschen Sie pausierte DAGs aus dem Ordner „DAGs“.

Verwendung von "wait_for_downstream" in Ihren DAGs

Wenn Sie den Parameter wait_for_downstream in den DAGs auf True festlegen, müssen, damit eine Aufgabe erfolgreich ist, alle Aufgaben, die in Bezug auf diese Aufgabe unmittelbar nachgelagert sind, ebenfalls erfolgreich ausgeführt werden. Dies bedeutet, dass die Ausführung von Aufgaben, die zu einer bestimmten DAG-Ausführung gehören, durch die Ausführung von Aufgaben aus der vorherigen DAG-Ausführung verlangsamt werden kann. Weitere Informationen hierzu finden Sie in der Airflow-Dokumentation.

Aufgaben, die zu lange in der Warteschlange stehen, werden abgebrochen und neu geplant

Wenn eine Airflow-Aufgabe zu lange in der Warteschlange gespeichert wird, wird der Planer als fehlgeschlagen/up_for_retry markiert und wird für die Ausführung noch einmal geplant. Eine Möglichkeit, die Symptome dieser Situation zu beobachten, besteht darin, sich das Diagramm mit der Anzahl der in der Warteschlange enthaltenen Aufgaben (Tab „Monitoring“) in der Cloud Composer-UI anzusehen. Wenn die Spitzen in diesem Diagramm nicht nach etwa 10 Minuten sinken, treten wahrscheinlich Fehler bei Aufgaben (ohne Logs) auf, gefolgt von „Logeinträgen sind ausstehend“. In solchen Fällen wird in Airflow-Aufgabenlogs möglicherweise die Meldung „Log file not found...“ nicht angezeigt, da die Aufgabe nicht ausgeführt wurde.

Dieser Aufgabenfehler ist im Allgemeinen erwartet und die nächste Instanz der geplanten Aufgabe soll gemäß dem Zeitplan ausgeführt werden. Wenn Sie in Ihren Cloud Composer-Umgebungen viele solcher Fälle beobachten, bedeutet dies möglicherweise, dass nicht genügend Airflow-Worker in Ihrer Umgebung vorhanden sind, um alle geplanten Aufgaben zu verarbeiten.

Lösung: Zur Lösung dieses Problems muss in Airflow-Workern immer eine Kapazität für die Ausführung von Aufgaben in der Warteschlange vorhanden sein. Sie können beispielsweise die Anzahl der Worker oder „worker_concurrency“ erhöhen. Sie können auch Parallelität oder Pools einstellen, um zu verhindern, dass Aufgaben in die Warteschlange gestellt werden, die über die verfügbare Kapazität hinausgehen.

Sporatisch können veraltete Aufgaben die Ausführung eines bestimmten DAG blockieren

Der Airflow-Planer sollte in der Lage sein, auch veraltete Aufgaben in der Warteschlange zu verarbeiten, und kann sie aus irgendeinem Grund nicht richtig ausführen (z.B. ein DAG, zu dem veraltete Aufgaben gehören).

Wenn diese veralteten Aufgaben nicht vom Planer gelöscht werden, müssen Sie sie möglicherweise manuell löschen. Rufen Sie dazu beispielsweise in der Airflow-UI den Befehl Menu > Browser > Taskinstanzen auf. Dort können Sie Aufgaben in der Warteschlange suchen, die zu einem veralteten DAG gehören.

Cloud Composer-Ansatz für den Parameter „min_file_process_interval“

Cloud Composer ändert die Verwendung von min_file_process_interval durch den Airflow-Planer.

Bei Cloud Composer mit Airflow 1 können Nutzer den Wert für min_file_process_interval zwischen 0 und 600 Sekunden festlegen. Werte über 600 Sekunden bringen dieselben Ergebnisse wie min_file_process_interval, wenn der Wert auf 600 Sekunden festgelegt ist.

Bei Cloud Composer mit Airflow 2 haben Nutzer die Möglichkeit, für min_file_process_interval einen Wert zwischen 0 und 1.200 Sekunden festzulegen. Werte über 1.200 Sekunden bringen dieselben Ergebnisse wie min_file_process_interval, wenn der Wert auf 1.200 Sekunden festgelegt ist.

Airflow-Konfiguration skalieren

Airflow bietet Konfigurationsoptionen, die steuern, wie viele Aufgaben und DAGs es gleichzeitig ausführen kann. Wenn Sie diese Konfigurationsoptionen festlegen möchten, überschreiben Sie deren Werte für Ihre Umgebung.

  • Worker-Gleichzeitigkeit

    Der Parameter [celery]worker_concurrency steuert die maximale Anzahl von Aufgaben, die ein Airflow-Worker gleichzeitig ausführen kann. Wenn Sie den Wert dieses Parameters mit der Anzahl der Airflow-Worker in Ihrer Cloud Composer-Umgebung multiplizieren, erhalten Sie die maximale Anzahl von Aufgaben, die zu einem bestimmten Zeitpunkt in Ihrer Umgebung ausgeführt werden können. Diese Zahl wird durch die Airflow-Konfigurationsoption [core]parallelism eingeschränkt, die weiter unten beschrieben wird.

  • Maximale Anzahl aktiver DAG-Ausführungen

    Die Airflow-Konfigurationsoption [core]max_active_runs_per_dag steuert die maximale Anzahl aktiver DAG-Ausführungen pro DAG. Der Planer erstellt keine weiteren DAG-Ausführungen, wenn das Limit erreicht ist.

    Ist dieser Parameter falsch eingestellt, kann ein Problem auftreten, bei dem der Planer die DAG-Ausführung drosselt, da er zu einer bestimmten Zeit keine DAG-Ausführungsinstanzen mehr erstellen kann.

  • DAG-Gleichzeitigkeit

    Die Airflow-Konfigurationsoption [core]dag_concurrency steuert die maximale Anzahl an Aufgabeninstanzen, die pro DAG gleichzeitig ausgeführt werden können. Dies ist ein Parameter auf DAG-Ebene.

    Ist dieser Parameter falsch festgelegt, kann ein Problem auftreten, bei dem die Ausführung einer einzelnen DAG-Instanz langsam läuft, da nur eine begrenzte Anzahl an DAG-Aufgaben zu einer bestimmten Zeit ausgeführt werden können.

  • Parallelität und Poolgröße

    Die Airflow-Konfigurationsoption [core]parallelism steuert, wie viele Aufgaben der Airflow-Planer in die Warteschlange des Executors stellen kann, nachdem alle Abhängigkeiten für diese Aufgaben erfüllt wurden.

    Dies ist ein globaler Parameter für die gesamte Airflow-Einrichtung.

    Aufgaben werden in die Warteschlange gestellt und in einem Pool ausgeführt. Cloud Composer-Umgebungen verwenden nur einen Pool. Die Größe dieses Pools steuert, wie viele Aufgaben der Planer in einem bestimmten Moment zur Ausführung in die Warteschlange stellen kann. Wenn die Poolgröße zu klein ist, kann der Planer Aufgaben nicht für die Ausführung in die Warteschlange stellen, auch wenn Grenzwerte, die durch die Konfigurationsoption [core]parallelism und die Konfigurationsoption [celery]worker_concurrency multipliziert mit der Anzahl der Airflow-Worker definiert sind, noch nicht erreicht sind.

    Sie können die Poolgröße in der Airflow-UI konfigurieren (Menü > Administrator > Pools). Passen Sie die Poolgröße an das Maß an Parallelität an, das Sie in Ihrer Umgebung erwarten.

Anzeichen für Airflow-Datenbanken beim Druck der Uder

In den Airflow-Planerprotokollen kann es zu folgenden Warnungen kommen

Scheduler heartbeat got an exception: (_mysql_exceptions.OperationalError) (2006, "Lost connection to MySQL server at 'reading initial communication packet', system error: 0")"

Ein solcher Fehler oder eine solche Warnung könnte ein Symptom der Airflow-Metadaten-Datenbank sein, die mit Vorgängen überlastet ist.

Mögliche Lösungen:

Weitere Informationen