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 בוצעו הרבה שינויים משמעותיים, שחלקם עלולים לגרום לבעיות:
- לא מובטח שקובצי DAG קיימים מ-Airflow 1.10.* יפעלו עם Airflow 2. צריך לבדוק אותם ואולי לבצע בהם שינויים.
- העברנו את האפשרויות Operators, Transfers ו-Hooks לחבילות של ספקים. הצהרות ייבוא ב-DAG חייבות להשתמש בחבילות ספקים חדשות. יכול להיות שהצהרות ייבוא ישנות לא יפעלו יותר ב-Airflow 2.
- יכול להיות שחלק מההגדרות של Airflow 1.10.* כבר לא נתמכות כי Airflow 2 כבר לא תומך באפשרויות הגדרה מסוימות.
- יכול להיות שחלק מחבילות ה-PyPI בהתאמה אישית לא יהיו תואמות לגרסה החדשה של Airflow או Python.
- ממשק המשתמש של Airflow עם בקרת גישה הוא ממשק המשתמש שמוגדר כברירת מחדל ב-Airflow 2. Airflow 2 לא תומך בסוגים אחרים של ממשקי משתמש של Airflow.
- ממשק ה-API בארכיטקטורת REST הניסיוני מוחלף בממשק Airflow API יציב. ממשק ה-API הניסיוני ל-REST מושבת כברירת מחדל ב-Airflow 2.
- שינויים משמעותיים אחרים ב-Airflow 2.0.0
- שינויים משמעותיים אחרים ב-Airflow 2.0.1
ההבדלים בין סביבות עם 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 ומעבירים את ביטולי ברירת המחדל של ההגדרות ואת משתני הסביבה:
פועלים לפי השלבים ליצירת סביבה. לפני שיוצרים סביבה, צריך גם לציין שינויים בהגדרות ומשתני סביבה, כמו שמוסבר בהמשך.
כשבוחרים תמונה, בוחרים תמונה עם Airflow 2.
העברה ידנית של פרמטרים להגדרה מהסביבה של Airflow 1.10.* לסביבה החדשה של Airflow 2.
המסוף
כשיוצרים סביבה, מרחיבים את הקטע Networking, Airflow config overrides, and additional features (רשת, ביטול ברירת מחדל של הגדרות Airflow ותכונות נוספות).
בקטע Airflow configuration overrides (שינויים בהגדרות של Airflow), לוחצים על Add Airflow configuration override (הוספת שינוי בהגדרות של Airflow).
מעתיקים את כל ההגדרות שמוגדרות כברירת מחדל מהסביבה של Airflow 1.10.*.
חלק מאפשרויות ההגדרה משתמשות בשם ובקטע שונים ב-Airflow 2. מידע נוסף זמין במאמר בנושא שינויים בהגדרות.
בקטע משתני סביבה, לוחצים על הוספת משתנה סביבה.
מעתיקים את כל משתני הסביבה מהסביבה שלכם ב-Airflow 1.10.*.
לוחצים על יצירה כדי ליצור סביבה.
שלב 3: התקנת חבילות PyPI בסביבת Airflow 2
אחרי שיוצרים את סביבת Airflow 2, מתקינים בה חבילות PyPI:
המסוף
נכנסים לדף Environments במסוף Google Cloud .
בוחרים את סביבת Airflow 2.
עוברים לכרטיסייה PyPI packages ולוחצים על Edit (עריכה).
מעתיקים את דרישות החבילה של PyPI מהסביבה של Airflow 1.10.* . לוחצים על שמירה ומחכים עד שהסביבה תתעדכן.
בגלל שבסביבות Airflow 2 נעשה שימוש בקבוצה שונה של חבילות שהותקנו מראש ובגרסה שונה של Python, יכול להיות שתיתקלו בקונפליקטים בחבילות PyPI שקשה לפתור.
שלב 4: העברת משתנים ומאגרי משתנים ל-Airflow 2
Airflow 1.10.* תומך בייצוא של משתנים ומאגרי משאבים לקובצי JSON. אחר כך תוכלו לייבא את הקבצים האלה לסביבת Airflow 2.
צריך להעביר מאגרי כתובות רק אם יש לכם מאגרי כתובות בהתאמה אישית שאינם default_pool. אחרת, מדלגים על פקודות שמייצאות ומייבאות מאגרי כתובות.
gcloud
ייצוא משתנים מהסביבה שלכם ב-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עם האזור שבו הסביבה ממוקמת.
-
ייצוא מאגרי משאבים מסביבת Airflow 1.10.*:
gcloud composer environments run AIRFLOW_1_ENV \ --location AIRFLOW_1_LOCATION \ pool -- -e /home/airflow/gcs/data/pools.jsonמקבלים את ה-URI של קטגוריית הסביבה של Airflow 2.
מריצים את הפקודה הבאה:
gcloud composer environments describe AIRFLOW_2_ENV \ --location AIRFLOW_2_LOCATION \ --format="value(config.dagGcsPrefix)"מחליפים את:
-
AIRFLOW_2_ENVבשם סביבת Airflow 2. -
AIRFLOW_2_LOCATIONבאזור שבו הסביבה נמצאת.
-
בפלט, מסירים את התיקייה
/dags. התוצאה היא ה-URI של דלי הסביבה של Airflow 2.לדוגמה, שינוי של
gs://us-central1-example-916807e1-bucket/dagsל-gs://us-central1-example-916807e1-bucket.
העברת קובצי 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 שהתקבל בשלב הקודם.ייבוא משתנים ומאגרי משאבים ל-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בודקים שהמשתנים והמאגרים יובאו:
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מסירים קובצי 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
העברה של תוספים לסביבת 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בודקים שהתיקייה
/pluginsיובאה בהצלחה:gcloud composer environments storage plugins list \ --environment=AIRFLOW_2_ENV \ --location=AIRFLOW_2_LOCATIONמייצאים את התיקייה
/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בודקים שהתיקייה
/dataיובאה בהצלחה:gcloud composer environments storage data list \ --environment=AIRFLOW_2_ENV \ --location=AIRFLOW_2_LOCATION
שלב 6: העברת חיבורים ומשתמשים
ב-Airflow 1.10.* אין תמיכה בייצוא של משתמשים וחיבורים. כדי להעביר משתמשים וחיבורים, צריך ליצור באופן ידני חשבונות משתמשים וחיבורים חדשים בסביבת Airflow 2.
gcloud
כדי לקבל רשימה של חיבורים בסביבת Airflow 1.10.*, מריצים את הפקודה:
gcloud composer environments run AIRFLOW_1_ENV \ --location AIRFLOW_1_LOCATION \ connections -- --listכדי ליצור חיבור חדש בסביבת Airflow 2, מריצים את הפקודה
connectionsAirflow 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כדי לראות רשימה של משתמשים בסביבת Airflow 1.10.* :
פותחים את ממשק האינטרנט של Airflow בסביבת Airflow 1.10.*.
עוברים אל ניהול > משתמשים.
כדי ליצור חשבון משתמש חדש בסביבת 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, צריך לוודא:
ה-DAGs פועלים בהצלחה ואין בעיות תאימות נוספות.
ב-DAGs נעשה שימוש בהצהרות ייבוא נכונות.
לדוגמה, הצהרת הייבוא החדשה של
BigQueryCreateDataTransferOperatorיכולה להיראות כך:from airflow.providers.google.cloud.operators.bigquery_dts \ import BigQueryCreateDataTransferOperatorDAGs שלכם משודרגים ל-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, פועלים לפי ההליך הבא:
מוודאים שתאריך ההתחלה החדש ב-DAG מוגדר כמו שמתואר בקטע הקודם.
מעלים את ה-DAG המעודכן לסביבת Airflow 2. ה-DAG הזה מושהה בסביבת Airflow 2 בגלל ביטול ההגדרה, ולכן עדיין לא מתוזמנים הפעלות של DAG.
בממשק האינטרנט של Airflow, עוברים אל DAGs ובודקים אם יש שגיאות תחביר שדווחו ב-DAG.
בזמן שבו אתם מתכננים להעביר את ה-DAG:
משהים את ה-DAG בסביבת Airflow 1.10.*.
מבטלים את ההשהיה של ה-DAG בסביבת Airflow 2.
בודקים שהרצת ה-DAG החדשה מתוזמנת לשעה הנכונה.
מחכים להרצת DAG בסביבת Airflow 2 ובודקים אם ההרצה הצליחה.
בהתאם לשאלה אם הרצת ה-DAG הצליחה:
אם ההרצה של ה-DAG מצליחה, אפשר להמשיך ולהשתמש ב-DAG מהסביבה של Airflow 2. בסופו של דבר, כדאי למחוק את גרסת ה-DAG של Airflow 1.10.*.
אם הפעלת ה-DAG נכשלה, צריך לנסות לפתור את הבעיה ב-DAG עד שהיא תפעל בהצלחה ב-Airflow 2.
במקרה הצורך, תמיד אפשר לחזור לגרסה Airflow 1.10.* של ה-DAG:
משהים את ה-DAG בסביבת Airflow 2.
מבטלים את ההשהיה של ה-DAG בסביבת Airflow 1.10.*. הפעולה הזו מתזמנת הפעלה חדשה של DAG לאותו תאריך ולאותה שעה של הפעלת ה-DAG שנכשלה.
כשמוכנים להמשיך עם גרסת Airflow 2 של ה-DAG, משנים את תאריך ההתחלה, מעלים את הגרסה החדשה של ה-DAG לסביבת Airflow 2 וחוזרים על התהליך.
שלב 9: מעקב אחרי סביבת Airflow 2
אחרי שמעבירים את כל ה-DAG וההגדרות לסביבת Airflow 2, צריך לעקוב אחרי הסביבה כדי לזהות בעיות פוטנציאליות, הפעלות DAG שנכשלו והמצב הכללי של הסביבה. אם סביבת Airflow 2 פועלת ללא בעיות במשך תקופה מספיק ארוכה, אפשר להסיר את סביבת Airflow 1.10.*.
המאמרים הבאים
- פתרון בעיות ב-DAG
- פתרון בעיות ביצירת סביבה
- פתרון בעיות בעדכונים ובשדרוגים של סביבות
- שימוש בחבילות backport