it-swarm.com.de

Airflow-Aufgaben bleiben im Status "In Warteschlange" hängen und werden nie ausgeführt

Ich verwende Airflow v1.8.1 und führe alle Komponenten (Worker, Web, Flower, Scheduler) auf kubernetes & Docker aus Ich verwende Celery Executor mit Redis und meine Aufgaben sehen folgendermaßen aus:

(start) -> (do_work_for_product1)
     ├  -> (do_work_for_product2)
     ├  -> (do_work_for_product3)
     ├  …

Die start-Task hat also mehrere Downstreams. Und ich konfiguriere die Konfiguration für Parallelität wie folgt:

parallelism = 3
dag_concurrency = 3
max_active_runs = 1

Wenn ich dann diese DAG manuell ausführe (nicht sicher, ob dies bei einer geplanten Aufgabe nie der Fall ist), werden einige Downstreams ausgeführt, andere bleiben jedoch im Status "In Warteschlange".

Wenn ich die Aufgabe von der Admin-Benutzeroberfläche lösche, wird sie ausgeführt .. Es gibt kein Arbeiterprotokoll (nach der Verarbeitung einiger erster Downstreams gibt es einfach kein Protokoll aus). 

Webserverprotokoll (nicht sicher, ob worker exiting verwandt ist)

/usr/local/lib/python2.7/dist-packages/flask/exthook.py:71: ExtDeprecationWarning: Importing flask.ext.cache is deprecated, use flask_cache instead.
  .format(x=modname), ExtDeprecationWarning
[2017-08-24 04:20:56,496] [51] {models.py:168} INFO - Filling up the DagBag from /usr/local/airflow_dags
[2017-08-24 04:20:57 +0000] [27] [INFO] Handling signal: ttou
[2017-08-24 04:20:57 +0000] [37] [INFO] Worker exiting (pid: 37)

Es gibt auch kein Fehlerprotokoll im Scheduler. Und eine Reihe von Aufgaben bleiben hängen, wenn ich das versuche.

Da ich auch Docker benutze, frage ich mich, ob dies verwandt ist: https://github.com/puckel/docker-airflow/issues/94 Bisher jedoch keine Ahnung.

Hat jemand mit einem ähnlichen Problem zu tun gehabt oder eine Idee, was ich für dieses Problem untersuchen kann ...?

14
Norio Akagi

Das Festhalten von Aufgaben ist höchstwahrscheinlich ein Fehler. Im Moment (<= 1.9.0alpha1) kann es vorkommen, dass eine Aufgabe auf dem (entfernten) Worker nicht gestartet werden kann. Dies geschieht beispielsweise bei einem überlasteten Arbeiter oder fehlenden Abhängigkeiten. 

Dieser Patch sollte dieses Problem beheben.

Es lohnt sich zu untersuchen, warum Ihre Aufgaben keinen RUNNING-Status erhalten. Sich auf diesen Zustand zu setzen, ist das erste, was eine Aufgabe tut. Normalerweise protokolliert der Worker vor der Ausführung und meldet auch Fehler. Sie sollten Einträge davon im Protokoll Aufgabe finden können.

edit: Wie in den Kommentaren zur ursprünglichen Frage erwähnt, für den Fall, dass ein Luftstrom keine Aufgabe ausführen kann, wenn er nicht an die erforderlichen Speicherorte schreiben kann. Dies führt dazu, dass der Vorgang nicht fortgesetzt werden kann und Aufgaben stecken bleiben. Der Patch behebt dies, indem die Task vom Scheduler aus fehlgeschlagen ist.

4
Bolke de Bruin

Wir haben eine Lösung und möchten diese hier veröffentlichen, bevor 1.9 offiziell wird. Vielen Dank für Bolke de Bruin Updates zu 1.9. In meiner Situation vor 1.9 verwenden wir derzeit 1.8.1, wenn eine andere DAG ausgeführt wird, um die Aufgabe in queue state zu löschen, wenn sie über 30 Minuten dort verbleibt.

2
Chengzhi

Ich habe an demselben Docker-Image-Puckel gearbeitet. Mein Problem wurde gelöst durch:

Ersetzen

 result_backend = db+postgresql://airflow:[email protected]/airflow

mit

celery_result_backend = db+postgresql://airflow:[email protected]/airflow

was ich denke, wird in der neuesten Pull von Puckel aktualisiert. Die Änderung wurde im Februar 2018 rückgängig gemacht, und Ihr Kommentar wurde im Januar abgegeben.

2
Rohan Sawant

Bitte versuchen Sie den Befehl airflow scheduler, airflow worker.

Ich denke, airflow worker ruft jede Aufgabe auf, airflow scheduler ruft zwischen zwei Aufgaben auf.

0
Sheng Li