การดีบักและแก้ไขปัญหาใน Airflow

Apache Airflow เบื้องต้นด้วย Python

Mike Metzger

Data Engineer

ปัญหาที่พบบ่อย

  • Dag ไม่รันตามกำหนด
  • Dag ไม่โหลด
  • ข้อผิดพลาดทางไวยากรณ์

ภาพประกอบแสดงปัญหาที่พบบ่อยใน Airflow

Apache Airflow เบื้องต้นด้วย Python

Dag ไม่รันตามกำหนด

  • ยังไม่ครบรอบ schedule อย่างน้อยหนึ่งรอบ
    • ปรับ attribute ให้ตรงตามที่ต้องการ
  • ทรัพยากรระบบไม่เพียงพอ
    • เพิ่มทรัพยากรระบบ
    • เพิ่มจำนวนระบบ
    • เปลี่ยนการกำหนดเวลาของ Dag
Apache Airflow เบื้องต้นด้วย Python

Dag ไม่โหลด

  • Dag ไม่ปรากฏใน web UI
  • Dag ไม่ปรากฏใน airflow dags list

แนวทางแก้ไขที่เป็นไปได้

  • ตรวจสอบว่าไฟล์ Dag อยู่ในโฟลเดอร์ที่ถูกต้อง (ไฟล์ Dag นอกโฟลเดอร์ Dags จะไม่ถูกประมวลผล)
  • ตรวจสอบโฟลเดอร์ Dags ด้วย airflow info

ผลลัพธ์ terminal ของ airflow info แสดง path ของ dags_folder

Apache Airflow เบื้องต้นด้วย Python

ข้อผิดพลาดทางไวยากรณ์

  • สาเหตุที่พบบ่อยที่สุดที่ทำให้ไฟล์ Dag ไม่ปรากฏ
  • บางครั้งตรวจหาข้อผิดพลาดใน Dag ได้ยาก
  • 3 วิธีเร็ว:

    • ตรวจสอบ popup ข้อผิดพลาดใน Airflow UI

    • รัน airflow dags list-import-errors

    • รัน python3 <dagfile.py>

Apache Airflow เบื้องต้นด้วย Python

ข้อผิดพลาด import ใน Airflow UI

หน้าต้อนรับ Airflow แสดงการแจ้งเตือน Dag import error

รายละเอียด import error แสดง traceback ของ Dag

Apache Airflow เบื้องต้นด้วย Python

airflow dags list-import-errors

ผลลัพธ์ terminal ของ airflow dags list-import-errors แสดงข้อผิดพลาด

Apache Airflow เบื้องต้นด้วย Python

airflow dags reserialize

  • การเปลี่ยนแปลง Dag อาจไม่ปรากฏทันที
  • โดยค่าเริ่มต้น Airflow จะตรวจสอบการอัปเดต Dag ทุก 5 นาที
  • บังคับให้ตรวจสอบใหม่ได้ด้วย airflow dags reserialize

terminal รัน airflow dags reserialize เพื่อบังคับ refresh Dag

Apache Airflow เบื้องต้นด้วย Python

การรัน Python interpreter

python3 dagfile.py:

  • มีข้อผิดพลาด

terminal แสดงข้อผิดพลาดไวยากรณ์ Python จากการรันไฟล์ Dag ด้วย python3

  • ไม่มีข้อผิดพลาด

terminal กลับสู่ prompt หลังรันไฟล์ Dag ด้วย python3 โดยไม่มีข้อผิดพลาด

Apache Airflow เบื้องต้นด้วย Python

มาฝึกกันเถอะ!

Apache Airflow เบื้องต้นด้วย Python

Preparing Video For Download...