שימוש בתזמון משאבים גמיש ב-Cloud Dataflow

בדף הזה מוסבר איך להפעיל תזמון משאבים גמיש (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 מבצע את השלבים הבאים:

  1. מחזירה מזהה משימה מיד אחרי שליחת המשימה.
  2. מבצעת הרצה של אימות מוקדם.
  3. המערכת משתמשת בתוצאת האימות המוקדם כדי לקבוע את השלב הבא.

    1. אם הפעולה מצליחה, המשימה מתווספת לתור בהמתנה להפעלה לאחר העיכוב.
    2. בכל שאר המקרים, העבודה נכשלת ושירות 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 בשני מקומות:

  1. הדף 'משימות' שבו מוצגות כל המשימות.
  2. דף ממשק המעקב של המשימה ששלחתם.

בדף משימות, משימות שלא התחילו מופיעות עם הסטטוס בתור.

רשימה של משימות Dataflow במסוף ‎ Google Cloud , שמכילה משימה עם הסטטוס Queued.
איור 1: רשימה של משימות Dataflow במסוף Google Cloud , כולל משימה עם הסטטוס Queued.

בדף ממשק המעקב, המשימות שממתינות בתור מציגות את ההודעה 'הגרף יופיע אחרי שהמשימה תתחיל' בכרטיסייה גרף המשימה.

משימה בודדת של צינור עיבוד נתונים שנמצאת בתור בממשק המעקב של Cloud Dataflow.
איור 2: משימה בודדת של פייפליין שנמצאת בתור, שמוצגת בממשק המעקב של Dataflow.