בדף הזה מוסבר איך להפעיל תזמון משאבים גמיש (FlexRS) לצינורות של עיבוד באצווה עם שינוי גודל אוטומטי ב-Dataflow.
FlexRS מפחית את עלויות העיבוד באצווה באמצעות שימוש בטכניקות מתקדמות לתזמון, בשירות ארגון נתונים של Dataflow ובשילוב של מכונות וירטואליות זמניות ומכונות וירטואליות רגילות. הפעלת מכונות VM שניתנות להפסקת פעולה ומכונות VM רגילות במקביל מאפשרת ל-Dataflow לשפר את חוויית המשתמש כש-Compute Engine מפסיק מכונות VM שניתנות להפסקת פעולה במהלך אירוע מערכת. FlexRS עוזר להבטיח שהצינור ימשיך להתקדם ושלא תאבדו עבודה קודמת כש-Compute Engine מבצע preempt למכונות הווירטואליות שלכם שניתנות להפסקת פעולה.
עבודות עם FlexRS משתמשות ב-Dataflow Shuffle מבוסס-השירות לצירוף ולקבוץ. כתוצאה מכך, עבודות FlexRS לא משתמשות במשאבי דיסקים לאחסון מתמיד כדי לאחסן תוצאות חישוב זמניות. שימוש ב-ארגון נתונים של Dataflow מאפשר ל-FlexRS לטפל טוב יותר בהפסקה זמנית של worker VM, כי שירות Dataflow לא צריך להפיץ מחדש את הנתונים לעובדים שנותרו. כל עובד של Dataflow עדיין צריך נפח קטן של 25 GB של Persistent Disk כדי לאחסן את תמונת המכונה ויומנים זמניים.
תמיכה ומגבלות
- תמיכה בצינורות להעברת נתונים באצווה.
- נדרשת גרסה Apache Beam SDK for Java 2.12.0 ואילך, גרסה Apache Beam SDK for Python 2.12.0 ואילך או גרסה Apache Beam SDK for Go.
- משתמש בארגון נתונים של Dataflow. הפעלת FlexRS מפעילה אוטומטית את Dataflow Shuffle.
- אין תמיכה במעבדי GPU.
- אין תמיכה בהזמנות ב-Compute Engine.
- יש עיכוב בתזמון של משימות FlexRS. לכן, FlexRS מתאים במיוחד לעומסי עבודה שלא רגישים לזמן, כמו משימות יומיות או שבועיות שאפשר להשלים בתוך חלון זמן מסוים.
תזמון מאוחר
כששולחים עבודת FlexRS, שירות Dataflow מכניס את העבודה לתור ושולח אותה להרצה תוך שש שעות ממועד יצירת העבודה. Dataflow מוצא את הזמן הכי טוב להתחיל את העבודה בחלון הזמן הזה, על סמך הקיבולת הזמינה וגורמים אחרים.
כששולחים עבודת FlexRS, שירות Dataflow מבצע את השלבים הבאים:
- הפונקציה מחזירה מזהה של משימה מיד אחרי שליחת המשימה.
- מבצע אימות מוקדם.
המערכת משתמשת בתוצאת האימות המוקדם כדי לקבוע את השלב הבא.
- אם הפעולה מצליחה, המשימה מתווספת לתור בהמתנה להפעלה לאחר העיכוב.
- בכל שאר המקרים, העבודה נכשלת ושירות Dataflow מדווח על השגיאות.
אם האימות מצליח, בממשק המעקב של Dataflow, משימת העיבוד מקבלת מזהה וסטטוס
Queued. אם האימות נכשל, הסטטוס של העבודה יהיה Failed.
אימות מוקדם
משימות FlexRS לא מופעלות מיד אחרי השליחה. במהלך האימות המוקדם, שירות Dataflow מאמת את פרמטרי ההפעלה ואת הגדרות הסביבה של Google Cloud Platform, כמו תפקידי 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 קובע את ערך ברירת המחדל.
Go
כדי להפעיל עבודה של 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
- הדף 'משימות' שבו מוצגות כל המשימות.
- דף ממשק המעקב של המשרה ששלחתם.
בדף משימות, משימות שלא התחילו מופיעות עם הסטטוס בתור.
בדף ממשק המעקב, המשימות שממתינות בתור מציגות את ההודעה 'הגרף יופיע אחרי שהמשימה תתחיל' בכרטיסייה גרף המשימה.