בדף הזה מוסבר איך להפעיל תזמון משאבים גמיש (FlexRS) בצינורות (pipelines) של עיבוד באצווה עם שינוי גודל אוטומטי ב-Dataflow.
FlexRS מפחית את העלויות של עיבוד ברצף (batch processing) באמצעות טכניקות מתקדמות לתזמון, שירות ארגון נתונים של Dataflow ושילוב של מכונות וירטואליות זמניות (VM) ומכונות וירטואליות רגילות. הפעלת מכונות VM שניתנות להפסקת פעולה ומכונות VM רגילות במקביל מאפשרת ל-Dataflow לשפר את חוויית המשתמש כש-Compute Engine מפסיקה מכונות VM שניתנות להפסקת פעולה במהלך אירוע מערכת. FlexRS עוזר להבטיח שהצינור ימשיך להתקדם ושלא תאבדו עבודה קודמת כש-Compute Engine מבצע preempt למכונות הווירטואליות שלכם שניתנות להפסקת פעולה.
עבודות עם FlexRS משתמשות ב-Dataflow Shuffle שמבוסס על שירותים לצירוף וקיבוץ. כתוצאה מכך, עבודות FlexRS לא משתמשות במשאבי דיסקים לאחסון מתמיד כדי לאחסן תוצאות חישוב זמניות. השימוש ב-ארגון נתונים של Dataflow מאפשר ל-FlexRS לטפל בצורה טובה יותר בהפסקה זמנית של worker VM, כי שירות Dataflow לא צריך להפיץ מחדש את הנתונים לעובדים שנותרו. כל עובד של Dataflow עדיין צריך נפח קטן של 25GB בדיסק אחסון מתמיד (persistent disk) כדי לאחסן את תמונת המכונה ויומנים זמניים.
תמיכה ומגבלות
- תמיכה בצינורות להעברת נתונים באצווה.
- נדרשת גרסה 2.12.0 ואילך של Apache Beam SDK ל-Java, גרסה 2.12.0 ואילך של Apache Beam SDK ל-Python או Apache Beam SDK ל-Go.
- משתמש בארגון נתונים של Dataflow. הפעלת FlexRS מפעילה אוטומטית את Dataflow Shuffle.
- אין תמיכה במעבדי GPU.
- לא תומך בהזמנות ב-Compute Engine.
- יש עיכוב בתזמון של משימות FlexRS. לכן, FlexRS מתאים במיוחד לעומסי עבודה שלא רגישים לזמן, כמו משימות יומיות או שבועיות שאפשר להשלים בתוך חלון זמן מסוים.
תזמון מאוחר
כששולחים עבודת FlexRS, שירות Dataflow מכניס את העבודה לתור ושולח אותה להרצה תוך שש שעות ממועד יצירת העבודה. Dataflow מוצא את הזמן הכי טוב להתחיל את העבודה בחלון הזמן הזה, על סמך הקיבולת הזמינה וגורמים אחרים.
כששולחים משימת FlexRS, שירות Dataflow מבצע את השלבים הבאים:
- מחזירה מזהה משימה מיד אחרי שליחת המשימה.
- מבצעת הרצה של אימות מוקדם.
המערכת משתמשת בתוצאת האימות המוקדם כדי לקבוע את השלב הבא.
- אם הפעולה מצליחה, המשימה מתווספת לתור בהמתנה להפעלה לאחר העיכוב.
- בכל שאר המקרים, העבודה נכשלת ושירות Dataflow מדווח על השגיאות.
אם האימות מצליח, בממשק המעקב של Dataflow, המשימה מקבלת מזהה וסטטוס
Queued. אם האימות נכשל, הסטטוס של העבודה הוא Failed.
אימות מוקדם
עבודות FlexRS לא מופעלות מיד אחרי השליחה. במהלך האימות המוקדם, שירות Dataflow מאמת את פרמטרי ההרצה וGoogle Cloud הגדרות הסביבה, כמו תפקידי IAM והגדרות הרשת. Dataflow מאמת את העבודה ככל האפשר בזמן השליחה של העבודה ומדווח על שגיאות פוטנציאליות. לא נחייב אתכם על תהליך האימות המוקדם הזה.
בשלב האימות המוקדם לא מופעל קוד משתמש. כדי לבדוק אם יש בעיות בקוד, צריך לאמת אותו באמצעות Direct Runner של Apache Beam או באמצעות משימות שאינן FlexRS. אם יש Google Cloud שינויים בסביבה בין יצירת העבודה לבין התזמון המאוחר שלה, יכול להיות שהעבודה תצליח במהלך האימות המוקדם, אבל עדיין תיכשל בזמן ההפעלה.
הפעלת FlexRS
כשיוצרים משימת FlexRS, נלקחת מכסת משימות מקבילות, גם כשהמשימה נמצאת בסטטוס Queued (בהמתנה). תהליך האימות המוקדם לא מאמת או שומר מכסות אחרות. לכן, לפני שמפעילים את FlexRS, צריך לוודא שיש לכם מספיק Google Cloud מכסות של משאבי פרויקט כדי להפעיל את העבודה. ההגדרה הזו כוללת מכסות נוספות למעבדי CPU שניתנים להפסקה, למעבדי CPU רגילים ולכתובות IP, אלא אם משביתים את הפרמטר Public IP.
אם אין לכם מספיק מכסות, יכול להיות שלא יהיו בחשבון שלכם מספיק משאבים כשמשימת FlexRS תופעל. כברירת מחדל, מערכת Dataflow בוחרת מכונות וירטואליות שניתנות להפסקת פעולה עבור 90% מהעובדים במאגר העובדים. כשמתכננים את מכסת הליבות הווירטואליות, חשוב לוודא שיש מספיק מכסה של VM זמני. אתם יכולים לבקש במפורש הקצאת מכסות של VM זמני. אחרת, לא יהיו לעבודת FlexRS שלכם מספיק משאבים כדי לפעול בזמן.
תמחור
החיוב על משימות FlexRS מתבצע על המשאבים הבאים:
- מעבדים רגילים ומעבדים שניתן להפסיק את השימוש בהם
- משאבי זיכרון
- משאבי ארגון נתונים של Dataflow
- 25 GB לכל עובד של משאבי דיסק אחסון מתמיד (persistent disk)
ב-Dataflow נעשה שימוש גם בעובדים זמניים וגם בעובדים רגילים כדי להריץ את עבודת FlexRS, אבל אתם מחויבים בתעריף מוזל אחיד בהשוואה למחירים הרגילים של Dataflow, בלי קשר לסוג העובד. אין הנחות על משאבי ארגון נתונים של Dataflow ו-Persistent Disk.
מידע נוסף זמין בדף פרטי התמחור של Dataflow.
אפשרויות של פייפליין
Java
כדי להפעיל עבודה של FlexRS, משתמשים באפשרות הצינור הבאה:
--flexRSGoal=COST_OPTIMIZED, כאשר היעד של אופטימיזציה של העלויות אומר ששירות Dataflow בוחר משאבים זמינים עם הנחה.
--flexRSGoal=SPEED_OPTIMIZED, שבו המערכת מבצעת אופטימיזציה לזמן ביצוע קצר יותר. אם לא מציינים ערך, ברירת המחדל של השדה--flexRSGoalהיאSPEED_OPTIMIZED, כלומר, זה כמו להשמיט את הדגל הזה.
משימות FlexRS משפיעות על פרמטרים של ביצוע:
-
numWorkersמגדיר רק את המספר הראשוני של העובדים. עם זאת, אפשר להגדירmaxNumWorkersכדי לשלוט בעלויות. - אי אפשר להשתמש באפשרות
autoscalingAlgorithmעם עבודות FlexRS. - אי אפשר לציין את הדגל
zoneלמשימות FlexRS. שירות Dataflow בוחר את האזור לכל העבודות של FlexRS באזור שציינתם באמצעות הפרמטרregion. - צריך לבחור מיקום של Dataflow בתור
region. - אי אפשר להשתמש בסדרות המכונות M2, M3 או H3 בשביל
workerMachineType.
בדוגמה הבאה מוצג איך להוסיף פרמטרים לפרמטרים הרגילים של צינור הנתונים כדי להשתמש ב-FlexRS:
--flexRSGoal=COST_OPTIMIZED \
--region=europe-west1 \
--maxNumWorkers=10 \
--workerMachineType=n1-highmem-16
אם לא מציינים את region, maxNumWorkers ו-workerMachineType, שירות Dataflow קובע את ערך ברירת המחדל.
Python
כדי להפעיל עבודה של FlexRS, משתמשים באפשרות הצינור הבאה:
--flexrs_goal=COST_OPTIMIZED, כאשר היעד של אופטימיזציה של העלויות אומר ששירות Dataflow בוחר משאבים זמינים עם הנחה.
--flexrs_goal=SPEED_OPTIMIZED, שבו המערכת מבצעת אופטימיזציה לזמן ביצוע קצר יותר. אם לא מציינים ערך, ברירת המחדל של השדה--flexrs_goalהיאSPEED_OPTIMIZED, כלומר, זה כמו להשמיט את הדגל הזה.
משימות FlexRS משפיעות על פרמטרים של ביצוע:
-
num_workersמגדיר רק את המספר הראשוני של העובדים. עם זאת, אפשר להגדירmax_num_workersכדי לשלוט בעלויות. - אי אפשר להשתמש באפשרות
autoscalingAlgorithmעם עבודות FlexRS. - אי אפשר לציין את הדגל
zoneלמשימות FlexRS. שירות Dataflow בוחר את האזור לכל העבודות של FlexRS באזור שציינתם באמצעות הפרמטרregion. - צריך לבחור מיקום של Dataflow בתור
region. - אי אפשר להשתמש בסדרות המכונות M2, M3 או H3 בשביל
machine_type.
בדוגמה הבאה מוצג איך להוסיף פרמטרים לפרמטרים הרגילים של צינור הנתונים כדי להשתמש ב-FlexRS:
--flexrs_goal=COST_OPTIMIZED \
--region=europe-west1 \
--max_num_workers=10 \
--machine_type=n1-highmem-16
אם לא מציינים את region, max_num_workers ו-machine_type, שירות Dataflow קובע את ערך ברירת המחדל.
המשך
כדי להפעיל עבודה של FlexRS, משתמשים באפשרות הצינור הבאה:
--flexrs_goal=COST_OPTIMIZED, כאשר היעד של אופטימיזציה של העלויות אומר ששירות Dataflow בוחר משאבים זמינים עם הנחה.
--flexrs_goal=SPEED_OPTIMIZED, שבו המערכת מבצעת אופטימיזציה לזמן ביצוע קצר יותר. אם לא מציינים ערך, ברירת המחדל של השדה--flexrs_goalהיאSPEED_OPTIMIZED, כלומר, זה כמו להשמיט את הדגל הזה.
משימות FlexRS משפיעות על פרמטרים של ביצוע:
-
num_workersמגדיר רק את המספר הראשוני של העובדים. עם זאת, אפשר להגדירmax_num_workersכדי לשלוט בעלויות. - אי אפשר להשתמש באפשרות
autoscalingAlgorithmעם עבודות FlexRS. - אי אפשר לציין את הדגל
zoneלמשימות FlexRS. שירות Dataflow בוחר את האזור לכל העבודות של FlexRS באזור שציינתם באמצעות הפרמטרregion. - צריך לבחור מיקום של Dataflow בתור
region. - אי אפשר להשתמש בסדרות המכונות M2, M3 או H3 בשביל
worker_machine_type.
בדוגמה הבאה מוצג איך להוסיף פרמטרים לפרמטרים הרגילים של צינור הנתונים כדי להשתמש ב-FlexRS:
--flexrs_goal=COST_OPTIMIZED \
--region=europe-west1 \
--max_num_workers=10 \
--machine_type=n1-highmem-16
אם לא מציינים את region, max_num_workers ו-machine_type, שירות Dataflow קובע את ערך ברירת המחדל.
תבניות Dataflow
חלק מתבניות Dataflow לא תומכות באפשרות הצינור FlexRS. במקום זאת, אפשר להשתמש באפשרות הצינור הבאה.
--additional-experiments=flexible_resource_scheduling,shuffle_mode=service,delayed_launch
מעקב אחרי משימות FlexRS
אתם יכולים לעקוב אחרי הסטטוס של עבודת FlexRS במסוף Google Cloud בשני מקומות:
- הדף 'משימות' שבו מוצגות כל המשימות.
- דף ממשק המעקב של המשימה ששלחתם.
בדף משימות, משימות שלא התחילו מופיעות עם הסטטוס בתור.
בדף ממשק המעקב, המשימות שממתינות בתור מציגות את ההודעה 'הגרף יופיע אחרי שהמשימה תתחיל' בכרטיסייה גרף המשימה.