מתן עדיפות לסוגי מכונות וירטואליות עם מכונות וירטואליות גמישות

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

למה כדאי להשתמש במכונות וירטואליות גמישות?

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

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

מגבלות

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

הסברים על המונחים

  • סוג המכונה הווירטואלית: המשפחה, קיבולת הזיכרון ומספר ליבות המעבד של מופע של מכונה וירטואלית. ‫Managed Service for Apache Spark תומך בשימוש בסוגים מוגדרים מראש של מכונות וירטואליות וסוגים בהתאמה אישית.
  • צומתי מאסטר וצומתי עובד ראשיים: כברירת מחדל, לאשכול Managed Service for Apache Spark יש צומת מאסטר אחד ושני צומתי עובד ראשיים.
  • צמתי עובדים משניים: צמתי עובדים משניים לא מאחסנים נתונים ופועלים רק כצמתי עיבוד. אתם יכולים להשתמש בעובדים משניים כדי להרחיב את יכולת החישוב בלי להרחיב את נפח האחסון. סוג ה-worker המשני שמוגדר כברירת מחדל במכונה וירטואלית גמישה הוא VM במודל Spot, שהוא סוג זמני.

Usage

  • מכונות VM גמישות זמינות ב-Managed Service for Apache Spark ב-Managed Service for Apache Spark 2.0.74+,‏ 2.1.76+,‏ 2.2.42+ ובגרסאות מאוחרות יותר של תמונות. ‫*. החל מגרסת התמונה 3.0, כשיוצרים אשכול בלי לציין סוג מכונה לצומת של האשכול, Managed Service for Apache Spark מציין את הצומת עם רשימה מדורגת של סוגי מכונות וירטואליות גמישות, כמו רשימה מדורגת של סוגי מכונות מסדרות N4,‏ N2 ו-E2, כשהרשימה מותאמת לזמינות המשאבים.
  • אפשר לציין עד חמש רשימות מדורגות של סוגי מכונות וירטואליות, עם עד 10 סוגים של מכונות וירטואליות בכל רשימה.
  • אתם יכולים לכלול מכונות וירטואליות גמישות בתבניות של תהליכי עבודה כדי לספק עמידות מפני חוסר זמינות של משאבים כשיוצרים אשכולות מהתבנית.

    המלצה: מומלץ להפעיל את Managed Service for Apache Spark autozone placement, כדי ש-Managed Service for Apache Spark יוכל לבחור אזור עם קיבולת לאספקת מכונות וירטואליות לפי הדרישה.

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

  • אפשר לציין יחסי CPU לזיכרון שונים לסוגים של worker VM ראשיות ומשניות באשכול, אבל זה עלול להוביל לירידה בביצועים כי היחס הקטן ביותר של CPU לזיכרון משמש כיחידת הקונטיינר הקטנה ביותר.

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

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

  • ב-Managed Service for Apache Spark מוחלים Google Cloud מכסות על הקצאת מכונות וירטואליות גמישה.

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

איך מבקשים מכונות וירטואליות גמישות

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

אתם יכולים לבקש מכונות וירטואליות גמישות כשאתם יוצרים אשכול של Managed Service for Apache Spark באמצעות מסוף Google Cloud ,‏ Google Cloud CLI או Dataproc API.

המסוף

כדי ליצור אשכול עם מכונות וירטואליות גמישות:

  1. פותחים את הדף Create cluster.
  2. לוחצים על הגדרה נוספת כדי להרחיב את הקטע.
  3. עורכים את העובדים הראשיים או את העובדים המשניים. בקטע Add worker types (הוספת סוגי עובדים), מציינים מכונות וירטואליות נוספות עם דירוג.

gcloud

משתמשים בפקודה gcloud dataproc clusters create עם הדגלים master-instance-selection, worker-instance-selection ו-secondary-worker-instance-selection כדי לציין רשימות מדורגות של מכונות וירטואליות גמישות לעובדים הראשיים, העיקריים והמשניים.

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

  • הקצאת e2-standard-8 מכונות וירטואליות אם הן זמינות (דירוג 0). אם מכונות e2-standard-8 לא זמינות, הקצאת n2-standard-8 מכונות וירטואליות (דירוג 1).

מכיוון שסוג ה-worker המשני לא צוין, יוקצו מכונות וירטואליות משניות מסוג Spot שניתן לקטוע.

gcloud dataproc clusters create CLUSTER_NAME \
    --region=REGION \
    --zone="" \
    --master-instance-selection='{"machineTypes":["e2-standard-8"],"rank":0}' \
    --master-instance-selection='{"machineTypes":["n2-standard-8"],"rank":1}' \
    --num-workers=10 \
    --worker-instance-selection='{"machineTypes":["e2-standard-8"],"rank":0}' \
    --worker-instance-selection='{"machineTypes":["n2-standard-8"],"rank":1}' \
    --num-secondary-workers=4 \
    --secondary-worker-instance-selection='{"machineTypes":["e2-standard-8"],"rank":0}' \
    --secondary-worker-instance-selection='{"machineTypes":["n2-standard-8"],"rank":1}'

הערות:

  • --zone="": אם מגדירים את הדגל הזה לערך ריק, מופעלת הצבת אזורים אוטומטית, שמאפשרת ל-Managed Service for Apache Spark לבחור אזור שבו סוגי המכונות הווירטואליות המבוקשים זמינים לשימוש. ערך הדגל הזה מבטל כל בחירה של אזור שצוינה ב-gcloud config list שמוגדר כברירת מחדל.

API

משתמשים ב-instanceFlexibilityPolicy.instanceSelectionList כחלק מבקשה של Dataproc API clusters.create כדי לציין רשימה מדורגת של machineTypes למאסטר, לעובדים הראשיים ולעובדים המשניים.

לדוגמה: קטע ה-JSON הבא מתוך clusters.create גוף הבקשהclusters.create מציין את סוגי המכונות master ‏ (masterConfig), primary worker ‏ (workerConfig) ו-secondary worker ‏(secondaryWorkerConfig) עם דרגות 0 ו-1.

{
  "projectId": "PROJECT_ID",
  "clusterName": "CLUSTER_NAME",
  "config": {
    "gceClusterConfig": {
      "zoneUri": ""
    },
    "masterConfig": {
      "numInstances": 1,
      "instanceFlexibilityPolicy": {
        "instanceSelectionList": [
          {
            "machineTypes": ["e2-standard-8"],
            "rank": 0
          },
          {
            "machineTypes": ["n2-standard-8"],
            "rank": 1
          }
        ]
      }
    },
    "workerConfig": {
      "numInstances": 10,
      "instanceFlexibilityPolicy": {
        "instanceSelectionList": [
          {
            "machineTypes": ["e2-standard-8"],
            "rank": 0
          },
          {
            "machineTypes": ["n2-standard-8"],
            "rank": 1
          }
        ]
      }
    },
    "secondaryWorkerConfig": {
      "numInstances": 4,
      "instanceFlexibilityPolicy": {
        "instanceSelectionList": [
          {
            "machineTypes": ["e2-standard-8"],
            "rank": 0
          },
          {
            "machineTypes": ["n2-standard-8"],
            "rank": 1
          }
        ]
      }
    }
  }
}

שינויים בדיסק

אתם יכולים לציין שינויים בהגדרות הדיסק לכל סוג מכונה (בחירת מופע) במפרט של מכונת ה-VM הגמישה. כך אפשר להתאים אישית דיסקים לאתחול, לבטל את ההגדרה של כונני SSD מקומיים ולצרף דיסקים נוספים לסוגים ספציפיים של מכונות.

אפשרויות וכללים לביטול הגדרות של דיסקים

אפשרויות ההגדרה של שינוי ברירת המחדל של הדיסק:

  • הגדרת בסיס לדיסק: הגדרת דיסק שצוינה לצומת של אשכול, למשל הגדרת גודל של דיסק אתחול לעובדים ראשיים באמצעות ה-CLI של gcloud --worker-boot-disk-size או השדה workerConfig.diskConfig.bootDiskSizeGb של Dataproc API.
  • שינויים בהגדרות הדיסק של בחירת מופע: הגדרות דיסק לסוגי מכונות שצוינו לצומת של אשכול.

כללים לשינוי הגדרות של דיסק:

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

  • הגדרות דיסק לבחירת מופע: אם בחירת מופע לצומת באשכול כוללת diskConfig override, כל בחירות המופעים בקבוצת הצמתים חייבות לכלול diskConfig (אם מגדירים גם הגדרת דיסק בסיסית לצומת, מתרחשת שגיאת אימות).

  • תאימות של סוגי מכונות: כל סוגי המכונות בתוך InstanceSelection חייבים להיות תואמים ל-diskConfig שצוין. לדוגמה, אי אפשר לקבץ סוג מכונה e2-standard-4 שלא תומך ב-Hyperdisk עם סוג מכונה n4-standard-4 שנדרש לו Hyperdisk באותו בחירת מופע, כי diskConfig לא יכול לספק את שני סוגי המכונות.

  • תמיכה ב-SSD מקומי: אם מגדירים כונני SSD מקומיים (numLocalSsds > 0) בהגדרת החלפת דיסק, כל סוגי המכונות בבחירת המכונה חייבים לתמוך ב-SSD מקומי.

  • שדות חובה להגדרת החלפת דיסק:

    • אם מגדירים את diskConfig לבחירת מופע, חובה להגדיר את bootDiskType.
    • אם מגדירים את attachedDiskConfigs, חובה להגדיר גם את diskType וגם את diskSizeGb לכל דיסק שמצורף.

דוגמאות להגדרות של החלפת דיסק

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

  • צמתי בקרה: שימוש בדיסקים של אתחול שמוגדרים כברירת מחדל.
  • עובדים ראשיים: שימוש בדיסקים מותאמים אישית לכל בחירת מופע: לדוגמה, n4-standard-4 משתמש ב-hyperdisk-balanced, ואילו n2-standard-4 משתמש ב-pd-standard.
  • עובדים משניים: שימוש בהגדרת דיסק בסיסית בהתאמה אישית: pd-ssd עם 200 GB, שמוחלת על כל הבחירות של המופעים.

YAML של gcloud

מגדירים את המדיניות הגמישה של המכונות הווירטואליות בקובצי YAML עבור הצמתים הראשיים, צמתי העובדים הראשיים וצמתי העובדים המשניים:

  1. master-flex-policy.yaml:
    instanceFlexibilityPolicy:
      instanceSelectionList:
      - machineTypes:
        - e2-standard-8
        rank: 0
      - machineTypes:
        - n2-standard-8
        rank: 1
  2. worker-flex-policy.yaml:
    instanceFlexibilityPolicy:
      instanceSelectionList:
      - machineTypes:
        - n4-standard-4
        rank: 0
        diskConfig:
          bootDiskType: hyperdisk-balanced
          bootDiskSizeGb: 100
          bootDiskProvisionedIops: 6000
          bootDiskProvisionedThroughput: 400
          attachedDiskConfigs:
          - diskType: hyperdisk-throughput
            diskSizeGb: 300
      - machineTypes:
        - n2-standard-4
        rank: 0
        diskConfig:
          bootDiskType: pd-standard
          bootDiskSizeGb: 400
  3. secondary-worker-flex-policy.yaml:
    instanceFlexibilityPolicy:
      instanceSelectionList:
      - machineTypes:
        - e2-standard-8
        rank: 0
      - machineTypes:
        - n2-standard-8
        rank: 1

משתמשים בפקודה gcloud dataproc clusters create כדי להעביר את קובצי המדיניות:

gcloud dataproc clusters create CLUSTER_NAME \
    --region=REGION \
    --zone="" \
    --num-masters=1 \
    --master-instance-flexibility-policy-file=master-flex-policy.yaml \
    --num-workers=10 \
    --worker-instance-flexibility-policy-file=worker-flex-policy.yaml \
    --num-secondary-workers=4 \
    --secondary-worker-boot-disk-type=pd-ssd \
    --secondary-worker-boot-disk-size=200 \
    --secondary-worker-instance-flexibility-policy-file=secondary-worker-flex-policy.yaml

‫JSON של gcloud

משתמשים בפקודה gcloud dataproc clusters create עם מפרטי JSON מוטבעים ב-diskConfig ב---worker-instance-selection:

gcloud dataproc clusters create CLUSTER_NAME \
    --region=REGION \
    --zone="" \
    --num-masters=1 \
    --master-instance-selection='{"machineTypes":["e2-standard-8"],"rank":0}' \
    --master-instance-selection='{"machineTypes":["n2-standard-8"],"rank":1}' \
    --num-workers=10 \
    --worker-instance-selection='{"machineTypes":["n4-standard-4"],"rank":0,"diskConfig":{"bootDiskType":"hyperdisk-balanced","bootDiskSizeGb":100,"bootDiskProvisionedIops":6000,"bootDiskProvisionedThroughput":400,"attachedDiskConfigs":[{"diskType":"hyperdisk-throughput","diskSizeGb":300}]}}' \
    --worker-instance-selection='{"machineTypes":["n2-standard-4"],"rank":0,"diskConfig":{"bootDiskType":"pd-standard","bootDiskSizeGb":400}}' \
    --num-secondary-workers=4 \
    --secondary-worker-boot-disk-type=pd-ssd \
    --secondary-worker-boot-disk-size=200 \
    --secondary-worker-instance-selection='{"machineTypes":["e2-standard-8"],"rank":0}' \
    --secondary-worker-instance-selection='{"machineTypes":["n2-standard-8"],"rank":1}'

API

משתמשים בשדה diskConfig בתוך instanceFlexibilityPolicy.instanceSelectionList בבקשת Dataproc API clusters.create.

דוגמה לתוכן בקשת JSON:

{
  "projectId": "PROJECT_ID",
  "clusterName": "CLUSTER_NAME",
  "config": {
    "gceClusterConfig": {
      "zoneUri": ""
    },
    "masterConfig": {
      "numInstances": 1,
      "instanceFlexibilityPolicy": {
        "instanceSelectionList": [
          {
            "machineTypes": ["e2-standard-8"],
            "rank": 0
          },
          {
            "machineTypes": ["n2-standard-8"],
            "rank": 1
          }
        ]
      }
    },
    "workerConfig": {
      "numInstances": 10,
      "instanceFlexibilityPolicy": {
        "instanceSelectionList": [
          {
            "machineTypes": ["n4-standard-4"],
            "rank": 0,
            "diskConfig": {
              "bootDiskType": "hyperdisk-balanced",
              "bootDiskSizeGb": 100,
              "bootDiskProvisionedIops": 6000,
              "bootDiskProvisionedThroughput": 400,
              "attachedDiskConfigs": [
                {
                  "diskType": "HYPERDISK_THROUGHPUT",
                  "diskSizeGb": 2048
                }
              ]
            }
          },
          {
            "machineTypes": ["n2-standard-4"],
            "rank": 0,
            "diskConfig": {
              "bootDiskType": "pd-standard",
              "bootDiskSizeGb": 400
            }
          }
        ]
      }
    },
    "secondaryWorkerConfig": {
      "numInstances": 4,
      "diskConfig": {
        "bootDiskType": "pd-ssd",
        "bootDiskSizeGb": 200
      },
      "instanceFlexibilityPolicy": {
        "instanceSelectionList": [
          {
            "machineTypes": ["e2-standard-8"],
            "rank": 0
          },
          {
            "machineTypes": ["n2-standard-8"],
            "rank": 1
          }
        ]
      }
    }
  }
}

החלפת מאפיינים של מכונות וירטואליות גמישות

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

gcloud

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

--properties="$ROLE:$MACHINE_TYPE:$COMPONENT_PREFIX:$COMPONENT_PROPERTY=$VALUE"
  • ROLE יכול להיות primary_worker או secondary_worker.
  • אם יש כמה מאפיינים, צריך להפריד ביניהם בפסיקים.

הפקודה gcloud dataproc clusters create הבאה מבטלת את מספר ה-vCPU ש-YARN מקצה ל-NodeManager בעובדים משניים. בדוגמה הזו, הערך yarn.nodemanager.resource.cpu-vcores ב-yarn-site.xml מוגדר ל-6 לכל המכונות הווירטואליות של e2-standard-8 ושל n2-standard-8.

gcloud dataproc clusters create CLUSTER_NAME \
    --region=REGION \
    --zone="" \
    --master-instance-selection='{"machineTypes":["e2-standard-8"],"rank":0}' \
    --master-instance-selection='{"machineTypes":["n2-standard-8"],"rank":1}' \
    --num-workers=10 \
    --worker-instance-selection='{"machineTypes":["e2-standard-8"],"rank":0}' \
    --worker-instance-selection='{"machineTypes":["n2-standard-8"],"rank":1}' \
    --num-secondary-workers=4 \
    --secondary-worker-instance-selection='{"machineTypes":["e2-standard-8"],"rank":0}' \
    --secondary-worker-instance-selection='{"machineTypes":["n2-standard-8"],"rank":1}' \
    --properties="secondary_worker:e2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores=6,secondary_worker:n2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores=6"

API

כדי לשנות מאפיינים, מגדירים אותם בשדה properties של האובייקט SoftwareConfig בבקשה ליצירת אשכול.

משתמשים בתחביר הבא למפתח המאפיין:

ROLE:MACHINE_TYPE:COMPONENT_PREFIX:COMPONENT_PROPERTY
  • הערך של ROLE יכול להיות primary_worker או secondary_worker.

אובייקט SoftwareConfig הבא מבטל את מספר המעבדים הווירטואליים ש-YARN מקצה ל-NodeManager בעובדים משניים. בדוגמה הזו, הערך של yarn.nodemanager.resource.cpu-vcores מוגדר ל-6 לכל המכונות הווירטואליות של e2-standard-8 ושל n2-standard-8.

{
  "imageVersion":"2.2.42",
  "properties": {
    "secondary_worker:e2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores" : "6",
    "secondary_worker:n2-standard-8:yarn:yarn.nodemanager.resource.cpu-vcores" : "6"
  }
}

המאמרים הבאים