העברת סביבות ל-Airflow 2

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

בדף הזה מוסבר איך להעביר DAG, נתונים והגדרות מסביבות Airflow 1.10.* קיימות לסביבות עם Airflow 2 וגרסאות מאוחרות יותר של Airflow.

מדריכים אחרים להעברת נתונים

מאת אל ‏Method מדריך
‫Managed Airflow (דור 3), ‏ Airflow 2 ‫Managed Airflow (דור 3), Airflow 3 העברה ידנית זה לצד זה מדריך להעברה ידנית
‫Managed Airflow (דור 2) ‫Managed Airflow (דור 3) זה לצד זה, באמצעות סקריפט ההעברה מדריך להעברת סקריפטים
‫Managed Airflow (דור 2) ‫Managed Airflow (דור 3) זו לצד זו, באמצעות תמונות מצב מדריך להעברת תמונות מצב
‫Managed Airflow (Legacy Gen 1), Airflow 2 ‫Managed Airflow (דור 3) זו לצד זו, באמצעות תמונות מצב מדריך להעברת תמונות מצב
‫Managed Airflow (Legacy Gen 1), Airflow 2 ‫Managed Airflow (דור 2) זו לצד זו, באמצעות תמונות מצב מדריך להעברת תמונות מצב
‫Managed Airflow (Legacy Gen 1), Airflow 2 ‫Managed Airflow (דור 2) העברה ידנית זה לצד זה מדריך להעברה ידנית
‫Managed Airflow (Legacy Gen 1), Airflow 1 ‫Managed Airflow (דור 2), ‏ Airflow 2 זו לצד זו, באמצעות תמונות מצב מדריך להעברת תמונות מצב
‫Managed Airflow (Legacy Gen 1), Airflow 1 ‫Managed Airflow (דור 2), ‏ Airflow 2 העברה ידנית זה לצד זה מדריך להעברה ידנית
‫Managed Airflow (Legacy Gen 1), Airflow 1 ‫Managed Airflow (Legacy Gen 1), Airflow 2 העברה ידנית זה לצד זה במדריך הזה

שדרוגים זה לצד זה

‫Managed Airflow מספק את הסקריפט להעברת מסד נתונים של Managed Airflow כדי להעביר את מסד הנתונים של המטא-נתונים, את DAG, את הנתונים ואת הפלאגינים מסביבות Managed Airflow עם Airflow 1.10.14 ו-Airflow 1.10.15 לסביבות Managed Airflow קיימות עם Airflow 2.0.1 ומגרסאות Airflow מאוחרות יותר.

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

לפני שמתחילים

לפני שמתחילים להשתמש בסביבות Managed Airflow עם Airflow 2, כדאי להכיר את השינויים ש-Airflow 2 מביא לסביבות Managed Airflow.

כמה כלי תזמון

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

Celery+Kubernetes Executor

‫Airflow 2 Celery+Kubernetes Executor נתמך ב-Managed Airflow (דור 3).

שינויי תוכנה שעלולים לגרום לכשלים

ב-Airflow 2 בוצעו הרבה שינויים משמעותיים, שחלקם עלולים לגרום לבעיות:

ההבדלים בין סביבות עם Airflow 2 לבין סביבות עם Airflow 1.10.*

הבדלים עיקריים בין סביבות Managed Airflow עם Airflow 1.10.* לבין סביבות עם Airflow 2:

  • בסביבות עם Airflow 2 משתמשים ב-Python 3.8. זו גרסה חדשה יותר מזו שמשמשת בסביבות Airflow 1.10.*. אין תמיכה ב-Python 2,‏ Python 3.6 ו-Python 3.7.
  • ב-Airflow 2 נעשה שימוש בפורמט CLI שונה. ‫Managed Airflow תומך בפורמט החדש בסביבות עם Airflow 2 באמצעות הפקודה gcloud composer environments run.
  • חבילות PyPI שמותקנות מראש שונות בסביבות Airflow 2. רשימה של חבילות PyPI שמותקנות מראש מופיעה במאמר רשימת הגרסאות של Managed Airflow.
  • סריאליזציית DAG תמיד מופעלת ב-Airflow 2. כתוצאה מכך, טעינת DAG אסינכרונית כבר לא נדרשת, והיא לא נתמכת ב-Airflow 2. כתוצאה מכך, הגדרת הפרמטרים [core]store_serialized_dags ו-[core]store_dag_code לא נתמכת ב-Airflow 2, וניסיונות להגדיר אותם ידווחו כשגיאות.
  • אין תמיכה בפלאגינים של שרת האינטרנט של Airflow. ההגדרה הזו לא משפיעה על תוספים של מתזמנים או של עובדים, כולל אופרטורים וחיישנים של Airflow.
  • בסביבות Airflow 2, תפקיד המשתמש שמוגדר כברירת מחדל ב-Airflow הוא Op. בסביבות עם Airflow 1.10.*, תפקיד ברירת המחדל הוא Admin.

שלב 1: בדיקת התאימות ל-Airflow 2

כדי לבדוק אם יש התנגשויות פוטנציאליות עם Airflow 2, אפשר לעיין במדריך בנושא שדרוג ל-Airflow 2.0 ומעלה, בקטע בנושא שדרוג DAGs.

בעיה נפוצה אחת שאתם עשויים להיתקל בה קשורה לנתיבי ייבוא לא תואמים. מידע נוסף על פתרון בעיית התאימות הזו מופיע בקטע על ספקי backport במדריך בנושא שדרוג ל-Airflow 2.0 ואילך.

שלב 2: יצירת סביבת Airflow 2, העברת ביטולים של הגדרות ומשתני סביבה

יוצרים סביבת Airflow 2 ומעבירים את ביטולי ברירת המחדל של ההגדרות ואת משתני הסביבה:

  1. פועלים לפי השלבים ליצירת סביבה. לפני שיוצרים סביבה, צריך גם לציין שינויים בהגדרות ומשתני סביבה, כמו שמוסבר בהמשך.

  2. כשבוחרים תמונה, בוחרים תמונה עם Airflow 2.

  3. העברה ידנית של פרמטרים להגדרה מהסביבה של Airflow 1.10.* לסביבה החדשה של Airflow 2.

    המסוף

    1. כשיוצרים סביבה, מרחיבים את הקטע Networking, Airflow config overrides, and additional features (רשת, ביטול ברירת מחדל של הגדרות Airflow ותכונות נוספות).

    2. בקטע Airflow configuration overrides (שינויים בהגדרות של Airflow), לוחצים על Add Airflow configuration override (הוספת שינוי בהגדרות של Airflow).

    3. מעתיקים את כל ההגדרות שמוגדרות כברירת מחדל מהסביבה של Airflow 1.10.*.

      חלק מאפשרויות ההגדרה משתמשות בשם ובקטע שונים ב-Airflow 2. מידע נוסף זמין במאמר בנושא שינויים בהגדרות.

    4. בקטע משתני סביבה, לוחצים על הוספת משתנה סביבה.

    5. מעתיקים את כל משתני הסביבה מהסביבה שלכם ב-Airflow 1.10.*.

    6. לוחצים על יצירה כדי ליצור סביבה.

שלב 3: התקנת חבילות PyPI בסביבת Airflow 2

אחרי שיוצרים את סביבת Airflow 2, מתקינים בה חבילות PyPI:

המסוף

  1. נכנסים לדף Environments במסוף Google Cloud .

    מעבר אל Environments

  2. בוחרים את סביבת Airflow 2.

  3. עוברים לכרטיסייה PyPI packages ולוחצים על Edit (עריכה).

  4. מעתיקים את דרישות החבילה של PyPI מהסביבה של Airflow 1.10.* ‎. לוחצים על שמירה ומחכים עד שהסביבה תתעדכן.

    בגלל שבסביבות Airflow 2 נעשה שימוש בקבוצה שונה של חבילות שהותקנו מראש ובגרסה שונה של Python, יכול להיות שתיתקלו בקונפליקטים בחבילות PyPI שקשה לפתור.

שלב 4: העברת משתנים ומאגרי משתנים ל-Airflow 2

‫Airflow 1.10.* תומך בייצוא של משתנים ומאגרי משאבים לקובצי JSON. אחר כך תוכלו לייבא את הקבצים האלה לסביבת Airflow 2.

צריך להעביר מאגרי כתובות רק אם יש לכם מאגרי כתובות בהתאמה אישית שאינם default_pool. אחרת, מדלגים על פקודות שמייצאות ומייבאות מאגרי כתובות.

gcloud

  1. ייצוא משתנים מהסביבה שלכם ב-Airflow 1.10.*:

    gcloud composer environments run AIRFLOW_1_ENV \
        --location AIRFLOW_1_LOCATION \
         variables -- -e /home/airflow/gcs/data/variables.json
    

    מחליפים את:

    • AIRFLOW_1_ENV בשם של סביבת Airflow 1.10.* ‎.
    • AIRFLOW_1_LOCATION עם האזור שבו הסביבה ממוקמת.
  2. ייצוא מאגרי משאבים מסביבת Airflow 1.10.*:

    gcloud composer environments run AIRFLOW_1_ENV \
        --location AIRFLOW_1_LOCATION \
         pool -- -e /home/airflow/gcs/data/pools.json
    
  3. מקבלים את ה-URI של קטגוריית הסביבה של Airflow 2.

    1. מריצים את הפקודה הבאה:

      gcloud composer environments describe AIRFLOW_2_ENV \
          --location AIRFLOW_2_LOCATION \
           --format="value(config.dagGcsPrefix)"
      

      מחליפים את:

      • AIRFLOW_2_ENV בשם סביבת Airflow 2.
      • AIRFLOW_2_LOCATION באזור שבו הסביבה נמצאת.
    2. בפלט, מסירים את התיקייה /dags. התוצאה היא ה-URI של דלי הסביבה של Airflow 2.

      לדוגמה, שינוי של gs://us-central1-example-916807e1-bucket/dags ל-gs://us-central1-example-916807e1-bucket.

  4. העברת קובצי JSON עם משתנים ומאגרי משאבים לסביבת Airflow 2:

    gcloud composer environments storage data export \
        --destination=AIRFLOW_2_BUCKET/data \
        --environment=AIRFLOW_1_ENV \
        --location=AIRFLOW_1_LOCATION \
        --source=variables.json
    
    gcloud composer environments storage data export \
        --destination=AIRFLOW_2_BUCKET/data \
        --environment=AIRFLOW_1_ENV \
        --location=AIRFLOW_1_LOCATION \
        --source=pools.json
    

    מחליפים את AIRFLOW_2_BUCKET במזהה המשאבים האחיד (URI) של קטגוריית הסביבה של Airflow 2 שהתקבל בשלב הקודם.

  5. ייבוא משתנים ומאגרי משאבים ל-Airflow 2:

    gcloud composer environments run \
        AIRFLOW_2_ENV \
        --location AIRFLOW_2_LOCATION \
        variables import \
        -- /home/airflow/gcs/data/variables.json
    
    gcloud composer environments run \
        AIRFLOW_2_ENV \
        --location AIRFLOW_2_LOCATION \
        pools import \
        -- /home/airflow/gcs/data/pools.json
    
  6. בודקים שהמשתנים והמאגרים יובאו:

    gcloud composer environments run \
        AIRFLOW_2_ENV \
        --location AIRFLOW_2_LOCATION \
        variables list
    
    gcloud composer environments run \
        AIRFLOW_2_ENV \
        --location AIRFLOW_2_LOCATION \
        pools list
    
  7. מסירים קובצי JSON מהקטגוריות:

    gcloud composer environments storage data delete \
        variables.json \
        --environment=AIRFLOW_2_ENV \
        --location=AIRFLOW_2_LOCATION
    
    gcloud composer environments storage data delete \
        pools.json \
        --environment=AIRFLOW_2_ENV \
        --location=AIRFLOW_2_LOCATION
    
    gcloud composer environments storage data delete \
        variables.json \
        --environment=AIRFLOW_1_ENV \
        --location=AIRFLOW_1_LOCATION
    
    gcloud composer environments storage data delete \
        pools.json \
        --environment=AIRFLOW_1_ENV \
        --location=AIRFLOW_1_LOCATION
    

שלב 5: מעבירים נתונים אחרים מקטגוריית Airflow 1.10.*

gcloud

  1. העברה של תוספים לסביבת Airflow 2. כדי לעשות זאת, מייצאים את הפלאגינים ממאגר Airflow 1.10.* לתיקייה /plugins במאגר Airflow 2:

    gcloud composer environments storage plugins export \
        --destination=AIRFLOW_2_BUCKET/plugins \
        --environment=AIRFLOW_1_ENV \
        --location=AIRFLOW_1_LOCATION
    
  2. בודקים שהתיקייה /plugins יובאה בהצלחה:

    gcloud composer environments storage plugins list \
        --environment=AIRFLOW_2_ENV \
        --location=AIRFLOW_2_LOCATION
    
  3. מייצאים את התיקייה /data מהסביבה של Airflow 1.10.* לסביבה של Airflow 2:

        gcloud composer environments storage data export \
            --destination=AIRFLOW_2_BUCKET/data \
            --environment=AIRFLOW_1_ENV \
            --location=AIRFLOW_1_LOCATION
    
  4. בודקים שהתיקייה /data יובאה בהצלחה:

    gcloud composer environments storage data list \
        --environment=AIRFLOW_2_ENV \
        --location=AIRFLOW_2_LOCATION
    

שלב 6: העברת חיבורים ומשתמשים

ב-Airflow 1.10.* אין תמיכה בייצוא של משתמשים וחיבורים. כדי להעביר משתמשים וחיבורים, צריך ליצור באופן ידני חשבונות משתמשים וחיבורים חדשים בסביבת Airflow 2.

gcloud

  1. כדי לקבל רשימה של חיבורים בסביבת Airflow 1.10.*, מריצים את הפקודה:

    gcloud composer environments run AIRFLOW_1_ENV \
        --location AIRFLOW_1_LOCATION \
         connections -- --list
    
  2. כדי ליצור חיבור חדש בסביבת Airflow 2, מריצים את הפקודה connections Airflow CLI דרך gcloud. לדוגמה:

    gcloud composer environments run \
        AIRFLOW_2_ENV \
        --location AIRFLOW_2_LOCATION \
        connections add \
        -- --conn-host postgres.example.com \
        --conn-port 5432 \
        --conn-type postgres \
        --conn-login example_user \
        --conn-password example_password \
        --conn-description "Example connection" \
        example_connection
    
  3. כדי לראות רשימה של משתמשים בסביבת Airflow 1.10.* ‎:

    1. פותחים את ממשק האינטרנט של Airflow בסביבת Airflow 1.10.*.

    2. עוברים אל ניהול > משתמשים.

  4. כדי ליצור חשבון משתמש חדש בסביבת Airflow 2, מריצים את הפקודה users create ב-CLI של Airflow דרך gcloud. לדוגמה:

    gcloud composer environments run \
        AIRFLOW_2_ENV \
        --location AIRFLOW_2_LOCATION \
        users create \
        -- --username example_username \
        --firstname Example-Name \
        --lastname Example-Surname \
        --email example-user@example.com \
        --use-random-password \
        --role Admin
    

שלב 7: מוודאים שגרפי ה-DAG מוכנים ל-Airflow 2

לפני שמעבירים DAG לסביבת Airflow 2, צריך לוודא:

  1. ה-DAGs פועלים בהצלחה ואין בעיות תאימות נוספות.

  2. ב-DAGs נעשה שימוש בהצהרות ייבוא נכונות.

    לדוגמה, הצהרת הייבוא החדשה של BigQueryCreateDataTransferOperator יכולה להיראות כך:

    from airflow.providers.google.cloud.operators.bigquery_dts \
        import BigQueryCreateDataTransferOperator
    
  3. ‫DAGs שלכם משודרגים ל-Airflow 2. השינוי הזה תואם ל-Airflow מגרסה 1.10.14 ואילך.

שלב 8: מעבירים DAG לסביבת Airflow 2

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

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

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

מניעת הפעלות מקבילות של DAG

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

קטע מפתח ערך
core dags_are_paused_at_creation True

מניעת הפעלות מיותרות או חסרות של DAG

מציינים תאריך התחלה סטטי חדש ב-DAG שמעבירים לסביבת Airflow 2.

כדי למנוע פערים וחפיפות בתאריכי ההפעלה, ההרצה הראשונה של DAG צריכה להתבצע בסביבת Airflow 2 בהופעה הבאה של מרווח התזמון. כדי לעשות זאת, צריך להגדיר את תאריך ההתחלה החדש ב-DAG כך שיהיה לפני התאריך של ההרצה האחרונה בסביבת Airflow 1.10.*.

לדוגמה, אם ה-DAG שלכם פועל בשעות 15:00, ‏ 17:00 ו-21:00 מדי יום בסביבת Airflow 1.10.*, ההפעלה האחרונה של ה-DAG התרחשה בשעה 15:00, ואתם מתכננים להעביר את ה-DAG בשעה 15:15, אז תאריך ההתחלה של סביבת Airflow 2 יכול להיות היום בשעה 14:45. אחרי שמפעילים את ה-DAG בסביבת Airflow 2, ‏ Airflow מתזמן הפעלה של DAG לשעה 17:00.

דוגמה נוספת: אם ה-DAG פועל בשעה 00:00 בכל יום בסביבת Airflow 1.10.*‎, ההפעלה האחרונה של ה-DAG התרחשה בשעה 00:00 ב-26 באפריל 2021, ואתם מתכננים להעביר את ה-DAG בשעה 13:00 ב-26 באפריל 2021, אז תאריך ההתחלה של סביבת Airflow 2 יכול להיות 23:45 ב-25 באפריל 2021. אחרי שמפעילים את ה-DAG בסביבת Airflow 2,‏ Airflow מתזמן הפעלה של DAG לשעה 00:00 ב-27 באפריל 2021.

העברה של קובצי DAG אחד אחד לסביבת Airflow 2

כדי להעביר כל DAG, פועלים לפי ההליך הבא:

  1. מוודאים שתאריך ההתחלה החדש ב-DAG מוגדר כמו שמתואר בקטע הקודם.

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

  3. בממשק האינטרנט של Airflow, עוברים אל DAGs ובודקים אם יש שגיאות תחביר שדווחו ב-DAG.

  4. בזמן שבו אתם מתכננים להעביר את ה-DAG:

    1. משהים את ה-DAG בסביבת Airflow 1.10.*.

    2. מבטלים את ההשהיה של ה-DAG בסביבת Airflow 2.

    3. בודקים שהרצת ה-DAG החדשה מתוזמנת לשעה הנכונה.

    4. מחכים להרצת DAG בסביבת Airflow 2 ובודקים אם ההרצה הצליחה.

  5. בהתאם לשאלה אם הרצת ה-DAG הצליחה:

    • אם ההרצה של ה-DAG מצליחה, אפשר להמשיך ולהשתמש ב-DAG מהסביבה של Airflow 2. בסופו של דבר, כדאי למחוק את גרסת ה-DAG של Airflow 1.10.*.

    • אם הפעלת ה-DAG נכשלה, צריך לנסות לפתור את הבעיה ב-DAG עד שהיא תפעל בהצלחה ב-Airflow 2.

      במקרה הצורך, תמיד אפשר לחזור לגרסה Airflow 1.10.* של ה-DAG:

      1. משהים את ה-DAG בסביבת Airflow 2.

      2. מבטלים את ההשהיה של ה-DAG בסביבת Airflow 1.10.*. הפעולה הזו מתזמנת הפעלה חדשה של DAG לאותו תאריך ולאותה שעה של הפעלת ה-DAG שנכשלה.

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

שלב 9: מעקב אחרי סביבת Airflow 2

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

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