אפשר להשתמש באפשרות השירות pause-on-failure כדי לשמור את המצב של משימות אצווה ב-Dataflow. התכונה הזו מאפשרת להשהות את הביצוע של משימה, לטפל בבעיות חיצוניות לצינור העיבוד ולחדש את העיבוד בלי לאבד את העבודה שהושלמה. כשמשתמשים בתכונה הזו כדי להשהות עבודה, אי אפשר לשנות את קוד צינור עיבוד הנתונים או את ההגדרות של worker VM, כמו סוג המכונה.
הפעלת היכולת הזו מאפשרת לכם לנהל טוב יותר את עלויות המשאבים ולשפר את אמינות העבודות במהלך הפסקות זמניות או מגבלות מכסה. כדי לשמור על שליטה במחזור החיים של צינור הנתונים, אתם יכולים להגדיר את משך ההשהיה המקסימלי כשאתם מפעילים את ההשהיה במקרה של כשל. אפשר גם להשהות או להפעיל מחדש באופן ידני צינורות שמופעל בהם הדגל pause-on-failure.
היתרונות של השהיה במקרה של כשל
אפשרות השירות pause-on-failure מאפשרת לשמור על התקדמות של משימות באצווה במהלך שיבושים, וכך לקצר את זמן החישוב הכולל ולצמצם את ההוצאות על משאבים.
- שמירת נקודות ביקורת: אם עבודה נכשלת, אפשר להמשיך אותה מנקודת הביקורת האחרונה שנשמרה במקום להתחיל מחדש. כך לא צריך לעבד מחדש בלוקים של נתונים שהעיבוד שלהם הסתיים, ולכן לא צריך לשלם על עבודה שבוצעה בהצלחה.
- צמצום התלות בגורמים חיצוניים: הגנה על צינורות העברת הנתונים מפני בעיות זמניות, כמו הפסקות שירות זמניות או מגבלות קצב בשירותים חיצוניים. השהיית העבודה מאפשרת לכם לטפל בשורש הבעיה לפני שתמשיכו את הביצוע בלי לאבד את העבודה שהושלמה.
- טיפול בכשלים לא דטרמיניסטיים: בעומסי עבודה שמועדים לכשלים לסירוגין או לכשלים לא דטרמיניסטיים, האפשרות הזו מאפשרת לכם להבטיח התקדמות מצטברת בכל ניסיון רצוף, וכך למנוע כשל מוחלט של העבודה.
- ניהול משאבים ומכסת נפח: אפשר להשהות משימות אצווה בעדיפות נמוכה כדי לפנות זמנית מכסת נפח או להקצות מחדש משאבים בעלי ערך גבוה, כמו GPU או TPU, לעומסי עבודה דחופים כמו אימון מודלים של למידת מכונה או הסקת מסקנות, בלי לאבד את ההתקדמות הבסיסית.
תמיכה ומגבלות
ההשעיה של משימה (ידנית או בעקבות כשל) כפופה לדרישות ולמגבלות הבאות:
- המשימה ב-Dataflow צריכה להיות משימת אצווה.
- המשימה חייבת להשתמש ב-Dataflow shuffle.
- כשמריצים את העבודה, צריך לציין את
pause_on_failureאפשרות השירות. - העבודה לא יכולה להיות כזו שההשהיה שלה נכשלה בעבר.
התנהגות של משימה בהשהיה במקרה של כשל
כשמפעילים את התכונה 'השהיה במקרה של כשל', העבודה מושהית באופן אוטומטי אחרי שפריט עבודה נכשל ארבע פעמים. הכשלים האלה מזוהים ביומנים שלכם כהודעות של משימות שמכילות Error message from worker והודעות של עובדים שמכילות Completed work item ITEM_NUMBER
UNSUCCESSFULLY. סוגים אחרים של כשלים, כמו מחסור במלאי ושגיאות במכסת השימוש, לא גורמים להשהיה אוטומטית. במקום זאת, הכשלים האלה גורמים לכך שהעבודה תיכשל כרגיל. הפעלת ההשהיה במקרה של כשל מאפשרת גם להשהות עבודה באופן ידני.
שינויים במצב המשרה
כשמשהים משימת Dataflow, היא עוברת בין המצבים הבאים:
- השהיה: מצב ביניים שבו העיבוד של העבודה נעצר, מכונות ה-VM של העובדים נמחקות והסטטוס של ה-backend מועבר לארכיון. עדיין תחויבו על מכונות וירטואליות עד שהשירות יסיים למחוק אותן.
- Paused (מושהה): העבודה הופסקה לחלוטין. בשלב הזה, החיוב הוא רק על נתוני Shuffle בארכיון.
התנהגויות חריגות
ההתנהגות של ההשהיה במקרה של כשל עשויה להיות לא צפויה בתרחישים הבאים:
- אם משהים ידנית עבודה שקרובה לסיום, יכול להיות שהיא תסתיים במקום להיות מושהית.
- במקרים נדירים, יכול להיות שהעבודה לא תושהה. במקרים האלה, העבודה חוזרת למצב פעיל אם השהיתם אותה באופן ידני, או שהיא עוברת למצב של כשל אם היא מושהית בגלל שגיאה.
המשך העיבוד
כשהעבודה מתחדשת, השירות מטפל בפריטי העבודה באופן הבא:
- עבודה שהושלמה: השירות לא מעבד מחדש שלבים או פריטי עבודה שהסתיימו באופן מלא כשהפעולה הושהתה.
- פריטי עבודה בתהליך: כל פריטי העבודה שהיו בתהליך כשהעבודה הופסקה יעברו עיבוד מחדש מההתחלה.
- מספר הכשלים: כל מספרי הכשלים של פריטי העבודה מאופסים לאפס, מה שאומר שהעבודה לא תושהה שוב באופן אוטומטי עד שפריט עבודה ייכשל עוד ארבע פעמים.
הפעלת השהיה במקרה של כשל
כדי להפעיל את ההשהיה במקרה של כשל בעבודה, משתמשים באפשרות pause_on_failureDataflow service option כשמריצים את העבודה.
Java
--dataflowServiceOptions=pause_on_failure
Python
--dataflow_service_options=pause_on_failure
המשך
--dataflow_service_options=pause_on_failure
ציון משך ההשהיה המקסימלי
כברירת מחדל, העבודה תישאר בהשהיה למשך 7 ימים (7d). אפשר להגדיר ידנית את משך ההשהיה המקסימלי בין שעה אחת (1h) ל-7 ימים (7d).
אפשר להזין רק את הערכים d (ימים) ו-h (שעות). יום מוגדר כ-24 שעות.
יכול להיות שהערך הזה לא יהיה זהה לאורך של יום ביומן, בגלל גורמים כמו שעון קיץ.
אחרי שמשך ההשהיה המקסימלי חולף, העבודה מבוטלת ואי אפשר להמשיך אותה.
לדוגמה, בדוגמה הבאה מוגדר משך ההשהיה המקסימלי ליום אחד:
Java
--dataflowServiceOptions=pause_on_failure=pause_duration:1d
Python
--dataflow_service_options=pause_on_failure=pause_duration:1d
המשך
--dataflow_service_options=pause_on_failure=pause_duration:1d
השהיה ידנית של משימת Dataflow
כדי להשהות עבודה באופן ידני, מבצעים את השלבים הבאים.
המסוף
עוברים לדף משימות ב-Dataflow.
לוחצים על העבודה שרוצים להשהות.
כדי להשהות עבודה, הסטטוס שלה צריך להיות running.
בדף פרטי המשימה, לוחצים על השהיה.
אם לא רואים את לחצן ההשהיה, אי אפשר להשהות את העבודה בגלל מגבלות ההשהיה במקרה של כשל.
gcloud
כדי להשהות עבודת Dataflow, אפשר להשתמש בפקודה gcloud dataflow
jobs ב-Cloud Shell או בטרמינל מקומי שהותקן עם ה-CLI של gcloud.
פותחים את המעטפת.
מציגים את מזהי המשימות של משימות Dataflow שפועלות, ואז רושמים את מזהה המשימה של המשימה שרוצים להשהות:
gcloud dataflow jobs listאם לא מגדירים את הדגל
--region, מוצגות משימות Dataflow מכל האזורים הזמינים.מריצים את הפקודה הבאה:
gcloud dataflow jobs pause JOB_ID --region=REGIONמחליפים את JOB_ID במזהה המשימה שרשמתם ואת REGION באזור של המשימה.
API
כדי להשהות עבודה באמצעות Dataflow REST API, משתמשים בנקודת הקצה projects.locations.jobs.update ומעבירים את גוף הבקשה הבא:
{
"requestedState": "JOB_STATE_PAUSING"
}
חשוב: אל תעבירו בטעות את הערך JOB_STATE_PAUSED כ-requestedState.
ביטול של משימת Dataflow בהשהיה או שהושהתה
אפשר לבטל עבודות Dataflow בהשהיה או שהושהו, כמו שמבטלים עבודות רגילות. אחרי שמבטלים עבודה, לא מחויבים עליה יותר, אבל אי אפשר להמשיך אותה.
משימה שהושהתה תבוטל אוטומטית אחרי שמשך ההשהיה המקסימלי שלה יפוג.
המשך של משימת Dataflow
כדי להפעיל מחדש באופן ידני את העבודה שהושהתה, פועלים לפי השלבים הבאים:
המסוף
עוברים לדף משימות ב-Dataflow.
לוחצים על העבודה שרוצים להמשיך.
כדי להמשיך עבודה, הסטטוס שלה צריך להיות paused (בהשהיה) ולא pausing (בהשהיה).
בדף פרטי המשרה, לוחצים על Resume (המשך).
gcloud
כדי להפעיל מחדש משימת Dataflow, אפשר להשתמש בפקודה gcloud dataflow
jobs ב-Cloud Shell או בטרמינל מקומי שהותקן עם ה-CLI של gcloud.
פותחים את המעטפת.
מציגים את מזהי המשימות של משימות Dataflow שהושהו, ואז מציינים את מזהה המשימה של המשימה שרוצים להפעיל מחדש:
gcloud dataflow jobs listאם לא מגדירים את הדגל
--region, מוצגות משימות Dataflow מכל האזורים הזמינים.מריצים את הפקודה הבאה:
gcloud dataflow jobs resume JOB_ID --region=REGIONמחליפים את JOB_ID במזהה המשימה ואת REGION באזור המשימה.
API
כדי להפעיל מחדש ג'וב באמצעות Dataflow REST API, משתמשים בנקודת הקצה projects.locations.jobs.update ומעבירים את גוף הבקשה הבא:
{
"requestedState": "JOB_STATE_RUNNING"
}
המאמרים הבאים
- מידע נוסף על עצירת צינורות פעילים
- חשוב להבין את ארגון נתונים של Dataflow לעיבוד אצווה, שנדרש כדי להשתמש בתכונה הזו.
- כדי לפתור שגיאות, אפשר לעיין במדריך פתרון בעיות בצינורות.
- פתרון בעיות של עבודות אצווה איטיות או תקועות