Tugas tidak berjalan? DAG tidak berfungsi? Log tidak ditemukan? Kami memiliki masalah yang sama. Berikut adalah daftar kesalahan umum dan beberapa perbaikan terkait yang perlu diingat saat men-debug penyebaran Airflow Anda.
Apache Airflow telah menjadi penjadwal tugas sumber terbuka terkemuka untuk hampir semua jenis pekerjaan, mulai dari melatih model pembelajaran mesin hingga orkestrasi ETL umum. Ini adalah alat yang sangat fleksibel yang dapat kami ketahui dari pengalaman mendukung proyek-proyek penting untuk lima orang startup dan tim Fortune 50.
Dengan demikian, alat yang banyak dianggap sebagai "kanvas kosong" yang kuat dapat dengan cepat menjadi pedang bermata dua jika Anda baru memulai. Dan sayangnya, tidak ada sumber daya dan praktik terbaik yang sangat melimpah selangkah atau dua langkah di atas fondasi dasar Apache Airflow.
Dalam upaya untuk mengisi celah ini sebanyak mungkin, kami telah mengumpulkan beberapa masalah paling umum yang dihadapi hampir setiap pengguna, tidak peduli seberapa berpengalaman dan besar tim mereka. Baik Anda baru mengenal Airflow atau pengguna yang mahir, lihat daftar kesalahan umum ini dan beberapa perbaikan terkait yang perlu diingat.
1. DAG Anda tidak berfungsi pada waktu yang ditentukan
Anda menulis DAG baru yang harus dimulai setiap jam. Anda menyetel interval per jam mulai hari ini pukul 14.00 dan menyetel pengingat untuk memeriksanya dalam beberapa jam. Anda memeriksanya pada pukul 15:30 dan menemukan bahwa meskipun DAG Anda berfungsi, log Anda menunjukkan bahwa hanya ada satu tanggal jatuh tempo yang tercatat pada pukul 14:00. Apa yang terjadi pada jam 3 sore?
Sebelum Anda beralih ke mode perbaikan atas (Anda tidak akan menjadi yang pertama), yakinlah bahwa ini adalah perilaku yang diharapkan. Fungsionalitas penjadwal Airflow agak berlawanan dengan intuisi (dan menyebabkan beberapa kontroversi di komunitas Airflow), tetapi Anda akan menguasainya. Dua hal:
- 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 - Jalankan
astro airflow deploy
melalui CLI untuk segera memulai ulang semuanya (jika Anda menggunakan Celery, Anda dapat memanfaatkan masa tenggang penghentian pekerja yang dapat Anda gunakan di sini untuk meminimalkan kegagalan langsung yang ada dalam eksekusi tugas)
Daftar ini didasarkan pada pengalaman kami dalam membantu pelanggan Astronomer dengan masalah Aliran Udara dasar, tetapi kami ingin mendengar dari Anda. Jangan ragu untuk menghubungi kami di people@astronomer.io jika kami melewatkan sesuatu yang menurut Anda akan berguna untuk disertakan.
Jika Anda memiliki pertanyaan lebih lanjut atau mencari dukungan Airflow dari tim kami, silakan hubungi kami di sini.