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 יש צומת מאסטר אחד ושני צומתי עובד ראשיים.
- לאשכול בזמינות גבוהה (HA) יש שלושה צמתים ראשיים.
- לאשכול עם צומת יחיד יש צומת אחד שפועל כצומת ראשי וכצומת עובד.
- קלאסטר עם אפס קנה מידה כולל רק צומת ראשי ועובדים משניים (אין עובדים ראשיים).
- צמתי עובדים משניים: צמתי עובדים משניים לא מאחסנים נתונים ופועלים רק כצמתי עיבוד. אתם יכולים להשתמש בעובדים משניים כדי להרחיב את יכולת החישוב בלי להרחיב את נפח האחסון. סוג ה-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.
המסוף
כדי ליצור אשכול עם מכונות וירטואליות גמישות:
- פותחים את הדף Create cluster.
- לוחצים על הגדרה נוספת כדי להרחיב את הקטע.
- עורכים את העובדים הראשיים או את העובדים המשניים. בקטע 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, אפשר להגדיר הגדרת דיסק בסיסית לצומת. תצורת הדיסק הבסיסית הזו חלה על כל בחירות המופעים של הצומת.הגדרות דיסק לבחירת מופע: אם בחירת מופע לצומת באשכול כוללת
diskConfigoverride, כל בחירות המופעים בקבוצת הצמתים חייבות לכלול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 עבור הצמתים הראשיים, צמתי העובדים הראשיים וצמתי העובדים המשניים:
master-flex-policy.yaml:instanceFlexibilityPolicy: instanceSelectionList: - machineTypes: - e2-standard-8 rank: 0 - machineTypes: - n2-standard-8 rank: 1worker-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: 400secondary-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"
}
}
המאמרים הבאים
- מידע נוסף על מאפייני אשכול Managed Service for Apache Spark
- איך יוצרים אשכול Managed Service for Apache Spark