פתרון בעיות שקשורות ל-DAG Processor

Managed Airflow (דור 3) | Managed Airflow (דור 2) | Managed Airflow (דור 1 מדור קודם)

הדף הזה מתייחס רק לבעיות שקשורות לעיבוד קובץ DAG. לבעיות בתזמון משימות, אפשר לעיין במאמר פתרון בעיות בתזמון משימות ב-Airflow.

תהליך עבודה של פתרון בעיות

בדיקת יומני מעבד DAG

אם יש לכם גרפים מכוונים מחזוריים (DAG) מורכבים, יכול להיות שמעבדי ה-DAG של Airflow לא ינתחו את כל ה-DAG. הדבר עלול להוביל לבעיות רבות עם התסמינים הבאים.

תסמינים:

  • אם מעבד DAG נתקל בבעיות בניתוח של DAG, יכול להיות שזה יוביל לשילוב של הבעיות שמופיעות ברשימה. אם קובצי ה-DAG נוצרים באופן דינמי, הבעיות האלה עשויות להיות משמעותיות יותר בהשוואה לקובצי DAG סטטיים.

    • אי אפשר לראות את ה-DAG בממשק המשתמש של Airflow ובממשק המשתמש של DAG.
    • אין תזמון להרצת DAG.
    • יש שגיאות ביומני המעבד של DAG, לדוגמה:
    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.
    

    או

    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.
    
  • משימות Airflow שמתוזמנות להרצה מבוטלות, והרצות DAG של DAGs שלא הצליחו לעבור ניתוח עשויות להיות מסומנות כfailed. לדוגמה:

    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.
    

פתרון:

  • הגדלת הפרמטרים שקשורים לניתוח DAG:

    • מגדילים את הערך [core]dagbag_import_timeout ל-120 שניות לפחות (או יותר, אם נדרש).

    • מגדילים את הערך [core]dag_file_processor_timeout ל-180 שניות לפחות (או יותר, אם נדרש). הערך הזה צריך להיות גבוה מ-[core]dagbag_import_timeout.

  • צריך לתקן או להסיר DAG שגורמים לבעיות במעבדי DAG.

בדיקת זמני הניתוח של DAG

כדי לבדוק אם הבעיה מתרחשת בזמן הניתוח של DAG, פועלים לפי השלבים הבאים.

המסוף

במסוף Google Cloud , אפשר להשתמש בדף Monitoring ובכרטיסייה Logs כדי לבדוק את זמני הניתוח של DAG.

בודקים את זמני הניתוח של DAG באמצעות דף הניטור של Managed Service for Apache Airflow:

  1. במסוף Google Cloud , עוברים לדף Environments.

    [מעבר אל Environments][console-list-env]

  2. ברשימת הסביבות, לוחצים על שם הסביבה. ייפתח הדף Monitoring.

  3. בכרטיסייה Monitoring, בוחרים באפשרות DAG Statistics ומעיינים בתרשים Total parse time for all DAG files כדי לזהות בעיות אפשריות. מומלץ לעקוב אחרי התרשים הזה במשך זמן מה כדי לזהות בעיות בניתוח של DAG במהלך כמה מחזורי ניתוח של DAG.

    הזמן הכולל של ניתוח כל קובצי ה-DAG מוצג בכרטיסייה &#39;מעקב&#39;.

בודקים את זמני הניתוח של DAG בכרטיסייה Managed Service for Apache Airflow Logs (יומנים של Managed Service for Apache Airflow):

  1. במסוף Google Cloud , עוברים לדף Environments.

    [מעבר אל Environments][console-list-env]

  2. ברשימת הסביבות, לוחצים על שם הסביבה. ייפתח הדף Monitoring.

  3. עוברים לכרטיסייה Logs (יומנים), ובעץ הניווט All logs (כל היומנים) בוחרים בקטע DAG processor manager (מנהל מעבד DAG).

  4. בודקים את היומנים של dag-processor-manager ומזהים בעיות אפשריות.

    ב-DAG processor logs יוצגו זמני הניתוח של DAG

gcloud

אפשר להשתמש בפקודה dags report כדי לראות את זמן הניתוח של כל ה-DAG.

gcloud composer environments run ENVIRONMENT_NAME \
    --location LOCATION \
    dags report

מחליפים את:

  • ENVIRONMENT_NAME בשם הסביבה.
  • LOCATION עם האזור שבו הסביבה ממוקמת.

הפלט של הפקודה אמור להיראות כך:

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

מחפשים את הערך של משך הזמן של כל אחד מה-DAG שמופיעים בטבלה. ערך גדול עשוי להצביע על כך שאחד מגרפי ה-DAG לא מיושם בצורה אופטימלית. מטבלת הפלט אפשר לזהות אילו DAGs כוללים זמן ניתוח ארוך.

פתרון בעיות בזמן הניתוח של DAG

בקטעים הבאים מתוארים תסמינים ופתרונות אפשריים לכמה בעיות נפוצות בזמן ניתוח DAG.

הגדרת מעבד ה-DAG להתעלמות מקבצים לא נחוצים

כדי לשפר את הביצועים של מעבד Airflow DAG, אפשר לדלג על קבצים מיותרים בתיקיית ה-DAG. מעבד ה-DAG של Airflow מתעלם מקבצים ותיקיות שצוינו בקובץ .airflowignore.

כדי שמעבד ה-DAG של Airflow יתעלם מקבצים מיותרים:

  1. יוצרים קובץ .airflowignore.
  2. בקובץ הזה, מפרטים את הקבצים והתיקיות שצריך להתעלם מהם.
  3. מעלים את הקובץ הזה לתיקייה /dags בקטגוריה של הסביבה.

מידע נוסף על פורמט הקובץ .airflowignore זמין במאמרי העזרה של Airflow.

תהליכי Airflow שהושעו ב-DAG

אתם יכולים להשהות DAG כדי להפסיק את ההרצה שלו. כך נחסכים משאבים של עובדי Airflow.

מעבדי Airflow DAG ממשיכים לנתח DAG מושהים. כדי לשפר את הביצועים של מעבדי DAG, אפשר להשתמש ב-.airflowignore או למחוק DAG מושהים מהתיקייה DAGs.

בעיות נפוצות

בקטעים הבאים מתוארים תסמינים ופתרונות אפשריים לכמה בעיות נפוצות בניתוח.

הזמן הקצוב לתפוגה של ייבוא טעינת DAG

תיאור הבעיה:

  • בממשק האינטרנט של Airflow, בחלק העליון של דף רשימת ה-DAG, מוצגת תיבת התראה אדומה Broken DAG: [/path/to/dagfile] Timeout.
  • ב-Cloud Monitoring: היומנים airflow-scheduler מכילים רשומות שדומות לרשומות הבאות:

    • ERROR - Process timed out
    • ERROR - Failed to import: /path/to/dagfile
    • AirflowTaskTimeout: Timeout

פתרון:

עוקפים את אפשרות ההגדרה dag_file_processor_timeout Airflow ומאפשרים יותר זמן לניתוח DAG:

קטע מפתח ערך
core dag_file_processor_timeout הערך החדש של הזמן הקצוב לתפוגה

‫DAG לא מוצג בממשק המשתמש של Airflow או בממשק המשתמש של DAG, והמתזמן לא מתזמן אותו

מעבד ה-DAG מנתח כל DAG לפני שהמתזמן יכול לתזמן אותו, ולפני ש-DAG הופך לגלוי בממשק המשתמש של Airflow או בממשק המשתמש של DAG.

אפשרויות ההגדרה הבאות של Airflow מגדירות את פסק הזמן לניתוח של DAG:

אם DAG לא מוצג בממשק המשתמש של Airflow או בממשק המשתמש של DAG:

  • בודקים את היומנים של מעבד ה-DAG אם מעבד ה-DAG מצליח לעבד את ה-DAG שלכם בצורה תקינה. במקרה של בעיות, יכול להיות שיופיעו רשומות היומן הבאות ביומנים של מעבד ה-DAG או של המתזמן:

    [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.
    
  • בודקים את היומנים של מתזמן הפגישות כדי לוודא שהוא פועל בצורה תקינה. במקרה של בעיות, יכול להיות שיופיעו רשומות היומן הבאות ביומני מתזמן:

    DagFileProcessorManager (PID=732) last sent a heartbeat 240.09 seconds ago! Restarting it
    Process timed out, PID: 68496
    

פתרונות:

  • מתקנים את כל השגיאות בניתוח ה-DAG. מעבד ה-DAG מנתח כמה DAG, ובמקרים נדירים שגיאות בניתוח של DAG אחד יכולות להשפיע לרעה על הניתוח של DAG אחרים.

  • אם ניתוח ה-DAG נמשך יותר ממספר השניות שמוגדר ב-[core]dagbag_import_timeout, צריך להגדיל את הזמן הקצוב לתפוגה.

  • אם ניתוח כל ה-DAGs נמשך יותר ממספר השניות שמוגדר ב-[core]dag_file_processor_timeout, צריך להגדיל את הזמן הקצוב לתפוגה.

  • אם ניתוח ה-DAG נמשך זמן רב, יכול להיות שהוא לא מיושם בצורה אופטימלית. לדוגמה, אם הוא קורא הרבה משתני סביבה או מבצע קריאות למסד נתונים של שירותים חיצוניים או של Airflow. כדאי להימנע ככל האפשר מביצוע פעולות כאלה בקטעים גלובליים של גרפים מכווני מחזור (DAG).

  • להגדיל את משאבי המעבד והזיכרון של מעבד ה-DAG כדי שהוא יוכל לפעול מהר יותר.

  • הפחתת התדירות של ניתוח DAG.

  • הפחתת העומס על מסד הנתונים של Airflow.

המאמרים הבאים