Fehlerbehebung bei DAGs

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

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

Viele Probleme bei der DAG-Ausführung sind auf eine nicht optimale Umgebungsleistung zurückzuführen. Sie können Ihre Cloud Composer 2-Umgebung optimieren, indem Sie der Anleitung Optimize Leitfaden zu Umgebungsleistung und -kosten.

Einige Probleme bei der DAG-Ausführung können durch den Airflow-Planer verursacht werden nicht richtig oder optimal funktioniert. Bitte folgen Sie Anleitung zur Fehlerbehebung für den Planer um diese Probleme zu lösen.

Fehlerbehebung beim Workflow

So beginnen Sie mit der Fehlerbehebung:

  1. Prüfen Sie die Airflow-Logs.

    Sie können die Logging-Ebene von Airflow erhöhen, indem Sie die folgenden Airflow-Konfigurationsoption.

    Airflow 2

    Bereich Schlüssel Wert
    logging logging_level Der Standardwert ist INFO. Legen Sie DEBUG fest, um die Ausführlichkeit von Logeinträgen zu erhöhen.

    Airflow 1

    Bereich Schlüssel Wert
    core logging_level Der Standardwert ist INFO. Legen Sie DEBUG fest, um die Ausführlichkeit von Logeinträgen zu erhöhen.
  2. Prüfen Sie das Monitoring-Dashboard.

  3. Machen Sie sich mit Cloud Monitoring vertraut.

  4. Suchen Sie in der Google Cloud Console auf den Seiten für Komponenten Ihrer Umgebung.

  5. Prüfen Sie in der Airflow-Weboberfläche in der Diagrammansicht des DAG, ob Aufgabeninstanzen fehlgeschlagen sind.

    Bereich Schlüssel Wert
    webserver dag_orientation LR, TB, RL oder BT

Fehlerbehebung bei Operatorfehlern

So beheben Sie Operatorfehler:

  1. Suchen Sie nach aufgabenspezifischen Fehlern.
  2. Prüfen Sie die Airflow-Logs.
  3. Cloud Monitoring ansehen
  4. Prüfen Sie die anbieterspezifischen Protokolle.
  5. Beheben Sie die Fehler.
  6. Laden Sie den DAG in den Ordner dags/ hoch.
  7. Löschen Sie in der Airflow-Weboberfläche die vergangenen Status für den DAG.
  8. Setzen Sie den DAG fort oder führen Sie ihn aus.

Fehlerbehebung bei der Ausführung von Aufgaben

Airflow ist ein verteiltes System mit vielen Entitäten wie Scheduler, Executor und Workern, die über eine Task-Warteschlange und die Airflow-Datenbank miteinander kommunizieren und Signale senden (z. B. SIGTERM). Das folgende Diagramm zeigt eine Übersicht über die Verbindungen zwischen Airflow-Komponenten.

Interaktion zwischen Airflow-Komponenten
Abbildung 1. Interaktion zwischen Airflow-Komponenten (zum Vergrößern klicken)

In einem verteilten System wie Airflow gibt es möglicherweise oder bei der zugrunde liegenden Infrastruktur zeitweise Probleme auftreten. kann dies dazu führen, dass Aufgaben fehlschlagen und oder Aufgaben nicht erfolgreich abgeschlossen werden (z. B. Zombie- oder Aufgaben, deren Ausführung hängengeblieben ist). Airflow bietet Mechanismen, um mit solchen Situationen umzugehen und den normalen Betrieb automatisch wieder aufzunehmen. Folge ich werden häufige Probleme bei der Ausführung von Aufgaben mit Airflow erläutert: Zombie-Aufgaben, Giftpillen und SIGTERM-Signale.

Fehlerbehebung bei Zombie-Aufgaben

Airflow erkennt zwei Arten von Diskrepanzen zwischen einer Aufgabe und einem Prozess, der ausgeführt wird die Aufgabe:

  • Zombie-Aufgaben sind Aufgaben, die eigentlich ausgeführt werden sollten, aber nicht ausgeführt wird. Dies kann passieren, wenn der Prozess der Aufgabe beendet wurde oder nicht reagiert, wenn der Airflow-Worker aufgrund einer Überlastung nicht rechtzeitig einen Aufgabenstatus meldet oder wenn die VM, auf der die Aufgabe ausgeführt wird, heruntergefahren wurde. Airflow findet solche Aufgaben regelmäßig und schlägt entweder fehl oder wiederholt die Aufgabe. je nach den Einstellungen der Aufgabe.

    Entdecke die Zombie-Aufgaben

    resource.type="cloud_composer_environment"
    resource.labels.environment_name="ENVIRONMENT_NAME"
    log_id("airflow-scheduler")
    textPayload:"Detected zombie job"
  • Undead-Tasks sind Aufgaben, die nicht ausgeführt werden sollten. Airflow findet solche Aufgaben regelmäßig und beendet sie.

Die häufigsten Gründe und Lösungen für Zombie-Aufgaben sind unten aufgeführt.

Nicht genügend Arbeitsspeicher für Airflow-Worker

Jeder Airflow-Worker könnte bis zu [celery]worker_concurrency Aufgabeninstanzen ausführen gleichzeitig. Wenn die kumulative Arbeitsspeichernutzung dieser Aufgabeninstanzen das Arbeitsspeicherlimit für einen Airflow-Worker überschreitet, wird ein zufälliger Prozess darauf beendet, um Ressourcen freizugeben.

Ereignisse mit unzureichendem Arbeitsspeicher für Airflow-Worker ermitteln

resource.type="k8s_node"
resource.labels.cluster_name="GKE_CLUSTER_NAME"
log_id("events")
jsonPayload.message:"Killed process"
jsonPayload.message:("airflow task" OR "celeryd")

Lösungen:

Airflow-Worker wurde entfernt

Pod-Bereinigungen sind ein normaler Teil der Ausführung von Arbeitslasten in Kubernetes. GKE entfernt Pods, wenn kein Speicherplatz mehr vorhanden ist oder sie freigegeben werden. und Ressourcen für Arbeitslasten mit höherer Priorität bereitstellen.

Airflow-Worker-Bereinigungen erkennen

resource.type="k8s_pod"
resource.labels.cluster_name="GKE_CLUSTER_NAME"
resource.labels.pod_name:"airflow-worker"
log_id("events")
jsonPayload.reason="Evicted"

Lösungen:

  • Wenn eine Auslagerung auf einen Mangel an Speicherplatz zurückzuführen ist, können Sie die Speichernutzung reduzieren oder temporäre Dateien entfernen, sobald sie nicht mehr benötigt werden. Alternativ können Sie den verfügbaren Speicherplatz erhöhen oder Arbeitslasten in einem speziellen Pod mit KubernetesPodOperator ausführen.

Airflow-Worker wurde beendet

Airflow-Worker können extern entfernt werden. Wenn derzeit ausgeführte Aufgaben während der ordnungsgemäßen Beendigung nicht abgeschlossen werden, werden sie unterbrochen und können als Zombies erkannt werden.

Beendigungen von Airflow-Worker-Pods ermitteln

resource.type="k8s_cluster"
resource.labels.cluster_name="GKE_CLUSTER_NAME"
protoPayload.methodName:"pods.delete"
protoPayload.response.metadata.name:"airflow-worker"

Mögliche Szenarien und Lösungen:

  • Airflow-Worker werden bei Umgebungsänderungen neu gestartet, z. B. Upgrades oder Paketinstallation:

    Änderungen an Composer-Umgebungen erkennen

    resource.type="cloud_composer_environment"
    resource.labels.environment_name="ENVIRONMENT_NAME"
    log_id("cloudaudit.googleapis.com%2Factivity")

    Sie können solche Vorgänge ausführen, wenn keine kritischen Aufgaben ausgeführt werden, oder Wiederholungsversuche von Aufgaben.

  • Während der Wartungsarbeiten sind verschiedene Komponenten möglicherweise vorübergehend nicht verfügbar:

    GKE-Wartungsvorgänge entdecken

    resource.type="gke_nodepool"
    resource.labels.cluster_name="GKE_CLUSTER_NAME"
    protoPayload.metadata.operationType="UPGRADE_NODES"

    Sie können Wartungsfenster angeben, um Überschneidungen mit der Ausführung kritischer Aufgaben zu minimieren.

  • In Cloud Composer 2-Versionen vor 2.4.5: ein beendeter Airflow kann der Worker das SIGTERM-Signal ignorieren und mit der Ausführung von Aufgaben fortfahren:

    Herunterskalierung durch Composer-Autoscaling

    resource.type="cloud_composer_environment"
    resource.labels.environment_name="ENVIRONMENT_NAME"
    log_id("airflow-worker-set")
    textPayload:"Workers deleted"

    Sie können ein Upgrade auf eine neuere Cloud Composer-Version durchführen, bei der diese wurde behoben.

Airflow-Worker war stark ausgelastet

Die Menge der CPU- und Arbeitsspeicherressourcen, die für einen Airflow-Worker verfügbar sind, wird durch die Konfiguration der Umgebung begrenzt. Wenn die Auslastung den Grenzwerten näher kommt, kommt es zu Ressourcenkonflikten und unnötigen Verzögerungen bei der Ausführung der Aufgabe. In extremen Fällen, wenn über einen längeren Zeitraum hinweg Ressourcen fehlen, kann dies zu Zombie-Aufgaben führen.

Lösungen:

Airflow-Datenbank war stark ausgelastet

Eine Datenbank wird von verschiedenen Airflow-Komponenten verwendet, um miteinander zu kommunizieren. um Heartbeats von Aufgabeninstanzen zu speichern. Ressourcenmangel auf der führen zu längeren Abfragezeiten und können die Ausführung von Aufgaben beeinträchtigen.

Lösungen:

Airflow-Datenbank vorübergehend nicht verfügbar

Es kann einige Zeit dauern, bis ein Airflow-Worker sporadische Fehler wie vorübergehende Verbindungsprobleme erkennt und ordnungsgemäß verarbeitet. Möglicherweise wird der Standardwert überschritten Schwellenwert für die Zombie-Erkennung.

Airflow-Zeitüberschreitungen für Heartbeats ermitteln

resource.type="cloud_composer_environment"
resource.labels.environment_name="ENVIRONMENT_NAME"
log_id("airflow-worker")
textPayload:"Heartbeat time limit exceeded"

Lösungen:

  • Erhöhen Sie das Zeitlimit für Zombie-Aufgaben und überschreiben Sie Wert von [scheduler]scheduler_zombie_task_threshold Airflow-Konfigurationsoption:

    Bereich Schlüssel Wert Hinweise
    scheduler scheduler_zombie_task_threshold Neu Zeitlimit (in Sekunden) Standardeinstellung Wert ist 300

Fehlerbehebung bei Poison Pill

Poison Pill ist ein Mechanismus, mit dem Airflow-Aufgaben in Airflow beendet werden.

In folgenden Fällen wird in Airflow die Poison Pill verwendet:

  • Wenn ein Scheduler eine Aufgabe beendet, die nicht rechtzeitig abgeschlossen wurde.
  • Wenn bei einer Aufgabe ein Zeitlimit überschritten wird oder die Ausführung zu lange dauert.

Wenn in Airflow die Poison Pill verwendet wird, sehen Sie in den Logs eines Airflow-Workers, der die Aufgabe ausgeführt hat, die folgenden Logeinträge:

  INFO - Subtask ... WARNING - State of this instance has been externally set
  to success. Taking the poison pill.
  INFO - Subtask ... INFO - Sending Signals.SIGTERM to GPID <X>
  INFO - Subtask ... ERROR - Received SIGTERM. Terminating subprocesses.

Mögliche Lösungen:

  • Prüfen Sie den Aufgabencode auf Fehler, die dazu führen könnten, dass die Ausführung zu lange dauert.
  • (Cloud Composer 2) Erhöhen Sie die CPU und den Arbeitsspeicher für Airflow damit Aufgaben schneller ausgeführt werden.
  • Erhöhen Sie den Wert der Airflow-Konfiguration für [celery_broker_transport_options]visibility-timeout Option.

    Daher wartet der Planer länger auf den Abschluss einer Aufgabe. bevor er sie als Zombieaufgabe erachtet. Diese Option ist besonders für zeitaufwendige Aufgaben geeignet, die viele Stunden dauern. Wenn wenn der Wert zu niedrig ist (z. B. 3 Stunden), berücksichtigt der Planer Aufgaben, die 5 oder 6 Stunden lang als „aufgehängt“ ausgeführt werden (Zombie-Aufgaben).

  • Wert von [core]killed_task_cleanup_time-Airflow erhöhen Konfigurationsoption.

    Mit einem längeren Wert haben Airflow-Worker mehr Zeit für die Ausführung ihrer Aufgaben. anmutig. Ist der Wert zu niedrig, werden Airflow-Aufgaben möglicherweise abrupt unterbrochen, ohne dass sie ordnungsgemäß abgeschlossen werden können.

Fehlerbehebung bei SIGTERM-Signalen

SIGTERM-Signale werden von Linux verwendet, Kubernetes, Airflow-Planer und Celery, um Prozesse zu beenden, die für oder Airflow-Workern oder Airflow-Tasks.

Es kann mehrere Gründe dafür geben, dass SIGTERM-Signale in einer Umgebung gesendet werden:

  • Eine Aufgabe ist zu einer Zombie-Aufgabe geworden und muss beendet werden.

  • Der Planer entdeckt ein Duplikat einer Aufgabe und schickt die Giftpille und SIGTERM signalisiert der Aufgabe, sie zu stoppen.

  • Unter Horizontales Pod-Autoscaling hat die GKE Die Steuerungsebene sendet SIGTERM-Signale, um nicht mehr vorhandene Pods zu entfernen erforderlich.

  • Der Planer kann SIGTERM-Signale an den DagFileProcessorManager-Prozess senden. Solche SIGTERM-Signale werden vom Planer zur Verwaltung DagFileProcessorManager-Prozesslebenszyklus und kann ignoriert werden.

    Beispiel:

    Launched DagFileProcessorManager with pid: 353002
    Sending Signals.SIGTERM to group 353002. PIDs of all processes in the group: []
    Sending the signal Signals.SIGTERM to group 353002
    Sending the signal Signals.SIGTERM to process 353002 as process group is missing.
    
  • Race Condition zwischen dem Heartbeat-Callback und den Exit-Callbacks in local_task_job, der die Ausführung der Aufgabe überwacht. Wenn der Heartbeat erkennt, dass eine Aufgabe als erfolgreich markiert wurde, kann nicht unterschieden werden, ob die Aufgabe selbst erfolgreich war oder ob Airflow angewiesen wurde, die Aufgabe als erfolgreich zu betrachten. Trotzdem wird ein Task-Runner beendet, ohne auf das Ende zu warten.

    Solche SIGTERM-Signale können ignoriert werden. Die Aufgabe befindet sich bereits im und die Ausführung des gesamten DAG wird nicht betroffen sind.

    Der Logeintrag Received SIGTERM. ist der einzige Unterschied zwischen dem regulären Beenden und dem Beenden der Aufgabe im Status „Erfolgreich“.

    Race-Bedingung zwischen Heartbeat und Exit-Callbacks
    Abbildung 2: Race Condition zwischen dem Heartbeat und dem Exit-Callback (zum Vergrößern anklicken)
  • Eine Airflow-Komponente nutzt mehr Ressourcen (CPU, Arbeitsspeicher) als vom Clusterknoten.

  • Der GKE-Dienst führt Wartungsvorgänge sendet SIGTERM-Signale an Pods, die auf einem Knoten ausgeführt werden, der demnächst aktualisiert werden soll. Wenn eine Aufgabeninstanz mit SIGTERM beendet wird, sehen Sie in den Logs eines Airflow-Workers, der die Aufgabe ausgeführt hat, die folgenden Logeinträge:

{local_task_job.py:211} WARNING - State of this instance has been externally
set to queued. Terminating instance. {taskinstance.py:1411} ERROR - Received
SIGTERM. Terminating subprocesses. {taskinstance.py:1703} ERROR - Task failed
with exception

Mögliche Lösungen:

Dieses Problem tritt auf, wenn einer VM, auf der die Aufgabe ausgeführt wird, nicht genügend Arbeitsspeicher zur Verfügung steht. Dies hängt nicht mit Airflow-Konfigurationen zusammen, sondern mit der für die VM verfügbaren Arbeitsspeichermenge.

Ob Sie den Arbeitsspeicher erhöhen können, hängt von der verwendeten Cloud Composer-Version ab. Beispiel:

  • In Cloud Composer 2 können Sie Airflow-Workern mehr CPU- und Arbeitsspeicherressourcen zuweisen.

  • Bei Cloud Composer 1 können Sie Ihre Umgebung mit einem leistungsstärkeren Maschinentyp neu erstellen.

  • In beiden Versionen von Cloud Composer können Sie den Wert der Airflow-Konfigurationsoption [celery]worker_concurrency für die Parallelität senken. Diese Option bestimmt, wie viele Aufgaben gleichzeitig von einer bestimmten Airflow-Worker

Weitere Informationen zum Optimieren Ihrer Cloud Composer 2-Umgebung finden Sie unter Umgebungsleistung und ‑kosten optimieren.

Cloud Logging-Abfragen zur Ermittlung von Gründen für Pod-Neustarts oder -Bereinigungen

In Cloud Composer-Umgebungen werden GKE-Cluster als Compute-Infrastrukturebene verwendet. In diesem Abschnitt finden Sie nützliche Abfragen, mit denen Sie die Gründe für Neustarts oder Auslagerungen von Airflow-Workern oder Airflow-Planern ermitteln können.

Die unten dargestellten Abfragen könnten folgendermaßen optimiert werden:

  • Sie können in Cloud Logging einen für Sie interessanten Zeitraum angeben, z. B. die letzten 6 Stunden oder 3 Tage. Sie können auch einen benutzerdefinierten Zeitraum festlegen.

  • Sie sollten die CLUSTER_NAME

  • Sie können die Suche auch auf einen bestimmten Pod beschränken, indem Sie das Symbol POD_NAME

Neu gestartete Container ermitteln

    resource.type="k8s_node"
    log_id("kubelet")
    jsonPayload.MESSAGE:"will be restarted"
    resource.labels.cluster_name="CLUSTER_NAME"
  

Alternative Abfrage, um die Ergebnisse auf einen bestimmten Pod zu beschränken:

    resource.type="k8s_node"
    log_id("kubelet")
    jsonPayload.MESSAGE:"will be restarted"
    resource.labels.cluster_name="CLUSTER_NAME"
    "POD_NAME"
  

Container, die aufgrund eines OOM-Ereignisses heruntergefahren wurden, ermitteln

    resource.type="k8s_node"
    log_id("events")
    (jsonPayload.reason:("OOMKilling" OR "SystemOOM")
      OR jsonPayload.message:("OOM encountered" OR "out of memory"))
    severity=WARNING
    resource.labels.cluster_name="CLUSTER_NAME"
    

Alternative Abfrage, um die Ergebnisse auf einen bestimmten Pod zu beschränken:

    resource.type="k8s_node"
    log_id("events")
    (jsonPayload.reason:("OOMKilling" OR "SystemOOM")
      OR jsonPayload.message:("OOM encountered" OR "out of memory"))
    severity=WARNING
    resource.labels.cluster_name="CLUSTER_NAME"
    "POD_NAME"
    

Container finden, deren Ausführung beendet wurde

    resource.type="k8s_node"
    log_id("kubelet")
    jsonPayload.MESSAGE:"ContainerDied"
    severity=DEFAULT
    resource.labels.cluster_name="CLUSTER_NAME"
    

Alternative Abfrage, um die Ergebnisse auf einen bestimmten Pod zu beschränken:

    resource.type="k8s_node"
    log_id("kubelet")
    jsonPayload.MESSAGE:"ContainerDied"
    severity=DEFAULT
    resource.labels.cluster_name="CLUSTER_NAME"
    "POD_NAME"
    

Auswirkungen von Aktualisierungs- oder Upgradevorgängen auf die Ausführung von Airflow-Aufgaben

Durch Aktualisierungs- oder Upgradevorgänge werden aktuell ausgeführte Airflow-Aufgaben unterbrochen, es sei denn, eine Aufgabe wird im deferrable-Modus ausgeführt.

Wir empfehlen, diese Vorgänge auszuführen, wenn Sie mit minimalen Auswirkungen auf die Ausführung von Airflow-Aufgaben rechnen, und entsprechende Wiederholungsmechanismen in Ihren DAGs und Aufgaben einzurichten.

Fehlerbehebung bei KubernetesExecutor-Aufgaben

CeleryKubernetesExecutor ist ein Executor-Typ in Cloud Composer 3, der CeleryExecutor und KubernetesExecutor gleichzeitig verwenden kann.

Weitere Informationen zur Fehlerbehebung bei Aufgaben, die mit KubernetesExecutor ausgeführt werden, finden Sie auf der Seite CeleryKubernetesExecutor verwenden.

Allgemeine Probleme

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

Airflow-Task wurde von Negsignal.SIGKILL unterbrochen

Manchmal benötigt Ihre Aufgabe mehr Arbeitsspeicher als dem Airflow-Worker zugewiesen ist. In einem solchen Fall wird die Übertragung möglicherweise von Negsignal.SIGKILL unterbrochen. Das System sendet dieses Signal, um einen weiteren Speicherverbrauch zu vermeiden, der sich auf anderer Airflow-Aufgaben ausgeführt werden. Im Log des Airflow-Workers sehen Sie folgenden Logeintrag:

{local_task_job.py:102} INFO - Task exited with return code Negsignal.SIGKILL

Negsignal.SIGKILL kann auch als Code -9 angezeigt werden.

Mögliche Lösungen:

  • Verringern Sie worker_concurrency der Airflow-Worker.

  • Erhöhen Sie im Fall von Cloud Composer 2 den Arbeitsspeicher der Airflow-Worker.

  • Führen Sie für Cloud Composer 1 ein Upgrade auf einen größeren Maschinentyp aus, der in Cloud Composer-Cluster.

  • Optimieren Sie Ihre Aufgaben, um weniger Arbeitsspeicher zu verbrauchen.

  • Verwalten Sie ressourcenintensive Aufgaben in Cloud Composer mit KubernetesPodOperator oder GKEStartPodOperator für Aufgabenisolierung und benutzerdefinierte Ressourcenzuweisung.

Aufgabe schlägt fehl, ohne Logs aufgrund von DAG-Parsing-Fehlern auszugeben

Manchmal können subtile DAG-Fehler auftreten, Ein Airflow-Planer und DAG-Prozessor können Aufgaben für die Ausführung planen und eine DAG-Datei zu parsen, aber der Airflow-Worker kann Aufgaben nicht ausführen aus einem solchen DAG, da es Programmierfehler in der Python-DAG-Datei gibt. Dies kann dazu führen, dass eine Airflow-Aufgabe als Failed gekennzeichnet ist und es kein Protokoll ihrer Ausführung gibt.

Lösungen:

  • Prüfen Sie in den Airflow-Worker-Logs, ob vom Airflow-Worker keine Fehler im Zusammenhang mit fehlenden DAGs oder DAG-Parsing-Fehlern gemeldet werden.

  • Erhöhen Sie die Parameter für das DAG-Parsing:

    • Erhöhen Sie dagbag-import-timeout auf mindestens 120 Sekunden (bei Bedarf auch mehr).

    • Erhöhung dag-file-processor-timeout auf mindestens 180 Sekunden (oder mehr, falls erforderlich). Dieser Wert muss höher als dagbag-import-timeout.

  • Siehe auch DAG-Prozessor-Logs prüfen.

Aufgabe schlägt fehl, ohne dass Logs aufgrund von Ressourcenmangel ausgegeben werden

Symptom: Während der Ausführung einer Aufgabe wird der für die Ausführung der Airflow-Aufgabe zuständige Unterprozess des Airflow-Workers abrupt unterbrochen. Der im Airflow-Worker-Log sichtbare Fehler sieht möglicherweise so aus:

...
File "/opt/python3.8/lib/python3.8/site-packages/celery/app/trace.py", line 412, in trace_task    R = retval = fun(*args, **kwargs)  File "/opt/python3.8/lib/python3.8/site-packages/celery/app/trace.py", line 704, in __protected_call__    return self.run(*args, **kwargs)  File "/opt/python3.8/lib/python3.8/site-packages/airflow/executors/celery_executor.py", line 88, in execute_command    _execute_in_fork(command_to_exec)  File "/opt/python3.8/lib/python3.8/site-packages/airflow/executors/celery_executor.py", line 99, in _execute_in_fork
raise AirflowException('Celery command failed on host: ' + get_hostname())airflow.exceptions.AirflowException: Celery command failed on host: airflow-worker-9qg9x
...

Lösung:

Aufgabe schlägt fehl, ohne Logs auszugeben, da Pod entfernt wurde

Google Kubernetes Engine-Pods unterliegen dem Kubernetes-Pod-Lebenszyklus und der Pod-Bereinigung. Aufgabe Spitzen und eine gemeinsame Planung von Workern sind zwei der häufigsten Ursachen für die Bereinigung von Pods in Cloud Composer.

Eine Pod-Bereinigung kann auftreten, wenn ein bestimmter Pod Ressourcen eines Knotens relativ zu den konfigurierten Erwartungen in Sachen Ressourcenverbrauch für den Knoten übernutzt. Beispiel: Eine Bereinigung kann auftreten, wenn mehrere speicherintensive Aufgaben in einem Pod ausgeführt werden und ihre kombinierte Last dazu führt, dass der Knoten, auf dem dieser Pod ausgeführt wird, das Limit für den Arbeitsspeicherverbrauch überschreitet.

Wenn ein Airflow-Worker-Pod bereinigt wird, werden alle auf diesem Pod ausgeführten Aufgabeninstanzen unterbrochen und später von Airflow als fehlgeschlagen markiert.

Logs werden zwischengespeichert. Wenn ein Worker-Pod entfernt wird, bevor der Zwischenspeicher geleert wurde, werden keine Logs ausgegeben. Ein Aufgabenfehler ohne Logs ist ein Hinweis darauf, dass die Airflow-Worker aufgrund von zu wenig Arbeitsspeicher neu gestartet werden. In Cloud Logging sind möglicherweise einige Logs vorhanden, obwohl die Airflow-Logs nicht ausgegeben wurden.

So können die Logs angezeigt werden:

  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 Protokolle auf.

  4. Logs einzelner Worker unter Alle Logs ansehen -> Airflow-Logs -> Worker -> (einzelner Worker).

Die DAG-Ausführung ist speicherseitig begrenzt. Jede Ausführung einer Aufgabe beginnt mit zwei Airflow-Prozessen: Ausführung und Monitoring. Jeder Knoten kann bis zu 6 Aufgaben gleichzeitig ausführen (ungefähr 12 Prozesse mit Airflow-Modulen). Je nach Art des DAG wird möglicherweise mehr Arbeitsspeicher belegt.

Symptom:

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

    Zu Arbeitslasten

  2. Wenn airflow-worker-Pods vorhanden sind, die Evicted anzeigen, klicken Sie auf die einzelnen bereinigten Pods und suchen Sie oben im Fenster nach folgender Meldung: The node was low on resource: memory.

Lösung:

  • Erstellen Sie in Cloud Composer 1 eine neue Cloud Composer-Umgebung mit einen größeren Maschinentyp als die aktuelle Maschine. Typ.
  • Speicherlimits in Cloud Composer 2 erhöhen für Airflow-Worker.
  • Prüfen Sie die Logs von airflow-worker-Pods auf mögliche Ursachen für die Entfernung. Weitere Informationen zum Abrufen von Logs aus einzelnen Pods finden Sie unter Probleme mit bereitgestellten Arbeitslasten beheben.
  • Achten Sie darauf, dass die Aufgaben im DAG idempotent und wiederholbar sind.
  • Vermeiden Sie das Herunterladen unnötiger Dateien auf das lokale Dateisystem der Airflow-Worker.

    Airflow-Worker haben eine begrenzte lokale Dateisystemkapazität. Beispiel: Cloud Composer 2, ein Worker kann 1 GB bis 10 GB Speicherplatz haben. Wenn der Parameter nicht genügend Speicherplatz vorhanden ist, wird der Airflow-Worker-Pod GKE-Steuerungsebene. Dadurch schlagen alle Aufgaben fehl, die der entfernte Worker ausgeführt hat.

    Beispiele für problematische Vorgänge:

    • Dateien oder Objekte herunterladen und lokal in einem Airflow speichern Worker. Speichern Sie diese Objekte stattdessen direkt in einem geeigneten Dienst, z. B. in einem Cloud Storage-Bucket.
    • Über einen Airflow-Worker auf große Objekte im Ordner /data zugreifen Der Airflow-Worker lädt das Objekt in sein lokales Dateisystem herunter. Implementieren Sie Ihre DAGs stattdessen so, dass große Dateien außerhalb des Airflow-Worker-Pods verarbeitet werden.

Zeitüberschreitung beim Laden des DAG

Symptom:

  • In der Airflow-Weboberfläche wird oben auf der Seite mit der DAG-Liste in einem roten Warnfeld Broken DAG: [/path/to/dagfile] Timeout angezeigt.
  • In Cloud Monitoring: Die airflow-scheduler-Logs enthalten Einträge wie beispielsweise die folgenden:

    • ERROR - Process timed out
    • ERROR - Failed to import: /path/to/dagfile
    • AirflowTaskTimeout: Timeout

Lösung:

Überschreiben Sie die Airflow-Konfiguration dag_file_processor_timeout und legen Sie mehr Zeit für das DAG-Parsen fest:

Bereich Schlüssel Wert
core dag_file_processor_timeout Neuer Wert für die Zeitüberschreitung

DAG-Ausführung endet nicht innerhalb der erwarteten Zeit

Symptom:

Manchmal endet eine DAG-Ausführung nicht, weil Airflow-Aufgaben hängen bleiben und DAG ausgeführt werden länger dauert als erwartet. Unter normalen Bedingungen bleiben im Status „Warteschlange“ oder „Wird ausgeführt“ unbegrenzt, da Airflow Bereinigungsverfahren, die dazu beitragen, diese Situation zu vermeiden.

Lösung:

  • Verwenden Sie die Methode dagrun_timeout -Parameter für die DAGs. Beispiel: dagrun_timeout=timedelta(minutes=120). Daher muss jeder DAG-Lauf innerhalb des Zeitlimits für den DAG-Lauf abgeschlossen sein. Nicht abgeschlossene Aufgaben werden als Failed oder Upstream Failed gekennzeichnet. Weitere Informationen zu Airflow-Aufgabenstatus finden Sie in der Apache Airflow-Dokumentation.

  • Verwenden Sie die Methode Zeitlimit für Aufgabenausführung Parameter zum Definieren eines Standardzeitlimits für Aufgaben, die auf Apache-Basis ausgeführt werden Airflow-Operatoren.

DAG-Ausführungen nicht ausgeführt

Symptom:

Wenn ein Planungsdatum für einen DAG dynamisch festgelegt wird, kann dies zu verschiedenen unerwartete Nebenwirkungen. 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.

Lösung:

  • Folgen Sie den Empfehlungen in der Apache Airflow-Dokumentation.

  • Legen Sie eine statische start_date für DAGs fest. Optional können Sie catchup=False verwenden um die Ausführung des DAG für vergangene Zeiträume zu deaktivieren.

  • Verwenden Sie datetime.now() oder days_ago(<number of days>) nur, wenn Sie sich der Nebenwirkungen dieses Ansatzes bewusst sind.

Erhöhter Netzwerktraffic zur und von der Airflow-Datenbank

Die Menge des Netzwerk-Traffics zwischen dem GKE-Cluster Ihrer Umgebung und der Airflow-Datenbank hängt von der Anzahl der DAGs, der Anzahl der Aufgaben in DAGs und der Art des Zugriffs der DAGs auf Daten in der Airflow-Datenbank ab. Folgende Faktoren können sich auf die Netzwerknutzung auswirken:

  • Abfragen an die Airflow-Datenbank Wenn Ihre DAGs viele Abfragen ausführen, generieren sie große Mengen an Traffic. Beispiele: Status prüfen, bevor andere Aufgaben ausgeführt werden, XCom-Tabelle abfragen und Inhalt der Airflow-Datenbank auslesen.

  • Große Anzahl von Aufgaben Je mehr Aufgaben geplant sind, desto mehr Netzwerktraffic wird generiert. Dieser Aspekt gilt sowohl für die Gesamtzahl der Aufgaben in Ihren DAGs als auch für die Planungshäufigkeit. Wenn der Airflow-Planer DAG-Ausführungen plant, sendet er Abfragen an die Airflow-Datenbank und generiert Traffic.

  • Die Airflow-Weboberfläche generiert Netzwerkverkehr, da sie Abfragen an die Airflow-Datenbank sendet. Die intensive Verwendung von Seiten mit Grafiken, Aufgaben und Diagrammen kann große Mengen an Netzwerkverkehr generieren.

DAG führt zum Absturz des Airflow-Webservers oder verursacht einen 502 gateway timeout-Fehler

Webserverausfälle können aus verschiedenen Gründen auftreten. Prüfen Die airflow-webserver-Logs Cloud Logging, um die Ursache des Fehlers 502 gateway timeout Fehler.

Komplexe Berechnungen

Dieser Abschnitt gilt nur für Cloud Composer 1.

Führen Sie keine komplexen Berechnungen während der DAG-Analyse durch.

Im Gegensatz zu Worker- und Planerknoten, deren Maschinentypen für eine höhere CPU- und Arbeitsspeicherkapazität angepasst werden können, verwendet der Webserver einen festen Maschinentyp. Dieser kann zu Fehlern beim DAG-Parsen führen, wenn dabei komplexe Berechnungen ausgeführt werden.

Beachten Sie, dass der Webserver 2 vCPUs und 2 GB Arbeitsspeicher hat. Der Standardwert für core-dagbag_import_timeout beträgt 30 Sekunden. Dieser Zeitlimitwert ist die Obergrenze für den Zeitraum, den Airflow für das Laden eines Python-Moduls in den Ordner dags/ benötigt.

Falsche Berechtigungen

Dieser Abschnitt gilt nur für Cloud Composer 1.

Der Webserver wird nicht unter demselben Dienstkonto ausgeführt wie die Worker und der Planer. Worker und der Planer können somit gegebenenfalls auf vom Nutzer verwaltete Ressourcen zugreifen, auf die der Webserver keinen Zugriff hat.

Vermeiden Sie den Zugriff auf nicht öffentliche Ressourcen während der DAG-Analyse. Sollte dies nicht möglich sein, müssen Sie dem Dienstkonto des Webservers Berechtigungen erteilen. Der Name des Dienstkontos wird von der Webserverdomain abgeleitet. Wenn beispielsweise die Domain ist example-tp.appspot.com, das Dienstkonto ist example-tp@appspot.gserviceaccount.com.

DAG-Fehler

Dieser Abschnitt gilt nur für Cloud Composer 1.

Der Webserver wird in App Engine ausgeführt und ist vom GKE-Cluster Ihrer Umgebung getrennt. Der Webserver parst die DAG-Definitionsdateien. Wenn dabei Fehler im DAG auftreten, kann es zum 502 gateway timeout kommen. Airflow funktioniert auch ohne funktionierenden Webserver, solange der problematische DAG keine in GKE ausgeführten Prozesse zum Absturz bringt. In diesem Fall können Sie mit gcloud composer environments run abrufen, Details aus Ihrer Umgebung und als Behelfslösung, falls der Webserver nicht verfügbar.

In anderen Fällen können Sie die DAG-Analyse in GKE ausführen und nach DAGs suchen, die schwerwiegende Python-Ausnahmen oder eine Zeitüberschreitung auslösen (Standardeinstellung: 30 Sekunden). Stellen Sie zur Fehlerbehebung eine Verbindung zu einer Remote-Shell in einem Airflow-Worker-Container her und testen Sie, ob Syntaxfehler vorliegen. Weitere Informationen finden Sie unter DAGs testen.

Umgang mit einer großen Anzahl von DAGs und Plug-ins in den Ordnern „DAGs“ und „Plug-ins“

Der Inhalt der Ordner „/dags“ und „/plugins“ wird synchronisiert von lokalen Dateisysteme von Airflow-Workern und Planer.

Je mehr Daten in diesen Ordnern gespeichert sind, desto länger dauert die Synchronisierung. Gehen Sie dazu folgendermaßen vor:

  • Begrenzen Sie die Anzahl der Dateien in den Ordnern /dags und /plugins. Nur die mindestens erforderliche Dateien.

  • Erhöhen Sie nach Möglichkeit den für Airflow-Planer und -Worker verfügbaren Speicherplatz.

  • Erhöhen Sie nach Möglichkeit die CPU- und Arbeitsspeicherkapazität der Airflow-Planer und ‑Worker, damit die Synchronisierung schneller ausgeführt wird.

  • Bei einer sehr großen Anzahl von DAGs können Sie DAGs in Batches aufteilen, in ZIP-Archiven und im Ordner /dags bereitstellen. Dadurch wird die Synchronisierung der DAGs beschleunigt. Airflow-Komponenten entpacken ZIP-Archive, bevor DAGs verarbeitet werden.

  • Auch das Generieren von DAGs in einer programmatischen Die Anzahl der im Ordner /dags gespeicherten DAG-Dateien. Im Abschnitt zu programmatischen DAGs finden Sie Informationen dazu, wie Sie Probleme beim Planen und Ausführen programmatisch generierter DAGs vermeiden.

Programmisch generierte DAGs nicht zur selben Zeit planen

Das programmgesteuerte Erzeugen von DAG-Objekten aus einer DAG-Datei ist eine effiziente Methode, um viele ähnliche DAGs mit nur kleinen Unterschieden zu erstellen.

Es ist wichtig, nicht alle diese DAGs sofort zur Ausführung zu planen. Es besteht eine hohe Wahrscheinlichkeit, dass die Airflow-Worker nicht genügend CPU und Arbeitsspeicher haben Ressourcen zur Ausführung aller zur gleichen Zeit geplanten Aufgaben.

So vermeiden Sie Probleme bei der Planung programmatischer DAGs:

  • Erhöhen Sie die Nebenläufigkeit der Worker und skalieren Sie Ihre Umgebung, damit mehr Aufgaben gleichzeitig ausgeführt werden können.
  • DAGs so generieren, dass die Zeitpläne gleichmäßig über einen bestimmten Zeitraum verteilt werden, müssen Sie nicht Hunderte von Aufgaben gleichzeitig planen, damit die Airflow-Worker alle geplanten Aufgaben ausführen können.

Fehler 504 beim Zugriff auf den Airflow-Webserver

Siehe Fehler 504 beim Zugriff auf die Airflow-UI.

Die Lost connection to Postgres / MySQL server during query-Ausnahme wird während der Ausführung der Aufgabe oder unmittelbar danach ausgelöst.

Lost connection to Postgres / MySQL server during query Ausnahmen treten häufig auf, wenn die folgenden Bedingungen erfüllt sind:

  • Ihr DAG verwendet PythonOperator oder einen benutzerdefinierten Operator.
  • Ihr DAG stellt Abfragen an die Airflow-Datenbank.

Wenn mehrere Abfragen von einer aufrufbaren Funktion gesendet werden, verweisen Tracebacks möglicherweise fälschlicherweise auf die Zeile self.refresh_from_db(lock_for_update=True) im Airflow-Code. Sie ist die erste Datenbankabfrage nach der Aufgabenausführung. Die tatsächliche Ursache der Ausnahme tritt davor auf, wenn eine SQLAlchemy-Sitzung nicht ordnungsgemäß geschlossen wird.

SQLAlchemy-Sitzungen sind auf einen Thread beschränkt und werden in einer aufrufbaren Funktionssitzung erstellt, die später innerhalb des Airflow-Codes fortgesetzt werden kann. Wenn es signifikante Verzögerungen zwischen Abfragen innerhalb einer Sitzung auftreten, ist die Verbindung möglicherweise bereits durch den Postgres- oder MySQL-Server geschlossen. Das Zeitlimit für die Verbindung in Cloud Composer-Umgebungen ist auf etwa zehn Minuten festgelegt.

Lösung:

  • Verwenden Sie den Decorator airflow.utils.db.provide_session. Dieser Decorator stellt eine gültige Sitzung für die Airflow-Datenbank im session-Parameter bereit und schließt die Sitzung am Ende der Funktion ordnungsgemäß.
  • Verwenden Sie keine einzelne Funktion mit langer Ausführungszeit. Verschieben Sie stattdessen alle Datenbankabfragen in separate Funktionen, sodass es mehrere Funktionen mit dem Decorator airflow.utils.db.provide_session gibt. In diesem Fall werden Sitzungen nach dem Abrufen von Abfrageergebnissen automatisch geschlossen.

Ausführungszeit von DAGs, Aufgaben und parallelen Ausführungen desselben DAG steuern

Wenn Sie steuern möchten, wie lange eine einzelne DAG-Ausführung für einen bestimmten DAG dauert bleibt, können Sie den DAG-Parameter dagrun_timeout, also. Wenn Sie z. B. erwarten, dass ein einzelner DAG (unabhängig davon, ob Ausführung mit Erfolg oder Misserfolg) darf nicht länger als eine Stunde dauern, legen Sie diesen Parameter auf 3.600 Sekunden fest.

Sie können auch festlegen, wie lange eine einzelne Airflow-Aufgabe dauern soll. Dazu können Sie execution_timeout verwenden.

Wenn Sie festlegen möchten, wie viele aktive DAG-Ausführungen für einen bestimmten DAG ausgeführt werden sollen, können Sie dazu die [core]max-active-runs-per-dag-Airflow-Konfigurationsoption verwenden.

Wenn nur eine einzige Instanz eines DAG gleichzeitig ausgeführt werden soll, legen Sie max-active-runs-per-dag-Parameter auf 1.

Probleme bei der Synchronisierung von DAGs und Plug-ins mit Planern, Workern und Webservern

Cloud Composer synchronisiert den Inhalt der Ordner /dags und /plugins mit den Schedulern und Workern. Bestimmte Objekte in den Ordnern /dags und /plugins können diese Synchronisierung verhindern oder zumindest verlangsamen.

  • Der Ordner /dags wird mit den Planern und Workern synchronisiert. Dieser Ordner ist nicht synchronisiert auf Webserver in Cloud Composer 2 oder wenn Sie DAG Serialization in Cloud Composer 1 aktivieren.

  • Der Ordner „/plugins“ wird mit Planern, Workern und Webservern synchronisiert.

Die folgenden Probleme können auftreten:

  • Sie haben gzip-komprimierte Dateien mit Komprimierungs-Transcodierung in die Ordner /dags und /plugins hochgeladen. Dies geschieht normalerweise, wenn Sie das Flag --gzip-local-all in einer Befehl gcloud storage cp, um Daten in den Bucket hochzuladen.

    Lösung: Löschen Sie das Objekt, das die Komprimierungscodierung verwendet hat, und laden Sie die Datei noch einmal hoch. in den Bucket verschieben.

  • Eines der Objekte hat den Namen „.“, das heißt, ein Objekt wird nicht mit Planungs- und Worker-Instanzen und beendet möglicherweise die Synchronisierung.

    Lösung: Benennen Sie das problematische Objekt um.

  • Ein Ordner und eine Python-Datei in DAG haben denselben Namen, z. B. a.py. In diesem Fall wird die DAG-Datei nicht richtig mit den Airflow-Komponenten synchronisiert.

    Lösung: Entfernen Sie den Ordner, der denselben Namen wie eine DAG-Python-Datei hat.

  • Eines der Objekte in den Ordnern /dags oder /plugins enthält am Ende des Objektnamens das Symbol /. Solche Objekte können den Synchronisierungsprozess in die Irre führen. da das Symbol / bedeutet, dass ein Objekt ein Ordner und keine Datei ist.

    Lösung: Entfernen Sie das Symbol / aus dem Namen des problematischen Objekts.

  • Speichern Sie keine unnötigen Dateien in den Ordnern /dags und /plugins.

    Manchmal werden von Ihnen implementierte DAGs und Plug-ins z. B. Dateien, in denen Tests für diese Komponenten gespeichert sind. Diese Dateien werden mit Workern und Planern synchronisiert und beeinflussen die Zeit, die zum Kopieren dieser Dateien auf Planer, Worker und Webserver benötigt wird.

    Lösung: Speichern Sie keine zusätzlichen und nicht erforderlichen Dateien in den Ordnern /dags und /plugins.

Done [Errno 21] Is a directory: '/home/airflow/gcs/dags/...'-Fehler wird von Planern und Workern generiert

Dieses Problem tritt auf, weil Objekte überlappenden Namespace in Cloud Storage Planer und Worker verwenden herkömmliche Dateisysteme. So ist es beispielsweise möglich, dem Bucket einer Umgebung sowohl einen Ordner als auch ein Objekt mit demselben Namen hinzuzufügen. Wenn der Bucket mit den Planern und Workern der Umgebung synchronisiert wird, wird dieser Fehler generiert, was zu Aufgabenausfällen führen kann.

Achten Sie darauf, dass sich im Bucket der Umgebung keine überlappenden Namespaces befinden, um dieses Problem zu beheben. Wenn sich beispielsweise sowohl /dags/misc (eine Datei) als auch /dags/misc/example_file.txt (eine andere Datei) in einem Bucket befinden, wird vom Scheduler ein Fehler generiert.

Vorübergehende Unterbrechungen bei der Verbindung zur Airflow-Metadaten-Datenbank

Cloud Composer wird auf einer verteilten Cloud-Infrastruktur ausgeführt. Von Zeit zu Zeit können vorübergehende Probleme auftreten, die Ausführung Ihrer Airflow-Aufgaben unterbrechen.

In solchen Fällen werden möglicherweise die folgenden Fehlermeldungen im Protokolle:

"Can't connect to Postgres / MySQL server on 'airflow-sqlproxy-service.default.svc.cluster.local' (111)"

oder

"Can't connect to Postgres / MySQL server on 'airflow-sqlproxy-service.default.svc.cluster.local' (104)"

Solche sporadischen Probleme können auch durch Wartungsarbeiten an Ihren Cloud Composer-Umgebungen verursacht werden.

Normalerweise treten solche Fehler nur sporadisch auf. Wenn Ihre Airflow-Aufgaben idempotent sind und Sie Wiederholungen konfiguriert haben, sollten Sie nicht davon betroffen sein. Sie können auch erwägen Sie das Definieren von Wartungsfenstern.

Ein weiterer Grund für solche Fehler könnte ein Mangel an Ressourcen in Ihrem Projekt sein. Cluster der Umgebung. In solchen Fällen können Sie Ihre Umgebung wie in den Anleitungen Umgebungen skalieren oder Umgebung optimieren beschrieben skalieren oder optimieren.

Eine DAG-Ausführung ist als erfolgreich markiert, enthält aber keine ausgeführten Aufgaben

Wenn die DAG-Ausführung execution_date vor der start_date des DAG liegt, gilt Folgendes: werden möglicherweise DAG-Ausführungen angezeigt, die keine Aufgabenausführungen haben, aber dennoch als erfolgreich gekennzeichnet sind.

Eine erfolgreiche DAG-Ausführung ohne ausgeführte Aufgaben
Abbildung 3: Eine erfolgreiche DAG-Ausführung ohne ausgeführte Aufgaben (zum Vergrößern klicken)

Ursache

Das kann in den folgenden Fällen passieren:

  • Eine Abweichung wird durch Zeitzonenunterschiede zwischen den execution_date und start_date. Das kann beispielsweise passieren, wenn Sie pendulum.parse(...) verwenden, um start_date festzulegen.

  • Der start_date des DAG ist auf einen dynamischen Wert festgelegt, z. B. airflow.utils.dates.days_ago(1)

Lösung

  • Achten Sie darauf, dass für execution_date und start_date dieselbe Zeitzone verwendet wird.

  • Geben Sie ein statisches start_date an und kombinieren Sie es mit catchup=False, um zu verhindern, dass DAGs mit vergangenen Startdaten ausgeführt werden.

Ein DAG ist in der Airflow-UI oder der DAG-UI nicht sichtbar und wird vom Planer nicht geplant

Der DAG-Prozessor parst jeden DAG, bevor er vom Planer geplant werden kann und bevor er in der Airflow-UI oder DAG-UI sichtbar wird.

Die folgenden Airflow-Konfigurationsoptionen definieren Zeitlimits für das Parsen von DAGs:

Wenn ein DAG nicht in der Airflow-UI oder DAG-UI angezeigt wird:

  • Prüfen Sie in den Logs des DAG-Prozessors, ob der DAG-Prozessor Ihren DAG korrekt verarbeiten kann. Bei Problemen werden möglicherweise die folgenden Logeinträge angezeigt in den DAG-Prozessor- oder Planerlogs:
[2020-12-03 03:06:45,672] {dag_processing.py:1334} ERROR - Processor for
/usr/local/airflow/dags/example_dag.py with PID 21903 started at
2020-12-03T03:05:55.442709+00:00 has timed out, killing it.
  • Prüfen Sie die Scheduler-Logs, um festzustellen, ob der Scheduler ordnungsgemäß funktioniert. Bei Problemen werden in den Scheduler-Logs möglicherweise die folgenden Logeinträge angezeigt:
DagFileProcessorManager (PID=732) last sent a heartbeat 240.09 seconds ago! Restarting it
Process timed out, PID: 68496

Lösungen:

  • Beheben Sie alle DAG-Parsing-Fehler. Der DAG-Prozessor parst mehrere DAGs. In seltenen Fällen können Parsingfehler bei einem DAG sich negativ auf das Parsen anderer DAGs auswirken.

  • Wenn das Parsen des DAG länger dauert als die in [core]dagrun_import_timeout, erhöhen Sie dieses Zeitlimit.

  • Wenn das Parsen aller DAGs länger als die in [core]dag_file_processor_timeout angegebene Anzahl von Sekunden dauert, erhöhen Sie diese Zeitüberschreitung.

  • Wenn das Parsen Ihres DAGs lange dauert, kann das auch daran liegen, dass er nicht optimal implementiert ist. Das ist beispielsweise der Fall, wenn viele Umgebungsvariablen gelesen oder externe Dienste oder die Airflow-Datenbank aufgerufen werden. Vermeiden Sie möglichst solche Vorgänge in globalen Abschnitten von DAGs.

  • Erhöhen Sie die CPU- und Arbeitsspeicherressourcen für den Scheduler, damit er schneller arbeitet.

  • Anzahl der Planer anpassen

  • Anzahl der DAG-Prozessorprozesse erhöhen, damit das Parsen möglich ist schneller. Dazu erhöhen Sie den Wert [scheduler]parsing_process

  • Verringern Sie die Häufigkeit des DAG-Parsings.

  • Reduzieren Sie die Belastung der Airflow-Datenbank.

Symptome einer stark ausgelasteten Airflow-Datenbank

Weitere Informationen finden Sie unter Symptome einer Airflow-Datenbank, die unter Lastdruck steht.

Nächste Schritte