Managed Airflow (דור 3) | Managed Airflow (דור 2) | Managed Airflow (דור 1 מדור קודם)
Managed Airflow מסנכרן תיקיות ספציפיות בדלי של הסביבה עם רכיבי Airflow שפועלים בסביבה. מידע נוסף זמין במאמר נתונים שמאוחסנים ב-Cloud Storage. בדף הזה מתוארות בעיות שעלולות לשבש את תהליך הסנכרון ומוסבר איך לפתור אותן.
בעיות נפוצות
בקטעים הבאים מתוארים תסמינים ופתרונות אפשריים לכמה בעיות נפוצות בסנכרון קבצים.
טיפול במספר גדול של DAG ותוספים בתיקיות dags ותוספים
התוכן של התיקיות /dags ו-/plugins מסונכרן מהמאגר של הסביבה למערכות קבצים מקומיות של עובדים ומתזמנים של Airflow.
ככל שיש יותר נתונים שמאוחסנים בתיקיות האלה, כך הסנכרון יימשך זמן רב יותר. כדי לפתור מצבים כאלה:
הגבלת מספר הקבצים בתיקיות
/dagsו-/plugins. מאחסנים רק את המינימום של הקבצים הנדרשים.להגדיל את נפח האחסון שזמין לתזמון ולעובדים של Airflow.
כדי שפעולת הסנכרון תתבצע מהר יותר, צריך להגדיל את המעבד (CPU) והזיכרון של מתזמני Airflow ועובדי Airflow.
אם יש מספר גדול מאוד של DAG, צריך לחלק את ה-DAG לאצוות, לכווץ אותן לארכיוני zip ולפרוס את הארכיונים האלה בתיקייה
/dags. הגישה הזו מזרזת את תהליך הסנכרון של ה-DAG. רכיבי Airflow מחלצים ארכיוני zip לפני עיבוד DAG.יצירת DAG באופן פרוגרמטי עשויה להיות גם שיטה להגבלת מספר קובצי ה-DAG שמאוחסנים בתיקייה
/dags. כדי להימנע מבעיות בתזמון ובהרצה של DAG שנוצר באופן פרוגרמטי, אפשר לעיין בקטע DAGs שנוצרו באופן פרוגרמטי בדף לפתרון בעיות ב-DAGs.
דפוסי אנטי-תבניות שמשפיעים על סנכרון של DAG ותוספים עם מתזמנים, עובדים ושרתי אינטרנט
Managed Airflow מסנכרן את התוכן של התיקיות /dags ו-/plugins עם המתזמנים והעובדים. אובייקטים מסוימים בתיקיות /dags ו-/plugins
עלולים למנוע את הסנכרון הזה או להאט אותו.
התיקייה
/dagsמסונכרנת עם מתזמנים ועובדים.התיקייה הזו לא מסונכרנת עם שרת האינטרנט.
התיקייה
/pluginsמסונכרנת עם מתזמני משימות, עובדים ושרתי אינטרנט.
יכול להיות שתיתקלו בבעיות הבאות:
העליתם קבצים דחוסים באמצעות gzip שמשתמשים בהמרת קידוד של דחיסה לתיקיות
/dagsו-/plugins. זה קורה בדרך כלל אם משתמשים בדגל--gzip-local-allבפקודהgcloud storage cpכדי להעלות נתונים לקטגוריה.פתרון: מוחקים את האובייקט שנעשה בו שימוש בתעבורת נתונים מקודדת בדחיסה ומעלים אותו מחדש לקטגוריה.
אחד מהאובייקטים נקרא
.. אובייקט כזה לא מסונכרן עם מתזמנים ועובדים, ויכול להיות שהוא יפסיק להסתנכרן לגמרי.פתרון: משנים את שם האובייקט.
לתיקייה ולקובץ Python של DAG יש את אותו שם, לדוגמה
a.py. במקרה כזה, קובץ ה-DAG לא מסונכרן כמו שצריך עם רכיבי Airflow.פתרון: מסירים את התיקייה ששמה זהה לשם קובץ ה-DAG Python.
אחד מהאובייקטים בתיקיות
/dagsאו/pluginsמכיל את הסמל/בסוף השם של האובייקט. אובייקטים כאלה עלולים להפריע לתהליך הסנכרון כי הסמל/מציין שאובייקט הוא תיקייה ולא קובץ.פתרון: מסירים את הסמל
/משם האובייקט הבעייתי.לא כדאי לאחסן קבצים מיותרים בתיקיות
/dagsו-/plugins.לפעמים, תוספים ו-DAG שאתם מטמיעים מגיעים עם קבצים נוספים, כמו קבצים שמאחסנים בדיקות לרכיבים האלה. הקבצים האלה מסונכרנים עם העובדים והמתזמנים ומשפיעים על הזמן שנדרש כדי להעתיק את הקבצים האלה למתזמנים, לעובדים ולשרתי האינטרנט.
פתרון: לא מאחסנים קבצים נוספים ומיותרים בתיקיות
/dagsו-/plugins.
תהליכי Worker ותהליכי תזמון יוצרים שגיאות מסוג 'זוהי ספריה' או 'זהו קובץ'
הבעיה הזו מתרחשת כי לאובייקטים יכול להיות מרחב שמות חופף ב-Cloud Storage, ובמקביל רכיבי Airflow בסביבה שלכם משתמשים במערכות קבצים רגילות של Linux. ב-Cloud Storage, אפשר להוסיף לקטגוריה גם תיקייה וגם אובייקט עם אותו שם. כשהקטגוריה מסונכרנת עם רכיבי Airflow של הסביבה, נוצרת שגיאה:
- אם האובייקט סונכרן קודם, התוכן של התיקייה לא יסונכרן ותופיע השגיאה
Is a file. - אם התיקייה סונכרנה קודם, האובייקט לא מסונכרן ונוצרת השגיאה
Is a directory.
דוגמה:
Done [Errno 21] Is a directory: '/home/airflow/gcs/dags/...'
שתי השגיאות האלה עלולות לגרום לכשלים במשימות בגלל קבצים חסרים. במקרים מסוימים, תהליך הסנכרון עלול להיות מופרע, ואובייקטים אחרים בדלי של הסביבה לא יסונכרנו גם כן.
הפתרון:
כדי לפתור את הבעיה, צריך לוודא שאין חפיפה בין מרחבי שמות בדלי של הסביבה.
לדוגמה, אם גם /dags/misc (אובייקט) וגם /dags/misc/example_file.txt (אובייקט אחר) נמצאים בקטגוריה, צריך לשנות את השם של האובייקט misc או של התיקייה שבה נמצא example_file.txt, כדי שלא יהיה חפיפה.