Managed Airflow (Gen 3) | Managed Airflow (Gen 2) | Managed Airflow (Legacy Gen 1)
Diese Seite enthält Schritte zur Fehlerbehebung und Informationen zu häufigen Problemen mit Airflow-Planern und DAG-Prozessoren.
Problemursache identifizieren
Ermitteln Sie zu Beginn der Fehlerbehebung, ob das Problem auftritt:
- Zur DAG-Parsing-Zeit, während der DAG von einem Airflow-DAG-Prozessor geparst wird
- Zur Ausführungszeit, während der DAG von einem Airflow-Planer verarbeitet wird
Weitere Informationen zur Parsing- und zur Ausführungszeit finden Sie unter Unterschied zwischen der DAG-Parsing-Zeit und der DAG-Ausführungszeit.
Probleme bei der DAG-Verarbeitung prüfen
Laufende und in der Warteschlange befindliche Aufgaben überwachen
So prüfen Sie, ob Aufgaben in einer Warteschlange hängen:
Rufen Sie in der Google Cloud Console die Seite Umgebungen auf.
Klicken Sie in der Liste der Umgebungen auf den Namen Ihrer Umgebung. Die Seite Umgebungsdetails wird geöffnet.
Rufen Sie den Tab Monitoring auf.
Prüfen Sie im Tab Monitoring das Diagramm Airflow-Aufgaben im Abschnitt DAG-Ausführungen und identifizieren Sie mögliche Probleme. Airflow-Aufgaben sind Aufgaben, die in Airflow in der Warteschlange stehen. Sie können entweder in die Warteschlange des Celery- oder des Kubernetes-Executor-Brokers gestellt werden. Aufgaben in der Celery-Warteschlange sind Aufgaben instanzen, die in die Celery-Broker-Warteschlange gestellt wurden.
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.
DAG-Parsing und -Planung in Managed Airflow (Legacy Gen 1) und Airflow 1
Die Effizienz des DAG-Parsing wurde in Airflow 2 erheblich verbessert. Wenn Leistungsprobleme im Zusammenhang mit DAG-Parsing und -Planung auftreten, sollten Sie zu Airflow 2 migrieren.
In Managed Airflow (Legacy Gen 1) wird der Planer auf Clusterknoten zusammen mit anderen Managed Airflow-Komponenten ausgeführt. Daher kann die Last einzelner Clusterknoten im Vergleich zu anderen Knoten höher oder niedriger sein. Die Leistung des Planers (DAG-Parsing und -Planung) kann je nach Knoten variieren, auf dem der Planer ausgeführt wird. Außerdem kann sich der Knoten, auf dem der Planer ausgeführt wird, aufgrund von Upgrade- oder Wartungsvorgängen ändern. Diese Einschränkung wurde in Managed Airflow (Gen 2) behoben. Dort können Sie dem Planer CPU- und Arbeitsspeicherressourcen zuweisen und die Leistung des Planers hängt nicht von der Last der Clusterknoten ab.
Anzahl und Zeitverteilung der Aufgaben
Bei der gleichzeitigen Planung einer großen Anzahl von DAGs oder Aufgaben kann es zu Problemen mit Airflow kommen. So vermeiden Sie Probleme bei der Planung:
- Passen Sie Ihre DAGs so an, dass sie eine kleinere Anzahl konsolidierter Aufgaben verwenden.
- Passen Sie die Zeitplanintervalle Ihrer DAGs an, um DAG-Ausführungen gleichmäßiger über die Zeit zu verteilen.
Airflow-Konfiguration skalieren
Airflow bietet Konfigurationsoptionen, die steuern, wie viele Aufgaben und DAGs es gleichzeitig ausführen kann. Um diese Konfigurationsoptionen festzulegen, überschreiben Sie deren Werte für Ihre Umgebung. Sie können einige dieser Werte auch auf DAG- oder Aufgabenebene festlegen.
-
Der Parameter
[celery]worker_concurrencysteuert 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 Managed Airflow-Umgebung multiplizieren, erhalten Sie die maximale Anzahl von Aufgaben, die zu einem bestimmten Zeitpunkt in Ihrer Umgebung ausgeführt werden können. Diese Zahl ist durch die Airflow-Konfigurationsoption[core]parallelismbegrenzt, die unten weiter beschrieben wird. Maximale Anzahl aktiver DAG-Ausführungen
Die Airflow-Konfigurationsoption
[core]max_active_runs_per_dagsteuert 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.
Sie können diesen Wert auch auf DAG-Ebene mit dem Parameter
max_active_runsfestlegen.Maximale Anzahl aktiver Aufgaben pro DAG
Die Airflow-Konfigurationsoption
[core]max_active_tasks_per_dagsteuert die maximale Anzahl an Aufgabeninstanzen, die pro DAG gleichzeitig ausgeführt werden können.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. In diesem Fall können Sie den Wert dieser Konfigurationsoption erhöhen.
Sie können diesen Wert auch auf DAG-Ebene mit dem Parameter
max_active_tasksfestlegen.Mit den Parametern
max_active_tis_per_dagundmax_active_tis_per_dagrunauf Aufgabenebene können Sie steuern, wie viele Instanzen mit einer bestimmten Aufgaben-ID pro DAG und pro DAG-Ausführung ausgeführt werden dürfen.Parallelität und Poolgröße
Die Airflow-Konfigurationsoption
[core]parallelismsteuert, 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. Managed Airflow-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]parallelismund die Konfigurationsoption[celery]worker_concurrencymultipliziert mit der Anzahl der Airflow-Worker definiert sind, noch nicht erreicht sind.Sie können die Poolgröße in der Airflow-UI konfigurieren (Administrator > Pools). Passen Sie die Poolgröße an das Maß an Parallelität an, das Sie in Ihrer Umgebung erwarten.
Normalerweise wird
[core]parallelismals Produkt aus der maximalen Anzahl von Workern und[celery]worker_concurrencyfestgelegt.
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.
DAG-Ausführungen werden nicht ausgeführt
Symptom:
Wenn ein Zeitplandatum für einen DAG dynamisch festgelegt wird, kann dies zu verschiedenen unerwarteten Nebenwirkungen führen. Beispiel:
Eine DAG-Ausführung liegt immer in der Zukunft und der DAG wird nie ausgeführt.
Vergangene DAG-Ausführungen werden als ausgeführt und erfolgreich markiert, obwohl sie nicht ausgeführt wurden.
Weitere Informationen finden Sie in der Apache Airflow-Dokumentation.
Mögliche Lösungen:
Folgen Sie den Empfehlungen in der Apache Airflow-Dokumentation.
Legen Sie ein statisches
start_datefür DAGs fest. Optional können Siecatchup=Falseverwenden, um die Ausführung des DAG für vergangene Termine zu deaktivieren.Verwenden Sie
datetime.now()oderdays_ago(<number of days>)nur, wenn Sie sich der Nebenwirkungen dieses Ansatzes bewusst sind.
TimeTable-Funktion des Airflow-Planers verwenden
Zeitpläne sind ab Airflow 2.2 verfügbar.
Sie können einen Zeitplan für einen DAG mit einer der folgenden Methoden definieren:
- Mit einer Python-Funktion
- (Nicht in Managed Airflow (Legacy Gen 1) verfügbar) Mit einem benutzerdefinierten Plug-in
Sie können auch integrierte Zeitpläne verwenden.
Eingeschränkte Clusterressourcen
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 Managed Airflow-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 updateBefehlen. Eine geringe Leistung der Airflow-Datenbank kann der Grund sein, warum der Planer langsam arbeitet.
Aufgabenplanung während Wartungsfenstern vermeiden
Sie können Wartungsfenster für Ihre Umgebung definieren, damit die Wartung der Umgebung außerhalb der Zeiten erfolgt, in denen Sie Ihre DAGs ausführen. Sie können Ihre DAGs weiterhin während der Wartungsfenster ausführen, solange es akzeptabel ist, dass einige Aufgaben unterbrochen und wiederholt werden können. Weitere Informationen dazu, wie sich Wartungsfenster auf Ihre Umgebung auswirken, finden Sie unter Wartungsfenster angeben.
Verwendung von "wait_for_downstream" in Ihren DAGs
Wenn Sie den Parameter wait_for_downstream in den DAGs auf True setzen, 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 dazu 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 bleibt, plant der Planer sie nach Ablauf der in der Airflow-Konfigurationsoption [scheduler]task_queued_timeout festgelegten Zeit noch einmal zur Ausführung ein. Der Standardwert ist 2400.
In Airflow-Versionen vor 2.3.1 wird die Aufgabe auch als fehlgeschlagen markiert und wiederholt, wenn sie für eine Wiederholung infrage kommt.
Eine Möglichkeit, die Symptome dieser Situation zu beobachten, ist das Diagramm mit der Anzahl der Aufgaben in der Warteschlange (Tab „Monitoring“ in der Managed Airflow-UI). Wenn die Spitzen in diesem Diagramm nicht innerhalb von etwa zwei Stunden sinken, werden die Aufgaben höchstwahrscheinlich neu geplant (ohne Logs). Danach werden in den Planer-Logs Logeinträge wie „Adopted tasks were still pending ...“ angezeigt. In solchen Fällen wird in den Airflow-Aufgaben-Logs möglicherweise die Meldung „Log file is not found...“ angezeigt, da die Aufgabe nicht ausgeführt wurde.
Im Allgemeinen ist dieses Verhalten zu erwarten und die nächste Instanz der geplanten Aufgabe soll gemäß Zeitplan ausgeführt werden. Wenn Sie viele solcher Fälle in Ihren Managed Airflow-Umgebungen beobachten, bedeutet das möglicherweise, dass nicht genügend Airflow-Worker in Ihrer Umgebung vorhanden sind, um alle geplanten Aufgaben zu verarbeiten.
Lösung: Damit dieses Problem behoben wird, muss dafür gesorgt werden, dass in Airflow-Workern immer Kapazität vorhanden ist, um Aufgaben in der Warteschlange auszuführen. Sie können beispielsweise die Anzahl der Worker oder die Worker-Gleichzeitigkeit erhöhen. Sie können auch die Parallelität oder Pools anpassen, um zu verhindern, dass mehr Aufgaben in die Warteschlange gestellt werden, als Sie Kapazität haben.
Ansatz von Managed Airflow für den Parameter min_file_process_interval
Managed Airflow ändert die Verwendung von
[scheduler]min_file_process_interval
durch den Airflow-Planer.
Airflow 1
Wenn Managed Airflow Airflow 1 verwendet, können Nutzer den Wert von [scheduler]min_file_process_interval zwischen 0 und 600 Sekunden festlegen. Werte über 600 Sekunden führen zu denselben Ergebnissen wie wenn [scheduler]min_file_process_interval auf 600 Sekunden gesetzt ist.
Airflow 2
In Managed Airflow-Versionen vor 1.19.9 wird [scheduler]min_file_process_interval ignoriert.
Managed Airflow-Versionen nach 1.19.9:
Der Airflow-Planer wird nach einer bestimmten Anzahl von Malen neu gestartet, wenn alle DAGs
geplant sind. Der [scheduler]num_runs Parameter
steuert, wie oft dies vom Planer ausgeführt wird. Wenn der Planer [scheduler]num_runs Planungsschleifen erreicht, wird er neu gestartet. Der Planer ist eine zustandslose Komponente und ein solcher Neustart ist ein Mechanismus zur automatischen Reparatur für alle Probleme, die beim Planer auftreten können. Der Standardwert von [scheduler]num_runs ist 5000.
Mit [scheduler]min_file_process_interval kann konfiguriert werden, wie oft das DAG-Parsing erfolgt. Dieser Parameter darf jedoch nicht länger sein als die Zeit, die ein Planer benötigt, um [scheduler]num_runs-Schleifen beim Planen Ihrer DAGs auszuführen.
Aufgaben nach Erreichen von dagrun_timeout als fehlgeschlagen markieren
Der Planer markiert Aufgaben, die nicht abgeschlossen sind (werden ausgeführt, geplant und in der Warteschlange)
als fehlgeschlagen, wenn eine DAG-Ausführung nicht innerhalb von
dagrun_timeout (ein DAG-Parameter) abgeschlossen wird.
Lösung:
Verlängern Sie
dagrun_timeout, um das Zeitlimit zu erreichen.
Symptome einer hohen Last der Airflow-Datenbank
Manchmal sehen Sie in den Airflow-Planer-Logs möglicherweise den folgenden Warnungsprotokolleintrag:
Scheduler heartbeat got an exception: (_mysql_exceptions.OperationalError) (2006, "Lost connection to MySQL server at 'reading initial communication packet', system error: 0")"
Ähnliche Symptome können auch in Airflow-Worker-Logs beobachtet werden:
Für MySQL:
(_mysql_exceptions.OperationalError) (2006, "Lost connection to MySQL server at
'reading initial communication packet', system error: 0")"
Für PostgreSQL:
psycopg2.OperationalError: connection to server at ... failed
Solche Fehler oder Warnungen können ein Symptom dafür sein, dass die Airflow-Datenbank durch die Anzahl der offenen Verbindungen oder die Anzahl der Abfragen, die gleichzeitig ausgeführt werden, überlastet ist. Dies kann durch Planer oder andere Airflow-Komponenten wie Worker, Triggerer und Webserver verursacht werden.
Mögliche Lösungen:
Skalieren Sie die Airflow-Datenbank, indem Sie den Maschinentyp der Cloud SQL-Instanz ändern , in der die Airflow-Datenbank Ihrer Umgebung gespeichert ist.
Verwenden Sie keine globalen Variablen in Airflow-DAGs. Verwenden Sie stattdessen Umgebungsvariablen und Airflow-Variablen.
Set
[scheduler]scheduler_heartbeat_secauf einen höheren Wert, z. B. 15 Sekunden oder mehr.Setzen Sie
[scheduler]job_heartbeat_secauf einen höheren Wert, z. B. 30 Sekunden oder mehr.Setzen Sie
[scheduler]scheduler_health_check_thresholdauf einen Wert, der dem Produkt aus[scheduler]job_heartbeat_secund4entspricht.
Webserver zeigt die Warnung „The scheduler does not appear to be running“ an
Der Planer meldet seinen Heartbeat regelmäßig an die Airflow-Datenbank. Anhand dieser Informationen ermittelt der Airflow-Webserver, ob der Planer aktiv ist.
Wenn der Planer stark ausgelastet ist, kann er seinen Heartbeat möglicherweise nicht alle
melden
[scheduler]scheduler_heartbeat_sec.
In einer solchen Situation zeigt der Airflow-Webserver möglicherweise die folgende Warnung an:
The scheduler does not appear to be running. Last heartbeat was received <X>
seconds ago.
Mögliche Lösungen:
Erhöhen Sie die CPU- und Arbeitsspeicherressourcen für den Planer.
Optimieren Sie Ihre DAGs, damit das Parsing und die Planung schneller erfolgen und nicht zu viele Ressourcen des Planers verbraucht werden.
Verwenden Sie keine globalen Variablen in Airflow-DAGs. Verwenden Sie stattdessen Umgebungsvariablen und Airflow-Variablen.
Erhöhen Sie den Wert der
[scheduler]scheduler_health_check_thresholdAirflow-Konfigurationsoption, damit der Webserver länger wartet, bevor er die Nichtverfügbarkeit des Planers meldet.
Problemumgehungen für Probleme, die beim Backfilling von DAGs auftreten
Manchmal möchten Sie möglicherweise DAGs noch einmal ausführen, die bereits ausgeführt wurden. Sie können dies mit einem Airflow-Befehlszeilenbefehl so tun:
Airflow 2
gcloud composer environments run \
ENVIRONMENT_NAME \
--location LOCATION \
dags backfill -- -B \
-s START_DATE \
-e END_DATE \
DAG_NAME
Wenn Sie nur fehlgeschlagene Aufgaben für einen bestimmten DAG noch einmal ausführen möchten, verwenden Sie auch das Argument --rerun-failed-tasks.
Airflow 1
gcloud composer environments run \
ENVIRONMENT_NAME \
--location LOCATION \
backfill -- -B \
-s START_DATE \
-e END_DATE \
DAG_NAME
Wenn Sie nur fehlgeschlagene Aufgaben für einen bestimmten DAG noch einmal ausführen möchten, verwenden Sie auch das Argument --rerun_failed_tasks.
Ersetzen Sie:
ENVIRONMENT_NAMEdurch den Namen der Umgebung.LOCATIONdurch die Region, in der sich die Umgebung befindet.START_DATEdurch einen Wert für den DAG-Parameterstart_dateim FormatYYYY-MM-DD.END_DATEdurch einen Wert für den DAG-Parameterend_dateim FormatYYYY-MM-DD.DAG_NAMEdurch den Namen des DAG.
Der Backfill-Vorgang kann manchmal zu einer Deadlock-Situation führen, in der ein Backfill nicht möglich ist, weil eine Aufgabe gesperrt ist. Beispiel:
2022-11-08 21:24:18.198 CET DAG ID Task ID Run ID Try number
2022-11-08 21:24:18.201 CET -------- --------- -------- ------------
2022-11-08 21:24:18.202 CET 2022-11-08 21:24:18.203 CET These tasks are deadlocked:
2022-11-08 21:24:18.203 CET DAG ID Task ID Run ID Try number
2022-11-08 21:24:18.204 CET ----------------------- ----------- ----------------------------------- ------------
2022-11-08 21:24:18.204 CET <DAG name> <Task name> backfill__2022-10-27T00:00:00+00:00 1
2022-11-08 21:24:19.249 CET Command exited with return code 1
...
2022-11-08 21:24:19.348 CET Failed to execute job 627927 for task backfill
In einigen Fällen können Sie die folgenden Problemumgehungen verwenden, um Deadlocks zu vermeiden:
Deaktivieren Sie den Mini-Planer, indem Sie überschreiben die
[core]schedule_after_task_executionaufFalse.Führen Sie Backfills für kleinere Zeiträume aus. Legen Sie beispielsweise
START_DATEundEND_DATEso fest, dass ein Zeitraum von nur einem Tag angegeben wird.