הפסקה מתוזמנת של אשכול

כדי להימנע מGoogle Cloud חיובים על אשכול לא פעיל, או מהצורך למחוק אשכול וליצור אותו מחדש כדי להימנע מחיובים על האשכול, אפשר להשתמש בתכונה 'עצירה מתוזמנת של אשכול' בשירות המנוהל של Apache Spark, שעוצרת את כל מכונות ה-VM של האשכול. לא מחויבים על מכונות וירטואליות שהופסקו, אבל החיובים על משאבים משויכים, כמו דיסקים לאחסון מתמיד, נמשכים.

הפסקת אשכול גורמת להפסקת כל המכונות הווירטואליות באשכול ולכשל של כל העבודות שפועלות. כשקלאסטר מושבת, אי אפשר לעדכן אותו, לשלוח אליו משימות או לגשת לרכיבים אופציונליים בקלאסטר באמצעות שער הרכיבים של Managed Service for Apache Spark. אחרי שמפסיקים את האשכול, אפשר להפעיל אותו מחדש ולהמשיך לעבוד.

האפשרות להפסיק אשכולות לפי לוח זמנים זמינה באשכולות שנוצרו עם גרסאות אימג' 2.2.42+,‏ 2.1.76+ ו-2.0.57+ ומגרסאות אימג' מאוחרות יותר.

תכונות

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

  • עצירה מתוזמנת של אשכול תומכת באשכולות עם עובדים משניים ובאשכולות עם אפס קנה מידה.

  • אפשר לעדכן או לבטל את ההגדרה של עצירה מתוזמנת של האשכול.

מגבלות ושיקולים

  • הפסקת אשכולות מתוזמנת לא נתמכת באשכולות עם כונני SSD מקומיים.
  • אפשר לעדכן את ההגדרה של עצירה מתוזמנת של אשכול, אבל פעולת עצירה שהופעלה תמשיך. כדי לבדוק אם פעולת העצירה התחילה, בודקים את יומני האשכול ב-Cloud Logging.
  • עדכון של לוח זמנים להפסקה באשכול שהזמן המתוזמן להפסקה כבר חלף מסיר את ההגדרה של ההפסקה המתוזמנת. כדי להפעיל מחדש את העצירה המתוזמנת, צריך לציין שעה עתידית בבקשת העדכון.

פעולות שמשביתות את העצירה המתוזמנת של האשכול

בזמן שקלאסטר פועל, הפעולות הבאות משביתות את העצירה המתוזמנת של הקלאסטר עד שהפעולה שגרמה להשבתה תבוטל:

חישוב זמן ההמתנה של האשכול

כדי שקלאסטר ייחשב כסרק, צריכים להתקיים התנאים הבאים:

  • יצירת האשכול הסתיימה (הזמן שנדרש להקצאת האשכול ולהפעלה שלו לא נכלל בחישוב של זמן ההמתנה)
  • לא מופעלות משימות באשכול
  • האשכול לא במצב STOPPED

שליחת עבודה לאשכול או עצירת אשכול מאפסות את החישוב של זמן ההמתנה.

dataproc:dataproc.cluster-ttl.consider-yarn-activity מאפיין האשכול משפיע על חישוב זמן ההמתנה של האשכול, באופן הבא:

  • הנכס הזה מופעל (מוגדר ל-true) כברירת מחדל.
  • כשהמאפיין הזה מופעל, גם YARN וגם פעילות ה-API של Managed Service for Apache Spark Jobs צריכים להיות במצב בלי פעילות כדי להתחיל ולהמשיך להגדיל את החישוב של זמן ההמתנה של האשכול.
    • הפעילות ב-YARN כוללת אפליקציות בהמתנה ואפליקציות שפועלות ב-YARN.
    • הפעילות ב-Managed Service for Apache Spark Jobs API כוללת משימות בהמתנה ומשימות שפועלות שנשלחו אל Managed Service for Apache Spark Jobs API.
  • כשהמאפיין הזה מוגדר לערך false, מתחיל החישוב של זמן ההמתנה של האשכול, והוא נמשך רק כשאין פעילות ב-API של Managed Service for Apache Spark Jobs.

שימוש בהפסקת אשכול מתוזמנת

מסוףGoogle Cloud

אפשר להגדיר ערכים של עצירות מתוזמנות כשיוצרים אשכול באמצעות מסוף Google Cloud באופן הבא:

  1. פותחים את הדף Create cluster.
  2. בקטע Define cost control settings (הגדרת אמצעים לבקרת עלויות), בוחרים באפשרות Set an optional retention policy to control costs (הגדרת מדיניות שמירה אופציונלית לבקרת עלויות), ואז בוחרים הגדרות להפסקת האשכול (או למחיקת האשכול).

‫CLI של gcloud

אפשר להגדיר ערכים של עצירה מתוזמנת כשיוצרים אשכול באמצעות Google Cloud CLI או Managed Service for Apache Spark API. אחרי שיוצרים את האשכול, אפשר לעדכן אותו כדי לשנות או למחוק את הערכים של העצירה המתוזמנת של האשכול שהוגדרו בו קודם.

דגל תיאור רמת הפירוט הכי גבוהה ערך מינימלי ערך מקסימלי
--stop-max-idle1 האפשרות הזו רלוונטית לפקודות ליצירת אשכולות ולעדכון אשכולות. משך הזמן מהרגע שבו האשכול נכנס למצב סרק (אחרי היצירה או ההפעלה) ועד הרגע שבו האשכול מתחיל להיעצר. מציינים את משך הזמן בפורמט IntegerUnit, כאשר היחידה יכולה להיות s, m, h, d (שניות, דקות, שעות, ימים, בהתאמה). דוגמאות: ‫'30m' או '1d' (30 דקות או יום אחד מהרגע שבו האשכול הופך ללא פעיל). שנייה אחת ‫5 דקות 14 ימים
--no-stop-max-idle המאפיין הזה רלוונטי רק לפקודת עדכון האשכול. ביטול ההפסקה המתוזמנת של האשכול באמצעות הדגל --stop-max-idle שהוגדר קודם לא רלוונטי לא רלוונטי לא רלוונטי
--stop-expiration-time2 האפשרות הזו רלוונטית לפקודות ליצירת אשכולות ולעדכון אשכולות. השעה שבה מתחילים להפסיק את האשכול בפורמט ISO 8601 של תאריך ושעה. אפשר ליצור את התאריך והשעה בפורמט הנכון באמצעות מחולל חותמות הזמן. לדוגמה, הערך 2017-08-22T13:31:48-08:00 מציין שעת תפוגה של 13:21:48 באזור הזמן UTC -8:00.שנייה אחת‫10 דקות מהשעה הנוכחית ‫14 ימים מהשעה הנוכחית
--stop-max-age2 האפשרות הזו רלוונטית לפקודות ליצירת אשכולות ולעדכון אשכולות. משך הזמן מרגע שליחת הבקשה ליצירת האשכול ועד לרגע שבו האשכול מתחיל להיעצר. מציינים את משך הזמן בפורמט IntegerUnit, כאשר היחידה יכולה להיות s, m, h, d (שניות, דקות, שעות, ימים). דוגמאות: ‎'30m': 30 minutes from now; ‎'1d': 1 day from now. שנייה אחת 10 דקות 14 ימים
הערות:
  1. אפשר להעביר את הדגל stop-max-idle עם הדגל stop-expiration-time או stop-max-age בבקשה ליצירה או לעדכון של האשכול. התנאי הראשון שיהפוך ל-true ייכנס לתוקף כדי לעצור את האשכול.
  2. אפשר להעביר את הדגל cstop-expiration-time או את הדגל stop-max-age לפקודה cluster create או לפקודה update, אבל לא את שניהם.

דוגמה ליצירת אשכול:

gcloud dataproc clusters create CLUSTER_NAME \
    --region=REGION \
    --stop-max-idle=DURATION \
    --stop-expiration-time=TIME \
    ... other flags ...

דוגמה לעדכון אשכול:

לדוגמה:

gcloud dataproc clusters update CLUSTER_NAME \
    --region=REGION \
    --stop-max-idle=DURATION \
    --no-stop-max-age \
    ... other flags

‫API בארכיטקטורת REST

כדי ליצור או לעדכן ערכי עצירה מתוזמנים באשכול, צריך להגדיר את השדות והערכים של Managed Service for Apache Spark API ClusterLifecycleConfig שמופיעים בטבלה הבאה כחלק מבקשת API של Managed Service for Apache Spark cluster.create או cluster.patch.

דגל תיאור רמת הפירוט הכי גבוהה ערך מינימלי ערך מקסימלי
idleStopTtl1 האפשרות הזו רלוונטית לפקודות ליצירת אשכולות ולעדכון אשכולות. משך הזמן מהרגע שבו האשכול נכנס למצב סרק אחרי שהאשכול נוצר או עודכן, ועד הרגע שבו האשכול מתחיל להיעצר. מציינים משך זמן בשניות עם עד תשע ספרות אחרי הנקודה, ומסיימים ב-s. דוגמה: ‎3.5s. כדי לבטל ערך של idleDeleteTtl שהוגדר בעבר, שולחים בקשת cluster.patch עם משך ריק. שנייה אחת ‫5 דקות
14 ימים
autoStopTime2 האפשרות הזו רלוונטית לפקודות ליצירת אשכולות ולעדכון אשכולות. השעה שבה מתחילים להפסיק את האשכול. צריך לציין חותמת זמן בפורמט RFC 3339 UTC ‏'Zulu', עם דיוק של ננו-שניות. דוגמה: ‎"2014-10-02T15:01:23.045123456Z". שנייה אחת ‫10 דקות מהשעה הנוכחית ‫14 ימים מהשעה הנוכחית
autoStopTtl2 משך הזמן שחלף מרגע שליחת הבקשה ליצירה או לעדכון של האשכול ועד לרגע שבו האשכול מתחיל להיעצר. צריך לציין משך זמן בשניות עם עד תשע ספרות אחרי הנקודה, ולסיים ב-s. דוגמה: ‎3.5s. שנייה אחת ‫10 דקות.
כדי לבטל ערך autoStopTtl שהוגדר בעבר, שולחים בקשת cluster.patch עם משך ריק.
14 ימים
הערות:
  1. אפשר להעביר את הדגל stop-max-idle עם הדגל stop-expiration-time או stop-max-age בבקשה ליצירה או לעדכון של האשכול. התנאי הראשון שיהפוך ל-true ייכנס לתוקף כדי לעצור את האשכול.
  2. אפשר להעביר את הדגל cstop-expiration-time או את הדגל stop-max-age לפקודה cluster create או לפקודה update, אבל לא את שניהם.

שימוש בהפסקה מתוזמנת עם מחיקה מתוזמנת

אם משתמשים גם בהפסקת אשכול מתוזמנת וגם במחיקה מתוזמנת של אשכול כשיוצרים או מעדכנים אשכול, חשוב לשים לב לאילוצים הבאים:

  • התקופה stop-max-idle צריכה להיות קצרה מהתקופה delete-max-idle או שווה לה, או לתקופה שמתקבלת מ-delete-max-age או מ-delete-expiration-time.

  • התאריכים stop-max-age ו-stop-expiration-time חייבים להיות מאוחרים מהתאריכים delete-max-age ו-delete-expiration-time בהתאמה.

הצגת ההגדרות של אשכול עצירה מתוזמנת

מסוףGoogle Cloud

  • כדי לראות את ההגדרות של עצירה מתוזמנת של אשכול, בוחרים את שם האשכול מתוך הדף Clusters של Managed Service for Apache Spark ב Google Cloud מסוף.
  • בדף הפרטים של האשכולות, בוחרים בכרטיסייה Configuration. כדי לראות את ההגדרות של עצירה מתוזמנת, עוברים לרשימת ההגדרות של האשכול.

‫CLI של gcloud

אפשר להשתמש בפקודה gcloud dataproc clusters list כדי לוודא שההשבתה המתוזמנת של אשכול מופעלת.

 gcloud dataproc clusters list \
     --region=REGION

פלט לדוגמה:

...
NAME         WORKER_COUNT ... SCHEDULED_STOP
CLUSTER_ID   NUMBER       ... enabled
...

אפשר להשתמש בפקודה gcloud dataproc clusters describe כדי לבדוק את ההגדרות של עצירה מתוזמנת של אשכול LifecycleConfig.

gcloud dataproc clusters describe CLUSTER_NAME \
    --region=REGION

פלט לדוגמה:

...
lifecycleConfig:
  autoStopTime: '2018-11-28T19:33:48.146Z'
  idleStopTtl: 1800s
  idleStartTime: '2018-11-28T18:33:48.146Z'
...

הערכים של autoStopTime ו-idleStopTtl מוגדרים על ידי המשתמש. ‫Managed Service for Apache Spark יוצר את הערך idleStartTime, שהוא זמן ההתחלה האחרון של האשכול במצב סרק.

השירות Managed Service for Apache Spark מחשב את idleStartTime על סמך הפסקת הפעילות של המשימה, אבל המנגנון להפסקת אשכולות מתוזמנת לוקח בחשבון גם את idleStartTime וגם את זמן ההתחלה האחרון של האשכול. באופן ספציפי, אם אשכול מופסק על ידי משתמש או על ידי Managed Service for Apache Spark, החישוב של זמן ההמתנה של התכונה 'הפסקה מתוזמנת' מתאפס. המשמעות היא שהספירה לאחור עד לעצירה מתוזמנת מתחילה מחדש בהפעלה הבאה של האשכול. עם זאת, idleStartTime עצמו לא מאופס כשמפעילים מחדש אשכול שהופסק. הוא ימשיך לשקף את המקרה האחרון של חוסר פעילות של המשימה לפני ההפסקה.

לכן, כדי שהשירות המנוהל ל-Apache Spark יפסיק אשכול על סמך idleStopTtl, צריכים להתקיים שני תנאים:

  1. האשכול צריך להיות במצב סרק למשך הזמן שצוין על ידי idleStopTtl מאז ההפעלה האחרונה שלו.
  2. האשכול צריך להיות במצב סרק למשך הזמן שצוין על ידי idleStopTtl מאז האיפוס האחרון של idleStartTime.

‫API בארכיטקטורת REST

אפשר לשלוח בקשה כדי לוודא שההגדרה 'הפסקת אשכול מתוזמנת' מופעלת באשכול.clusters.list