Airflow-Triggerprobleme beheben

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

Auf dieser Seite finden Sie Schritte zur Fehlerbehebung und Informationen für häufige mit dem Airflow-Triggerer.

Vorgänge im Trigger blockieren

Asynchrone Aufgaben werden gelegentlich in Triggern blockiert. In den meisten Fällen sind die Probleme auf unzureichende Trigger-Ressourcen zurückzuführen. oder Probleme mit benutzerdefiniertem Code für asynchrone Operatoren.

Triggererlogs zeigen alle Warnmeldungen an, die können Sie die Ursachen für eine verminderte Triggerleistung identifizieren. Es gibt zwei nach wichtigen Warnungen suchen.

  1. Asynchroner Thread blockiert

    Triggerer's async thread was blocked for 1.2 seconds, likely due to the highly utilized environment.
    

    Diese Warnung weist auf Leistungsprobleme hin, die auf eine große Anzahl asynchroner Aufgaben zurückzuführen sind.

    Lösung: So beheben Sie das Problem: den Triggern mehr Ressourcen zuweisen, die Anzahl der ausgesetzten Aufgaben zu reduzieren, die gleichzeitig ausgeführt werden, oder erhöhen Sie die Anzahl der Trigger in Ihrer Umgebung. Auch wenn Trigger aufgeschobene Aufgaben verarbeiten, ist es die dafür verantwortlich sind, die Erledigung der einzelnen Aufgaben. Wenn Sie die Anzahl der Trigger anpassen, sollten Sie auch die Anzahl der Worker-Instanzen skalieren.

  2. Eine bestimmte Aufgabe hat den asynchronen Thread blockiert.

    WARNING - Executing <Task finished coro=<TriggerRunner.run_trigger() done, defined at /opt/***/***/jobs/my-custom-code.py:609> result=None> took 0.401 second
    

    Diese Warnung verweist auf einen bestimmten Teil des Operatorcodes, der von Cloud Composer Trigger sollten sich auf die asyncio-Bibliothek für Vorgänge im Hintergrund ausführen. Eine benutzerdefinierte Implementierung eines Triggers nicht ordnungsgemäße Einhaltung von asyncio-Verträgen (z. B. aufgrund falscher Verwendung der Schlüsselwörter await und async im Python-Code).

    Lösung: Prüfen Sie den in der Warnung gemeldeten Code. wenn der asynchrone Vorgang korrekt implementiert ist.

Zu viele Trigger

Die Anzahl der verschobenen Aufgaben ist im Messwert task_count sichtbar: wird auch im Monitoring-Dashboard Ihrer Umgebung angezeigt. Jeder Trigger erstellt einige Ressourcen, z. B. Verbindungen zu externen Ressourcen, die zu speichern.

Zurückgestellte Aufgaben, die im Monitoring-Dashboard angezeigt werden
Abbildung 1. Auf dem Monitoring-Dashboard angezeigte verzögerte Aufgaben (zum Vergrößern klicken)

Grafiken zur Arbeitsspeicher- und CPU-Nutzung zeigen, dass unzureichende Ressourcen wird neu gestartet, da die Aktivitätsprüfung aufgrund fehlender Heartbeats fehlschlägt:

<ph type="x-smartling-placeholder">
</ph> Trigger wird aufgrund unzureichender Ressourcen neu gestartet
Abbildung 2: Trigger wird aufgrund unzureichender Ressourcen neu gestartet (zum Vergrößern klicken)

Lösung: So beheben Sie das Problem: den Triggern mehr Ressourcen zuweisen, die Anzahl der ausgesetzten Aufgaben zu reduzieren, die gleichzeitig ausgeführt werden, oder erhöhen Sie die Anzahl der Trigger in Ihrer Umgebung.

Absturz eines Airflow-Workers während der Callback-Ausführung

Nachdem der Trigger die Ausführung beendet hat, kehrt die Steuerung an einen Airflow-Vorgang zurück Worker, der eine Callback-Methode mithilfe eines Ausführungsslots ausführt. Diese Phase umfasst die von Celery Executor gesteuert werden, und daher die entsprechende Konfiguration und Es gelten Ressourcenlimits (z. B. parallelism oder worker_concurrency).

Wenn die Callback-Methode im Airflow-Worker fehlschlägt, schlägt der Worker fehl oder der wird der Worker, der die Methode ausführt, neu gestartet. Dann wird die Aufgabe als FAILED markiert. In In diesem Fall führt der Wiederholungsvorgang die gesamte Aufgabe neu aus, nicht nur die .

Endlosschleife in einem Trigger

Es ist möglich, einen benutzerdefinierten Trigger-Operator so zu implementieren, blockiert die Haupttriggerer-Schleife vollständig, sodass nur der eine defekte Trigger die zu diesem Zeitpunkt ausgeführt wurden. In diesem Fall wird eine Warnung wird in den Trigger-Logs generiert, Der problematische Trigger wurde beendet.

Triggerklasse nicht gefunden

Da der DAGs-Ordner nicht mit dem Airflow-Triggerer synchronisiert wird, Der Inline-Triggercode fehlt, wenn der Trigger ausgeführt wird. Der Fehler lautet in den Logs der fehlgeschlagenen Aufgabe generiert:

ImportError: Module "PACKAGE_NAME" does not define a "CLASS_NAME" attribute/
class

Lösung: Importieren Sie den fehlenden Code aus PyPI.

Warnmeldung zum Triggerer in der Airflow-UI

Nach dem Deaktivieren des Triggers wird in einigen Fällen Folgendes angezeigt: Warnmeldung in der Airflow-UI:

The triggerer does not appear to be running. Last heartbeat was received
4 hours ago. Triggers will not run, and any deferred operator will remain
deferred until it times out or fails.

Diese Meldung kann angezeigt werden, da unvollständige Trigger in Airflow verbleiben. Datenbank. Diese Meldung bedeutet normalerweise, dass der Trigger vor allen Trigger in Ihrer Umgebung abgeschlossen wurden.

Sie können sich alle Trigger ansehen, die in der Umgebung ausgeführt werden, indem Sie das Durchsuchen &gt; Seite Trigger in der Airflow-UI (die Rolle Admin ist erforderlich).

Lösungen:

Aufgaben verbleiben im Status „Zurückgestellt“, nachdem der Trigger deaktiviert wurde

Wenn der Trigger deaktiviert ist, werden Aufgaben, die sich bereits im Status „verzögert“ befinden, bleiben in diesem Status, bis das Zeitlimit erreicht ist. Diese Zeitüberschreitung kann unendlich, abhängig von der Airflow- und DAG-Konfiguration.

Verwenden Sie eine der folgenden Lösungen:

  • Aufgaben manuell als fehlgeschlagen markieren.
  • Aktivieren Sie den Triggerer, um die Aufgaben auszuführen.

Wir empfehlen, den Trigger nur zu deaktivieren, wenn in Ihrer Umgebung keine zurückgestellte Operatoren oder Aufgaben und alle ausgesetzten Aufgaben sind abgeschlossen.

Nächste Schritte