Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3
Auf dieser Seite finden Sie Schritte zur Fehlerbehebung und Informationen für häufige Probleme 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 Triggerer-Ressourcen oder Probleme mit benutzerdefiniertem Code für asynchrone Operatoren zurückzuführen.
Triggerlogs zeigen alle Warnmeldungen an, mit denen Sie Ursachen für eine verminderte Triggerleistung identifizieren können. Sie müssen auf zwei wichtige Warnungen achten.
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: Zur Behebung dieses Problems weisen Sie den Triggern mehr Ressourcen zu, reduzieren Sie die Anzahl der ausgesetzten Aufgaben, die gleichzeitig ausgeführt werden, oder erhöhen Sie die Anzahl der Trigger in Ihrer Umgebung. Auch wenn Trigger zurückgestellte Aufgaben verarbeiten, sind es die Worker, die dafür verantwortlich sind, jede Aufgabe zu starten und schließlich abzuschließen. Wenn Sie die Anzahl der Trigger anpassen, sollten Sie auch die Anzahl der Worker-Instanzen skalieren.
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 Operatorcode, der von Cloud Composer ausgeführt wird. Trigger sollten sich auf die
asyncio
-Bibliothek verlassen, um Vorgänge im Hintergrund auszuführen. Eine benutzerdefinierte Implementierung eines Triggers kann dieasyncio
-Verträge nicht ordnungsgemäß einhalten (z. B. aufgrund einer falschen Verwendung der Schlüsselwörterawait
undasync
im Python-Code).Lösung: Prüfen Sie den in der Warnung gemeldeten Code und prüfen Sie, ob der asynchrone Vorgang korrekt implementiert ist.
Zu viele Trigger
Die Anzahl der zurückgestellten Aufgaben ist im Messwert task_count
sichtbar, der auch auf dem Monitoring-Dashboard Ihrer Umgebung angezeigt wird. Jeder Trigger erstellt einige Ressourcen, z. B. Verbindungen zu externen Ressourcen, die Arbeitsspeicher belegen.
![Zurückgestellte Aufgaben, die im Monitoring-Dashboard angezeigt werden](https://cloud.google.com/static/composer/docs/images/composer-2-triggerer-running-and-queued-tasks.png?authuser=0&hl=de)
Grafiken zur Arbeitsspeicher- und CPU-Nutzung zeigen, dass unzureichende Ressourcen zu Neustarts führen, da die Aktivitätsprüfung aufgrund fehlender Heartbeats fehlschlägt:
![Trigger wird aufgrund unzureichender Ressourcen neu gestartet](https://cloud.google.com/static/composer/docs/images/composer-2-triggerer-restarts.png?authuser=0&hl=de)
Lösung: Zur Behebung dieses Problems weisen Sie den Triggern mehr Ressourcen zu, reduzieren Sie die Anzahl der ausgesetzten Aufgaben, 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, wird die Steuerung an einen Airflow-Worker zurückgegeben, der mithilfe eines Ausführungsslots eine Callback-Methode ausführt. Diese Phase wird von Celery Executor gesteuert. Daher gelten die entsprechenden Konfigurations- und Ressourcenlimits wie parallelism
oder worker_concurrency
.
Wenn die Callback-Methode im Airflow-Worker fehlschlägt, der Worker fehlschlägt oder der Worker, der die Methode ausführt, neu gestartet wird, wird die Aufgabe als FAILED
markiert. In diesem Fall führt der Wiederholungsvorgang die gesamte Aufgabe noch einmal aus, nicht nur die Callback-Methode.
Endlosschleife in einem Trigger
Es ist möglich, einen benutzerdefinierten Triggeroperator so zu implementieren, dass er die Haupttriggerer-Schleife vollständig blockiert, sodass nur der eine ausgefallene Trigger zu diesem Zeitpunkt ausgeführt wird. In diesem Fall wird eine Warnung in den Trigger-Logs generiert, nachdem der problematische Trigger abgeschlossen wurde.
Triggerklasse nicht gefunden
Da der DAGs-Ordner nicht mit dem Airflow-Triggerer synchronisiert wird, fehlt der Inline-Triggercode, wenn der Trigger ausgeführt wird. Der Fehler wird 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 die folgende Warnmeldung in der Airflow-UI angezeigt:
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.
Airflow kann diese Meldung anzeigen, da unvollständige Trigger in der Airflow-Datenbank verbleiben. Diese Meldung bedeutet normalerweise, dass der Trigger deaktiviert wurde, bevor alle Trigger in Ihrer Umgebung ausgeführt wurden.
Sie können alle Trigger, die in der Umgebung ausgeführt werden, in der Airflow-UI auf der Seite Durchsuchen > Trigger ansehen (die Rolle Admin
ist erforderlich).
Lösungen:
- Aktivieren Sie den Trigger wieder und warten Sie, bis die zurückgestellten Aufgaben abgeschlossen sind.
- Greifen Sie auf die Airflow-Datenbank zu und löschen Sie unvollständige Trigger manuell.
Aufgaben verbleiben im Status „Zurückgestellt“, nachdem der Trigger deaktiviert wurde
Wenn der Trigger deaktiviert ist, verbleiben Aufgaben, die sich bereits im Status „verzögert“ befinden, in diesem Status, bis das Zeitlimit erreicht ist. Dieses Zeitlimit kann je nach Airflow- und DAG-Konfiguration unbegrenzt sein.
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ückgestellten Operatoren oder Aufgaben ausgeführt werden und alle ausgesetzten Aufgaben abgeschlossen sind.