Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
Halaman ini hanya merujuk pada masalah terkait Pemrosesan File DAG. Untuk masalah penjadwalan tugas, lihat Memecahkan masalah penjadwal Airflow.
Memecahkan Masalah Alur Kerja
Memeriksa log Prosesor DAG
Jika Anda memiliki DAG yang kompleks, Pemroses DAG mungkin tidak mengurai semua DAG Anda. Hal ini dapat menyebabkan banyak masalah yang memiliki gejala berikut.
Gejala:
Jika Pemroses DAG mengalami masalah saat mengurai DAG Anda, hal ini dapat menyebabkan kombinasi masalah yang tercantum di sini. Jika DAG dibuat secara dinamis, masalah ini mungkin lebih berdampak dibandingkan dengan DAG statis.
DAG tidak terlihat di UI Airflow dan UI DAG.
DAG tidak dijadwalkan untuk dieksekusi.
Terjadi error dalam log pemroses DAG, misalnya:
dag-processor-manager [2023-04-21 21:10:44,510] {manager.py:1144} ERROR - Processor for /home/airflow/gcs/dags/dag-example.py with PID 68311 started at 2023-04-21T21:09:53.772793+00:00 has timed out, killing it.
atau
dag-processor-manager [2023-04-26 06:18:34,860] {manager.py:948} ERROR - Processor for /home/airflow/gcs/dags/dag-example.py exited with return code 1.
Prosesor DAG mengalami masalah yang menyebabkan dimulai ulang.
Tugas Airflow yang dijadwalkan untuk dieksekusi dibatalkan dan operasi DAG untuk DAG yang gagal diuraikan mungkin ditandai sebagai
failed
. Contoh:airflow-scheduler Failed to get task '<TaskInstance: dag-example.task1--1 manual__2023-04-17T10:02:03.137439+00:00 [removed]>' for dag 'dag-example'. Marking it as removed.
Solusi:
Tingkatkan parameter yang terkait dengan penguraian DAG:
Tingkatkan dagbag-import-timeout menjadi setidaknya 120 detik (atau lebih, jika diperlukan).
Tingkatkan dag-file-processor-timeout menjadi minimal 180 detik (atau lebih, jika diperlukan). Nilai ini harus lebih tinggi dari
dagbag-import-timeout
.
Perbaiki atau hapus DAG yang menyebabkan masalah pada pemroses DAG.
Memeriksa waktu penguraian DAG
Untuk memverifikasi apakah masalah terjadi pada waktu parsing DAG, ikuti langkah-langkah berikut.
Konsol
Di konsol Google Cloud , Anda dapat menggunakan halaman Monitoring dan tab Logs untuk memeriksa waktu parsing DAG.
Periksa waktu parsing DAG dengan halaman Monitoring Cloud Composer:
Di Google Cloud console, buka halaman Environments.
Dalam daftar lingkungan, klik nama lingkungan Anda. Halaman Monitoring akan terbuka.
Di tab Monitoring, tinjau diagram Total waktu penguraian untuk semua file DAG di bagian DAG runs dan identifikasi kemungkinan masalah.
Periksa waktu penguraian DAG dengan tab Log Cloud Composer:
Di Google Cloud console, buka halaman Environments.
Dalam daftar lingkungan, klik nama lingkungan Anda. Halaman Monitoring akan terbuka.
Buka tab Logs, lalu dari struktur navigasi All logs, pilih bagian DAG processor manager.
Tinjau log
dag-processor-manager
dan identifikasi kemungkinan masalah.
gcloud
Gunakan perintah dags report
untuk melihat waktu parsing semua DAG Anda.
gcloud composer environments run ENVIRONMENT_NAME \
--location LOCATION \
dags report
Ganti:
ENVIRONMENT_NAME
dengan nama lingkungan.LOCATION
dengan region tempat lingkungan berada.
Output perintah terlihat mirip dengan berikut ini:
Executing within the following Kubernetes cluster namespace: composer-2-0-31-airflow-2-3-3
file | duration | dag_num | task_num | dags
======================+================+=========+==========+===================
/manydagsbig.py | 0:00:00.038334 | 2 | 10 | serial-0,serial-0
/airflow_monitoring.py| 0:00:00.001620 | 1 | 1 | airflow_monitoring
Cari nilai durasi untuk setiap DAG yang tercantum dalam tabel. Nilai yang besar dapat menunjukkan bahwa salah satu DAG Anda tidak diterapkan secara optimal. Dari tabel output, Anda dapat mengidentifikasi DAG mana yang memiliki waktu parsing yang lama.
Memecahkan masalah pada waktu penguraian DAG
Bagian berikut menjelaskan gejala dan potensi perbaikan untuk beberapa masalah umum pada waktu penguraian DAG.
Jumlah thread terbatas
Mengizinkan pengelola pemroses DAG hanya menggunakan sejumlah kecil thread dapat memengaruhi waktu parsing DAG Anda.
Untuk mengatasi masalah ini, ganti opsi konfigurasi Airflow berikut:
Ganti parameter
parsing_processes
:Bagian Kunci Nilai Catatan scheduler
parsing_processes
NUMBER_OF_CPUs_IN_SCHEDULER - 1
Ganti NUMBER_OF_CPUs_IN_SCHEDULER
dengan jumlah CPU
dalam penjadwal.
Membuat pemroses DAG mengabaikan file yang tidak diperlukan
Anda dapat meningkatkan performa pemroses DAG dengan melewati file yang tidak diperlukan di folder DAG. Prosesor DAG mengabaikan file dan folder yang ditentukan dalam file .airflowignore
.
Agar pemroses DAG mengabaikan file yang tidak diperlukan:
- Buat file
.airflowignore
. - Dalam file ini, cantumkan file dan folder yang harus diabaikan.
- Upload file ini ke folder
/dags
di bucket lingkungan Anda.
Untuk mengetahui informasi selengkapnya tentang format file .airflowignore
, lihat
dokumentasi Airflow.
Airflow memproses DAG yang dijeda
Pengguna Airflow menjeda DAG untuk menghindari eksekusinya. Hal ini menghemat siklus pemrosesan pekerja Airflow.
Airflow akan terus mem-parsing DAG yang dijeda. Jika Anda benar-benar ingin meningkatkan performa pemroses DAG, gunakan .airflowignore
atau hapus DAG yang dijeda dari folder DAG.
Masalah Umum
Bagian berikut menjelaskan gejala dan potensi perbaikan untuk beberapa masalah parsing umum.
Waktu tunggu impor pemuatan DAG habis
Gejala:
- Di antarmuka web Airflow, di bagian atas halaman daftar DAG, kotak peringatan
merah menampilkan
Broken DAG: [/path/to/dagfile] Timeout
. Di Cloud Monitoring: Log
airflow-scheduler
berisi entri yang mirip dengan:ERROR - Process timed out
ERROR - Failed to import: /path/to/dagfile
AirflowTaskTimeout: Timeout
Perbaikan:
Ganti opsi konfigurasi Airflow dag_file_processor_timeout
dan izinkan lebih banyak waktu untuk penguraian DAG:
Bagian | Kunci | Nilai |
---|---|---|
core |
dag_file_processor_timeout |
Nilai waktu tunggu baru |
DAG tidak terlihat di UI Airflow atau UI DAG dan scheduler tidak menjadwalkannya
Prosesor DAG mengurai setiap DAG sebelum dapat dijadwalkan oleh penjadwal dan sebelum DAG menjadi terlihat di UI Airflow atau UI DAG.
Opsi konfigurasi Airflow berikut menentukan waktu tunggu untuk mem-parsing DAG:
[core]dagbag_import_timeout
menentukan berapa banyak waktu yang dimiliki pemroses DAG untuk mengurai satu DAG.[core]dag_file_processor_timeout
menentukan total waktu yang dapat dihabiskan pemroses DAG untuk mengurai semua DAG.
Jika DAG tidak terlihat di UI Airflow atau UI DAG:
Periksa log pemroses DAG jika pemroses DAG dapat memproses DAG Anda dengan benar. Jika ada masalah, Anda mungkin melihat entri log berikut di log pemroses DAG atau penjadwal:
[2020-12-03 03:06:45,672] {dag_processing.py:1334} ERROR - Processor for /usr/local/airflow/dags/example_dag.py with PID 21903 started at 2020-12-03T03:05:55.442709+00:00 has timed out, killing it.
Periksa log penjadwal untuk melihat apakah penjadwal berfungsi dengan benar. Jika terjadi masalah, Anda mungkin melihat entri log berikut di log penjadwal:
DagFileProcessorManager (PID=732) last sent a heartbeat 240.09 seconds ago! Restarting it Process timed out, PID: 68496
Solusi:
Perbaiki semua error penguraian DAG. Proses DAG menguraikan beberapa DAG, dan dalam kasus yang jarang terjadi, error penguraian satu DAG dapat berdampak negatif pada penguraian DAG lainnya.
Jika parsing DAG Anda memerlukan waktu lebih dari jumlah detik yang ditentukan dalam
[core]dagbag_import_timeout
, maka tingkatkan waktu tunggu ini.Jika penguraian semua DAG Anda memerlukan waktu lebih dari jumlah detik yang ditentukan dalam
[core]dag_file_processor_timeout
, maka tingkatkan waktu tunggu ini.Jika DAG Anda memerlukan waktu lama untuk diuraikan, hal ini juga dapat berarti bahwa DAG tidak diterapkan secara optimal. Misalnya, jika membaca banyak variabel lingkungan, atau melakukan panggilan ke layanan eksternal atau database Airflow. Sebisa mungkin, hindari melakukan operasi tersebut di bagian global DAG.
Tingkatkan resource CPU dan memori untuk Scheduler agar dapat bekerja lebih cepat.
Tingkatkan jumlah proses pemroses DAG agar penguraian dapat dilakukan lebih cepat. Anda dapat melakukannya dengan meningkatkan nilai
[scheduler]parsing_process
.