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

בדף הזה מוסבר איך להפעיל תזמון משאבים גמיש (FlexRS) בצינורות של עיבוד באצווה עם שינוי גודל אוטומטי ב-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 לא צריך להפיץ מחדש את הנתונים ל-Workers שנותרו. לכל עובד של Dataflow עדיין נדרש נפח קטן של 25GB בדיסק מתמיד כדי לאחסן את תמונת המכונה ויומנים זמניים.

תמיכה ומגבלות

  • תמיכה בצינורות להעברת נתונים באצווה.
  • נדרשת גרסה 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 מבצע את השלבים הבאים:

  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% מהעובדים במאגר העובדים. כשמתכננים את מכסת המעבד (CPU), חשוב לוודא שיש לכם מספיק מכסה של VM זמני. אתם יכולים לבקש במפורש מכסת VM זמני. אחרת, למשימת FlexRS לא יהיו המשאבים הדרושים לביצוע בזמן.

תמחור

החיוב על משימות FlexRS מתבצע על המשאבים הבאים:

  • מעבדים רגילים ומעבדים שניתן לקטוע את הפעולה שלהם
  • משאבי זיכרון
  • משאבים של ארגון נתונים של Dataflow
  • ‫25 GB לכל עובד של משאבי דיסק אחסון מתמיד

ב-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.