Aufgaben laufen nicht? DAG funktioniert nicht? Die Protokolle wurden nicht gefunden? Wir hatten die gleichen Probleme. Hier finden Sie eine Liste häufiger Fehler und einige verwandte Korrekturen, die Sie beim Debuggen Ihrer Airflow-Bereitstellung berücksichtigen sollten.
Apache Airflow hat sich zum führenden Open-Source-Taskplaner für nahezu jede Art von Arbeit entwickelt, von der Schulung eines maschinellen Lernmodells bis zur allgemeinen ETL-Orchestrierung. Es ist ein unglaublich flexibles Tool, von dem wir aus Erfahrung wissen, dass es geschäftskritische Projekte sowohl für Start-ups mit fünf Personen als auch für Fortune 50-Teams unterstützt.
Vor diesem Hintergrund kann das Werkzeug, das viele als mächtige "leere Leinwand" betrachten, schnell zu einem zweischneidigen Schwert werden, wenn Sie gerade erst anfangen. Und leider gibt es keine besonders überwältigende Fülle an Ressourcen und Best Practices, die ein oder zwei Schritte über den grundlegenden Grundlagen von Apache Airflow liegen.
Um diese Lücke so weit wie möglich zu schließen, haben wir einige der häufigsten Probleme zusammengestellt, mit denen fast jeder Benutzer konfrontiert ist, unabhängig davon, wie erfahren und groß sein Team ist. Unabhängig davon, ob Sie Airflow noch nicht kennen oder ein Power-User sind, lesen Sie diese Liste mit häufigen Fehlern und einigen damit verbundenen Korrekturen.
1. Ihre DAG arbeitet nicht zum erforderlichen Zeitpunkt
Sie haben eine neue DAG geschrieben, die jede Stunde beginnen soll. Sie legen ein Stundenintervall ab heute um 14:00 Uhr fest und erinnern daran, es in ein paar Stunden zu überprüfen. Sie überprüfen es um 15:30 Uhr und stellen fest, dass während Ihre DAG funktioniert hat, Ihre Protokolle anzeigen, dass um 14:00 Uhr nur ein Fälligkeitsdatum aufgezeichnet wurde. Was ist um 15 Uhr passiert?
Bevor Sie in den Top-Fix-Modus wechseln (Sie werden nicht der Erste sein), können Sie sicher sein, dass dies das erwartete Verhalten ist. Die Funktionalität des Airflow-Schedulers ist etwas uninteressant (und sorgt in der Airflow-Community für einige Kontroversen), aber Sie werden es verstehen. Zwei Dinge:
- Airflow DAG
schedule_interval
.
,schedule_interval
. , DAG 2 , 3 . , Airflow , , 2 , .
Airflow, , . - Airflow UTC.
, , API, , , .
, DAG- . , DAG 19:00 12:00 .
1.10, Airflow , - DAG UTC .
2. DAG
, , DAG , - , .
,
datetime.now()
start_date
.
, DAG
,
. , , Airflow datetime.now()
.
DAG start_date
, Airflow , . Airflow DAG, datetime.now()
(.. ) , . , Airflow DAG 5-10 , .
DAG, (, datetime(2019,1,1)
) catchup=False ( ).
. DAG Airflow ( Play
). , , DAG, . , run_id
manual__
scheduled__
.
3. 503
Airflow , , -, , - -.
503, , -.
-
503 - ( deployment kubernetes), Airflow, Airflow. - , -.
, 503 , - (, Astronomer kubernetes CrashLoopBackOff
). deployment kubernetes, - - , (10 ), , . , .
deployment , , - DAG ( , ).
-?
Airflow 1.10 , Airflow 1.9, ( ), , 503- . , -.
Astronomer, - 5 AU (Astronomer Units).
-?
- ( ),web_server_master_timeout
web_server_worker_timeout
.
- Airflow , 503 (-). , deployment , , , 503.
?
API, JSON , - - .
Airflow DAG, ( ). , , , , .
, , Python.
4.
, .
Sensors
Airflow 1.10.1 , , , , . , , , , .
, X , (sensors?), X-3 . , (sensors?), , ( (sensors?) ).
:
DAG, .
, — , .
2. -
: Airflow v1.10.2 mode = reschedule
. , , up_for_reschedule
, .
5. ,
, , , , : Env
, + Worker Scheduler.
1. Env (Concurrency)
( ), — , DAG DAG ? , , , . , :
, (parallel) DAG , . « ».
ENV AIRFLOW__CORE__PARALLELISM=18
2. Concurrency DAG (dag_concurrency)
, DAG. « , DAG».
ENV AIRFLOW__CORE__DAG_CONCURRENCY=16
, « », .
ENV AIRFLOW__CORE__NON_POOLED_TASK_SLOT_COUNT=256
4. DAG (maxactiverunsperdag)
, DAG DAG.
ENV AIRFLOW__CORE__MAX_ACTIVE_RUNS 3
5. Concurrency (worker_concurrency)
, . , CeleryExecutor 16 . « ».
, , , dagconcurrency. 1 , ,
workerconcurrency
=parallelism
.
ENV AIRFLOW__CELERY__WORKER_CONCURRENCY=9
6. ()
- . «» DAG , DAG. , ,
airflow.cfg
.
2.
concurrency , , (deployment) . Astronomer, 5 AU Scheduler 10 AU Celery, .
, , :
- DAG , , , 2 3 «» .
- , , , , , « » , .
Executors Airflow Executors: Explained Guide.
6.
, - , .
- :
Failed to fetch log file from worker. Invalid URL 'http://:8793/log/staging_to_presentation_pipeline_v5/redshift_to_s3_Order_Payment_17461/2019-01-11T00:00:00+00:00/1.log': No host supplied
, :
() , , , .
/
log_fetch_timeout_sec
5 ( ).
( ), - (handshake) .
Astronomer,
Configure
Astronomer.
, 15 ?
Astronomer, — , . , 15 .
Celery, .
, Kubernetes.
Kubectl :
kubectl exec -it {worker_name} bash
~/logs
.DAG/TASK/RUN
.
.
, , , . , Airflow , - .
airflow.cfg
run_duration
.run_duration
,-1
, , , ,run_duration
,3600
, . . , , , .
Astronomer, :
-
AIRFLOW__SCHEDULER__RUN_DURATION={num_seconds_between_restarts}
Astronomer - Führen Sie
astro airflow deploy
die CLI aus, um alles sofort neu zu starten (wenn Sie Sellerie verwenden, können Sie die Kulanzfrist für die Beendigung des Arbeitnehmers nutzen, die Sie hier verwenden können, um vorhandene sofortige Fehler bei der Aufgabenausführung zu minimieren.)
Diese Liste basiert auf unserer Erfahrung bei der Unterstützung von Astronomer-Kunden bei grundlegenden Airflow-Problemen. Wir möchten jedoch von Ihnen hören. Kontaktieren Sie uns unter people@astronomer.io, wenn wir etwas verpasst haben, von dem Sie glauben, dass es nützlich wäre, es aufzunehmen.
Wenn Sie weitere Fragen haben oder Airflow-Unterstützung von unserem Team benötigen, kontaktieren Sie uns bitte hier.