2017-09-28 4 views
4

Ich habe eine EC2-Instanz, die unter Verwendung von LocalExecutor den Luftstrom 1.8.0 ausführt. Per Docs hätte ich erwartet, dass eine der beiden folgenden Befehle den Scheduler im Daemon-Modus erhöht hätte:Probleme beim Ausführen des Luftstrom-Schedulers als Daemon-Prozess

airflow scheduler --daemon --num_runs=20

oder

airflow scheduler --daemon=True --num_runs=5

Aber das ist nicht der Fall ist. Der erste Befehl scheint, wie es funktionieren wird, aber es gibt nur die folgende Ausgabe vor dem Terminal zurückkehren, ohne eine Hintergrundaufgabe zu produzieren:

[2017-09-28 18:15:02,794] {__init__.py:57} INFO - Using executor LocalExecutor 
[2017-09-28 18:15:03,064] {driver.py:120} INFO - Generating grammar tables from /usr/lib/python3.5/lib2to3/Grammar.txt 
[2017-09-28 18:15:03,203] {driver.py:120} INFO - Generating grammar tables from /usr/lib/python3.5/lib2to3/PatternGrammar.txt 

Der zweite Befehl erzeugt den Fehler:

airflow scheduler: error: argument -D/--daemon: ignored explicit argument 'True' 

Welche ist ungerade, weil nach der docs--daemon=True sollte ein gültiges Argument für die airflow scheduler Aufruf sein.

ein wenig tiefer Graben führte mich in this StackOverflow post, wo eine der Antworten zur Handhabung des Luftstrom-Scheduler als Hintergrundprozess gemäß dem Code als this repo eine Implementierung von systemd empfiehlt.

Meine leicht bearbeiteten Anpassungen des Skripts werden als die folgenden Gisten gebucht. Ich bin mit einer Vanille-m4.xlarge EC2-Instanz mit Ubuntu 16.04.3:

Von dort rufe ich:

sudo systemctl enable airflow-scheduler 
sudo systemctl start airflow-scheduler 

Und nichts passiert. Während ich viel komplexere DAGs auf dieser Instanz ausführen, I am using this dummy case, um einen einfachen Test zu erstellen, der auch als ein Listener dient, um mich zu informieren, wenn der Scheduler wie geplant ausgeführt wird.

Ich habe journalctl -f zum Debuggen verwendet. Hier sind ein paar Zeilen der Ausgabe vom Scheduler-Prozess. Es gibt kein offensichtliches Problem, aber meine Aufgaben werden nicht ausgeführt und es werden keine Protokolle für die Test-DAG erstellt, die mir helfen würden, den Fehler zu vergrößern. Ist das Problem hier irgendwo?

Sep 28 18:39:30 ip-172-31-15-209 airflow[20603]: [2017-09-28 18:39:30,965] {dag_processing.py:627} INFO - Started a process (PID: 21822) to generate tasks for /home/ubuntu/airflow/dags/scheduler_test_dag.py - logging into /home/ubuntu/airflow/logs/scheduler/2017-09-28/scheduler_test_dag.py.log 
Sep 28 18:39:31 ip-172-31-15-209 airflow[20603]: [2017-09-28 18:39:31,016] {jobs.py:1002} INFO - No tasks to send to the executor 
Sep 28 18:39:31 ip-172-31-15-209 airflow[20603]: [2017-09-28 18:39:31,020] {jobs.py:1440} INFO - Heartbeating the executor 
Sep 28 18:39:32 ip-172-31-15-209 airflow[20603]: [2017-09-28 18:39:32,022] {jobs.py:1404} INFO - Heartbeating the process manager 
Sep 28 18:39:32 ip-172-31-15-209 airflow[20603]: [2017-09-28 18:39:32,023] {jobs.py:1440} INFO - Heartbeating the executor 
Sep 28 18:39:33 ip-172-31-15-209 airflow[20603]: [2017-09-28 18:39:33,024] {jobs.py:1404} INFO - Heartbeating the process manager 
Sep 28 18:39:33 ip-172-31-15-209 airflow[20603]: [2017-09-28 18:39:33,025] {dag_processing.py:559} INFO - Processor for /home/ubuntu/airflow/dags/capone_dash_dag.py finished 
Sep 28 18:39:33 ip-172-31-15-209 airflow[20603]: [2017-09-28 18:39:33,026] {dag_processing.py:559} INFO - Processor for /home/ubuntu/airflow/dags/scheduler_test_dag.py finished 

Wenn ich airflow scheduler manuell ausführen dies alles funktioniert gut. Da meine Test-DAG ein Startdatum vom 9. September hat, füllt sie seitdem immer wieder jede Minute auf und produziert einen Laufzeitticker. Wenn ich systemd verwende, um den Scheduler als einen Deamon auszuführen, ist es jedoch völlig ruhig ohne offensichtliche Quelle des Fehlers.

Irgendwelche Gedanken?

Antwort

3

Die Dokumentation könnte veraltet sein?

ich normalerweise Airflow beginnen wie folgt

airflow kerberos -D 
airflow scheduler -D 
airflow webserver -D 

Hier airflow webeserver --help Ausgabe (ab Version 1.8):

-D, --daemon Daemonize instead of running in the foreground

Hinweis gibt es nicht boolean Flag möglich ist. Die Dokumentation muss korrigiert werden.

Schnell Hinweis im Fall airflow scheduler -D fehlschlägt:

Das in den Kommentaren enthalten ist, aber es scheint, als ob es sich lohnt, hier erwähnt zu werden. Wenn Sie Ihren Luftstromplaner ausführen, wird die Datei $AIRFLOW_HOME/airflow-scheduler.pid erstellt. Wenn Sie versuchen, den Airflow-Scheduler-Daemon-Prozess erneut auszuführen, wird dies mit hoher Wahrscheinlichkeit die Datei $AIRFLOW_HOME/airflow-scheduler.err erzeugen, die Ihnen diese lockfile.AlreadyLocked: /home/ubuntu/airflow/airflow-scheduler.pid is already locked mitteilen wird. Wenn Ihr Scheduler-Dämon in der Tat aus der Kommission und Sie finden, um sich neu zu starten, ist, die folgenden Befehle ausführen:

sudo rm $AIRFLOW_HOME airflow-scheduler.err airflow-scheduler.pid 
airflow scheduler -D 

Das ist mein Scheduler bekam wieder auf die Strecke.

+0

Guter Vorschlag, aber das behebt es nicht. Keiner der Prozesse läuft so wie sie es tun, wenn ich 'airflow scheduler' manuell ohne das Daemonize-Flag starte. Was könnte das noch sein? "Welcher Luftstrom" erzeugt dies: '/ home/ubuntu/.local/bin/airflow' – Aaron

+0

Ich wäre interessiert zu wissen, was Sie Erfahrung sind hier. Wenn ich den "Airflow Scheduler -D" starte, erscheint der hübsche Druck des Luftstroms, aber dann, statt dass der Prozess läuft, komme ich zurück zur Terminal-Eingabeaufforderung. In der PID wird nicht angegeben, wo der Scheduler läuft, und auch keiner meiner Prozesse wird ausgeführt. Was passiert für dich? – Aaron

+0

Wenn es nicht für Sie startet, überprüfen Sie $ AIRFLOW_HOME/airflow-scheduler.err - es sollte einen Fehler enthalten, warum es nicht gestartet wurde (möglicherweise weil die PID-Datei bereits existiert oder keine Verbindung zur Backend-Datenbank oder etwas anderem herstellen kann)). Ja, es druckt den Luftstrom und startet dann im Hintergrund. Wenn Sie es immer noch nicht ausführen können, versuchen Sie es mit 'strace -f airflow scheduler -D ', um zu sehen, ob Sie erkennen können, warum es scheitert. – Tagar

2

über Aufgabe starten über systemd:

ich ein Problem mit dem PATH-Variable hatte, als auf diese Weise lief zunächst leer ist. Das heißt, wenn Sie in die Datei schreiben/etc/sysconfig/Luftstrom:

PATH=/home/ubuntu/bin:/home/ubuntu/.local/bin:$PATH 

Sie buchstäblich schreiben:

PATH=/home/ubuntu/bin:/home/ubuntu/.local/bin 

Somit wird die Variable PATH nicht /bin enthalten, ist ein Dienstprogramm, das bash Der LocalExecutor verwendet Tasks.

Also ich verstehe nicht, warum Sie in dieser Datei nicht AIRFLOW_HOME angegeben haben. Das ist das Verzeichnis, in dem der Airflow nach seiner Konfigurationsdatei sucht.

+0

Ich hatte noch keine Gelegenheit, dies zu versuchen, aber werde so schnell wie möglich zu Ihnen zurückkommen, sobald ich in der Lage bin, es zu versuchen. Wenn es das Problem behebt, werde ich definitiv Ihre Antwort auswählen. – Aaron

+0

Tagars Antwort war ein einfacherer Weg, dies zu lösen. Vielen Dank für Ihren Vorschlag! – Aaron

Verwandte Themen