Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
Wie behebe ich Aufgaben, die in meiner Amazon MWAA-Umgebung im Status „In Warteschlange“ hängen bleiben?
Ich führe Arbeitsabläufe in Amazon Managed Workflows für Apache Airflow (Amazon MWAA) aus, aber meine Aufgaben hängen im Status „In Warteschlange“ fest. Die Aufgaben gehen nicht in den Status „Laufend“ über.
Kurzbeschreibung
Aufgaben in Amazon MWAA können aus den folgenden Gründen im Status In Warteschlange hängen bleiben:
- Die Umgebung hat die maximale Anzahl gleichzeitiger Aufgaben erreicht.
- Die Airflow-Konfigurationsoptionen sind in der MWAA-Umgebung falsch eingestellt.
- Es gibt nicht genügend Speicherplatz oder CPU für die Aufgaben auf dem Worker.
Eine Aufgabe steckt im Status In Warteschlange fest, wenn der normale Arbeitsablauf bei der Ausführung einer Aufgabe unterbrochen wird. Der Apache Airflow-Worker kann überfordert sein und nicht innerhalb einer bestimmten Zeit reagieren. In diesem Fall verbleibt die Aufgabe in der Amazon Simple Queue Service (Amazon SQS)-Warteschlange, bis das Standardmäßige Zeitbeschränkung für die Sichtbarkeit in 12 Stunden erreicht ist. Wenn du Wiederholungen konfiguriert hast, versucht der Apache Airflow-Scheduler die Aufgabe erneut.
Lösung
Stelle vor der Problembehandlung fest, ob die Umgebungsressourcen die maximale Auslastung erreicht haben oder ob Probleme im Zusammenhang mit Workern auftreten. Verwende Amazon CloudWatch, um die Worker-Protokolle sowie die Metriken zur CPU-Auslastung und Speicherauslastung der Umgebung zu überprüfen.
Überprüfen, ob die Umgebung die maximale Anzahl gleichzeitiger Aufgaben erreicht hat
Die Umgebung erreicht die maximale Anzahl gleichzeitiger Aufgaben, wenn der Amazon MWAA-Pool voll ist und die Umgebung der Warteschlange weitere Aufgaben hinzufügt. Um dieses Problem zu beheben, erhöhe die Anzahl der Worker für die Umgebung oder ändere die Größe der Umgebungsklasse.
Gehe wie folgt vor, um zu ermitteln, ob du die Anzahl der Worker in der Umgebung erhöhen musst:
- Öffne die CloudWatch-Konsole.
- Wähle im Navigationsbereich Metriken und dann Alle Metriken aus.
- Wähle die Registerkarte Durchsuchen aus, wähle die AWS-Region aus, in der sich die Umgebung befindet und suche dann nach dem Namen der Umgebung.
- Wähle im Abschnitt ** AWS-Namespaces** die Option MWAA < Queue aus.
- Wähle QueuedTasks und RunningTasks aus.
- Suche in der Grafik den Zeitraum mit den meisten Aktivitäten und füge dann die Gesamtzahl der beiden Metriken hinzu.
Hinweis: Die Summe ist die Gesamtzahl der Aufgaben für diesen Zeitraum. - Ermittle das Standardniveau der Parallelität in der Umgebung.
Hinweis: In der Umgebung mw1.small gibt es beispielsweise fünf gleichzeitige Aufgaben für jeden Worker. - Teile die Gesamtzahl der Aufgaben durch das Standardniveau der gleichzeitigen Aufgaben.
- Subtrahiere die Zahl durch die maximale Worker-Anzahl, die du für die Umgebung festgelegt hast.
Hinweis: Wenn das Ergebnis eine positive Zahl ist, musst du Worker hinzufügen, um die aktuelle Anzahl gleichzeitiger Aufgaben zu erfüllen.
Gehe wie folgt vor, um die Anzahl der Worker für die Umgebung zu erhöhen oder die Größe der Umgebungsklasse zu ändern:
- Öffne die Amazon MWAA-Konsole.
- Wähle die Umgebung aus, wähle Bearbeiten und dann Weiter aus.
- Führe im Abschnitt Umgebungsklasse die folgenden Aktionen aus:
Erhöhe die maximale Worker-Anzahl, die du in Schritt 9 festgelegt hast.
Stelle außerdem die minimale Worker-Anzahl auf einen Wert ein, den die Workload für Zeiten mit der geringsten Aktivität erfordert.
Hinweis: Du kannst nur maximal 25 Worker für die Umgebung hinzufügen. Wenn du mehr als 25 Worker benötigst, wähle unter Umgebungsklasse eine größere Größe aus. - Wenn du die Größe der Umgebungsklasse erhöhst, lege auch eine maximale und minimale Worker-Anzahl fest, die für die Workload erforderlich sind.
Wenn du die Worker-Anzahl optimierst und sie für die Workload immer noch nicht ausreicht, ergreife die folgenden Maßnahmen:
- Verwende aufschiebbare Operatoren anstelle von Apache Airflow-Sensoren. Weitere Informationen findest du auf der Apache Airflow-Website unter Aufschiebbare Operatoren und Trigger.
- Staffele die Startzeiten der Ausführung und halte kleine Zeitabstände zwischen dem schedule_interval der Directed Acyclic Graphs (DAGs) ein. Plane DAGs in Blöcken ein.
- Wenn du benutzerdefinierten Code verwendest, der eine bestimmte externe Funktion aufruft und überwacht, teile die Aufgabe in zwei Aufgaben auf. Erstelle eine Aufgabe für den Aufruf und die andere als aufschiebbaren Operator, um die Funktion zu überwachen.
Überprüfen, ob die Airflow-Konfigurationsoptionen falsch eingestellt sind
Gehe wie folgt vor, um die Airflow-Konfigurationsoptionen zu überprüfen:
- Öffne die MWAA-Konsole.
- Wähle Umgebungen und dann die MWAA-Umgebung aus.
- Überprüfe im Abschnitt Airflow-Konfigurationsoptionen die Optionen core.parallelism und celery.worker_autoscale.
Wenn core.parallelism festgelegt ist, entferne alle manuell eingestellten core.parallelism-Optionen, damit Amazon MWAA die Konfiguration dynamisch einrichten kann. Amazon MWAA berechnet die dynamische Standardkonfiguration anhand von (maxWorkers * maxCeleryWorkers) / schedulers * 1.5. Wenn du Auto Scaling verwendest und den Wert manuell festlegst, können Probleme mit einer Unterauslastung bei maximaler Auslastung auftreten.
Vergleiche den Wert der celery.worker_autoscale-Konfigurationsoption mit dem Standardniveau der Parallelität. Wenn du die Konfigurationsoption celery.worker_autoscale nicht geändert hast, multipliziere das Standardniveau der Parallelität mit der maximalen Worker-Anzahl, die du für die Umgebung festgelegt hast.
Wenn der Wert celery.worker_autoscale unbeabsichtigt niedriger als der Standardwert ist, verwende CloudWatch-Metriken, um die CPU- und Speicherauslastung der Worker zu überwachen. Wenn die Ressourcenwerte bei maximaler Auslastung 20–60 % betragen, dann erhöhe den Wert celery.worker_autoscale auf einen größeren Wert. Verwende kleine Schritte, damit du die Worker-Container nicht zu stark beanspruchst.
Wenn du den Wert celery.worker_autoscale nicht festgelegt hast oder den Standardwert beibehalten hast, überwache die CPU- und Speicherauslastung die Worker. Wenn die Metriken für die Umgebung zu hoch sind, senke den Wert „celery.worker_autoscale“. Wenn die Umgebung bei maximaler Last 20–60 % beträgt, kannst du den Maximalwert erhöhen.
Überprüfen, ob die Worker aufgrund von Überbeanspruchung versagen
Wenn jeder Celery-Worker auf einem MWAA-Worker-Container eine Aufgabe hat und maximal ausgelastet ist, können die Worker überlastet werden und ausfallen.
Celery-Worker auf einem MWAA-Worker-Container, fragen nach Aufgaben ab, wenn sie gerade nicht verwendet werden. Abhängig von der Komplexität der laufenden Aufgaben und dem Code, der sie definiert, können Worker überlastet werden und möglicherweise abstürzen. Dies tritt auf, wenn jeder Celery-Worker auf einem MWAA-Worker-Container eine Aufgabe hat und unter maximaler Last steht.
Gehe wie folgt vor, um festzustellen, ob die Worker überlastet sind und ausfallen:
- Öffne die CloudWatch-Konsole.
- Wähle im Navigationsbereich Metriken und dann Alle Metriken aus.
- Wähle die Registerkarte Durchsuchen aus, wähle die AWS-Region aus, in der sich die Umgebung befindet und suche dann nach dem Namen der Umgebung.
- Wähle im Abschnitt AWS-Namespaces die Option MWAA < Queue und wähle dann ApproximateAgeOfOldestTask aus.
- Erweitere den Zeitraum um einen Zeitraum von 4–6 Wochen.
Hinweis: Spitzenwerte von 40 000 oder mehr Sekunden zeigen, dass Aufgaben in der Amazon SQS-Warteschlange hängen bleiben und die Worker aufgrund von Überlastung ausfallen. Außerdem kann der Celery-Worker den Fehler nicht in den Ereignispuffer schreiben, da das System sie mit Zwang beendet hat.
Du kannst CloudWatch Insights auch verwenden, um dich zu warnen, wenn Aufgaben in der Amazon SQS-Warteschlange hängen bleiben.
Gehe wie folgt vor, um die Warnung zu erstellen:
-
Öffne die CloudWatch-Konsole.
-
Wähle im Navigationsbereich Protokolle und dann Protokoll-Insights aus.
-
Gib einen Zeitraum von 4–6 Wochen an.
-
Wähle im Menü Auswahlkriterien die Scheduler-Protokollgruppe für die MWAA-Umgebung aus.
-
Gib die folgende Abfrage in den Abschnitt „Abfrage“ ein:
fields _@timestamp_, _@message_, _@logStream_, _@log_ | filter _@message_ like /Was the task terminated externally?/ | sort _@timestamp_ desc | limit 10000Das Folgende ist ein Beispielprotokoll, das der Scheduler sendet, wenn er eine zuvor in die Warteschlange gestellte Aufgabe empfängt:
[[34m**2024-01-17T11:30:18.936+0000**[0m] [34mscheduler_job_runner.py:[0m771 ERROR[0m - Executor reports task instance <TaskInstance: dag_name.task_name manual__202X-XX-XXTXX:XX:XX.758774+00:00 [queued]> finished (failed) although the task says it's queued. (Info: None) Was the task terminated externally?[0m
Rechen- oder speicherintensive Workloads reduzieren
Hinweis: Beachte die folgende Liste sorgfältig. Nicht alle Faktoren gelten für jeden Anwendungsfall. Wenn du weitere Unterstützung benötigst, wende dich an den AWS Support.
Gehe wie folgt vor, um rechen- oder speicherintensive Workloads in der Umgebung zu reduzieren:
- Stelle sicher, dass der DAG-Code keine ETL-Skripts (Extract, Transform, Load), Anweisungen zur Datenverlagerung, KI- oder ML-Pipelines oder andere rechen- oder speicherintensive Workloads enthält.
- Folge den bewährten Methoden von Apache Airflow, wenn du den DAG-Code schreibst. Stelle sicher, dass der Code der obersten Ebene minimiert ist und nur das importiert wird, was benötigt wird. Weitere Informationen findest du auf der Apache Airflow-Website unter Bewährte Methoden.
- Optimiere den DAG-Code. Profiliere den Speicherbedarf aller Sensoren, Hooks oder benutzerdefinierter, erweiterter oder vererbter Operatoren, um potenzielle Problembereiche zu finden.
Wenn die Ressourcen immer noch überbeansprucht werden, ergreife die folgenden Maßnahmen:
- Reduziere celery.worker_autoscale von der Einstellung Standardwert. Verringere den Wert celery.worker_autoscale um ein paar Ziffern und überwache dann die Umgebung für 24–48 Stunden. Verringere den Wert von celery.worker_autoscale weiter, bis du ein optimales Niveau erreicht hast.
Hinweis: Wenn du den Wert celery.worker_autoscale verringerst, verringert sich der gesamte Aufgabenpool, sodass mehr Elemente länger im Status Warteschlange verbleiben. Um dem entgegenzuwirken, musst du auch die minimale Worker-Anzahl erhöhen. - Führe außerdem die Schritte im Abschnitt „Überprüfen, ob die Umgebung die maximale Anzahl gleichzeitiger Aufgaben erreicht hat“, erneut aus, um die Anzahl gleichzeitiger Aufgaben pro Worker zu reduzieren.
Ähnliche Informationen
Leistungsoptimierung für Apache Airflow auf Amazon MWAA
Konfigurationsreferenz auf der Apache Airflow-Website
- Themen
- Application Integration
- Sprache
- Deutsch

Relevanter Inhalt
AWS OFFICIALAktualisiert vor einem Jahr
AWS OFFICIALAktualisiert vor 4 Monaten
AWS OFFICIALAktualisiert vor 5 Monaten