מאפייני Spark

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

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

הגדרת מאפיינים של עומס עבודה באצווה ב-Spark

אתם יכולים לציין מאפייני Spark כשאתם שולחים עומס עבודה באצווה של Managed Service for Apache Spark באמצעות מסוף Google Cloud , ה-CLI של gcloud או Dataproc API.

המסוף

  1. נכנסים לדף Managed Service for Apache Spark create batch במסוף Google Cloud .

    לדף Managed Service for Apache Spark Create batch

  2. בקטע נכסים, לוחצים על הוספת נכס.

  3. מזינים את Key (השם) ואת Value של מאפיין Spark נתמך.

gcloud

הדוגמה הבאה היא של שליחת אצווה ב-CLI של gcloud. אם יש כמה מאפיינים, צריך להפריד ביניהם באמצעות פסיקים.

gcloud dataproc batches submit spark \
    --properties=spark.checkpoint.compress=true,spark.driver.cores=8  \
    --region=REGION \
    other args ...

API

מגדירים את RuntimeConfig.properties עם מאפייני Spark נתמכים כחלק מבקשת batches.create.

מאפייני Spark נתמכים

‫Managed Service for Apache Spark תומך ברוב המאפיינים של Spark, אבל לא במאפיינים שקשורים ל-YARN ול-shuffle, כמו spark.master=yarn ו-spark.shuffle.service.enabled. אם קוד האפליקציה של Spark מגדיר מאפיין YARN או מאפיין shuffle, האפליקציה תיכשל.

מאפייני סביבת זמן הריצה

ב-Managed Service for Apache Spark אפשר להשתמש במאפיינים הבאים של Spark כדי להגדיר את סביבת זמן הריצה:

מאפיין (property) תיאור
spark.dataproc.driverEnv.ENVIRONMENT_VARIABLE_NAME מוסיפים את ENVIRONMENT_VARIABLE_NAME לתהליך של מנהל ההתקן. אפשר לציין כמה משתני סביבה.
spark.executorEnv.ENVIRONMENT_VARIABLE_NAME מוסיפים את ENVIRONMENT_VARIABLE_NAME לתהליך של ה-executor. אפשר לציין כמה משתני סביבה.

מאפיין הרמה

מאפיין (property) תיאור ברירת מחדל
dataproc.tier הרמה שבה פועל עומס עבודה באצווה, standard או premium (ראו רמות של Managed Service for Apache Spark). סשנים אינטראקטיביים תמיד פועלים ברמת הפרימיום dataproc.tier.
  • הגדרת המאפיין הזה של רמת האצווה לערך standard מגדירה את המאפיינים של סביבת זמן הריצה ורמת המשאבים של Managed Service for Apache Spark לרמה standard (ראו מאפייני הקצאת משאבים).
  • הגדרת המאפיין הזה של רמת האצווה לערך premium מגדירה את spark.dataproc.engine לערך lightningEngine, ואת spark.dataproc.driver.compute.tier ו-spark.dataproc.executor.compute.tier לערך premium. אפשר לשנות את רוב ההגדרות של רמות ה-batch שנקבעו באופן אוטומטי, אבל אי אפשר לשנות את ההגדרות של רמת ה-compute שנקבעו באופן אוטומטי ל-batches שמשתמשים בסביבות זמן ריצה שנוצרו לפני 3.0 (ראו מאפייני הקצאת משאבים).
standard

מאפייני מנוע וזמן ריצה

מאפיין (property) תיאור ברירת מחדל
spark.dataproc.engine המנוע שבו משתמשים כדי להריץ את עומס העבודה באצווה או את הסשן האינטראקטיבי: lightningEngine (ראו מנוע Lightning) או המנוע default.
  • עומסי עבודה באצווה: אם בוחרים את המאפיין הרגיל dataproc.tier לעומס העבודה, המאפיין הזה מוגדר באופן אוטומטי ל-default ואי אפשר לשנות אותו. אם בוחרים באפשרות premium dataproc.tier לעומס העבודה, המאפיין הזה מוגדר אוטומטית ל-lightningEngine, אבל אפשר לשנות את ההגדרה ל-default אם צריך.
  • סשנים אינטראקטיביים: ההגדרה הזו נקבעת באופן אוטומטי לערך default, אבל אפשר לשנות אותה לערך lightningEngine. חשוב לזכור שסשנים אינטראקטיביים תמיד פועלים ברמת premium. כשיוצרים פרופיל זמן ריצה (תבנית סשן) בדף Create a runtime profile במסוף Google Cloud , כברירת מחדל נבחרים רמת Premium והאפשרות Enable Lightning Engine to accelerate performance (שמגדירה את spark.dataproc.engine=lightningEngine).
  • אצוות (רמה רגילה): default
  • אצוות (מסלול פרימיום): lightningEngine
  • סשנים: default
spark.dataproc.lightningEngine.runtime סביבת זמן הריצה שבה משתמשים כשבוחרים את Lightning Engine לעומס עבודה באצווה או לסשן אינטראקטיבי: default או native (הרצת שאילתות מקורית). default

מאפייני הקצאת משאבים

ב-Managed Service for Apache Spark אפשר להשתמש במאפיינים הבאים של Spark כדי להקצות משאבים:

מאפיין (property) תיאור ברירת מחדל דוגמאות
spark.driver.cores מספר הליבות (vCPUs) שיוקצו לדרייבר של Spark. הערכים התקפים: 4,‏ 8,‏ 16. 4
spark.driver.memory

נפח הזיכרון שיוקצה לתהליך של מנהל ההתקן של Spark, בפורמט מחרוזת זיכרון של JVM עם סיומת של יחידת גודל ("m",‏ "g" או "t").

סה"כ זיכרון ה-driver לכל ליבת driver, כולל תקורה של זיכרון ה-driver, שצריך להיות בין 1024m ל-7424m ברמת המחשוב הרגילה (24576m ברמת המחשוב פרימיום). לדוגמה, אם spark.driver.cores = 4, אז 4096m <= spark.driver.memory + spark.driver.memoryOverhead <= 29696m.

512m, 2g
spark.driver.memoryOverhead

כמות הזיכרון הנוסף של JVM שצריך להקצות לתהליך של מנהל ההתקן של Spark, בפורמט מחרוזת של זיכרון JVM עם סיומת של יחידת גודל ("m",‏ "g" או "t").

זהו זיכרון שאינו ערימה (non-heap) שמשויך לתקורה של JVM, למחרוזות פנימיות ולתקורות מקוריות אחרות, והוא כולל זיכרון שמשמש תהליכי מנהלי התקנים אחרים, כמו תהליכי מנהלי התקנים של PySpark, וזיכרון שמשמש תהליכים אחרים שאינם מנהלי התקנים שפועלים בקונטיינר. גודל הזיכרון המקסימלי של הקונטיינר שבו פועל הדרייבר נקבע לפי הסכום של spark.driver.memoryOverhead ו-spark.driver.memory.

הזיכרון הכולל של מנהל ההתקן לכל ליבה של מנהל התקן, כולל התקורה של זיכרון מנהל ההתקן, חייב להיות בין 1024m ל-7424m ברמת המחשוב הרגילה (24576m ברמת המחשוב פרימיום). לדוגמה, אם spark.driver.cores = 4, אז 4096m <= spark.driver.memory + spark.driver.memoryOverhead <= 29696m.

‫10% מזיכרון הדרייבר, חוץ מעומסי עבודה באצווה של PySpark, שבהם ברירת המחדל היא 40% מזיכרון הדרייבר 512m, 2g
spark.dataproc.driver.compute.tier רמת המחשוב שבה משתמשים בדרייבר. רמת המחשוב Premium מציעה ביצועים גבוהים יותר לכל ליבה, אבל החיוב עליה גבוה יותר. רגיל רגיל, פרימיום
spark.dataproc.driver.disk.size כמות המקום בכונן שהוקצתה למנהל ההתקן, שמצוינת באמצעות סיומת של יחידת גודל ('k',‏ 'm',‏ 'g' או 't'). לפחות 250GiB ימים. אם נבחרה רמת הדיסק Premium במנהל ההתקן, הגדלים החוקיים הם 375g,‏ 750g,‏ 1500g,‏ 3000g,‏ 6000g או 9000g. אם בוחרים את רמת הדיסק Premium ו-16 ליבות של מנהלי התקנים, גודל הדיסק המינימלי הוא 750GB. ‫100GiB לכל ליבה 1024g, 2t
spark.dataproc.driver.disk.tier שכבת הדיסק שבה משתמשים לאחסון מקומי ולאחסון של נתונים שעברו ערבוב במנהל ההתקן. רמת הדיסק Premium מציעה ביצועים טובים יותר ב-IOPS ובקצב העברת הנתונים, אבל החיוב עליה גבוה יותר. אם בוחרים את רמת הדיסק Premium במנהל ההתקן, צריך לבחור גם את רמת המחשוב Premium באמצעות spark.dataproc.driver.compute.tier=premium, ולציין את מקום בכונן באמצעות spark.dataproc.executor.disk.size.

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

רגיל רגיל, פרימיום
spark.executor.cores מספר הליבות (vCPUs) שיוקצו לכל מפעיל Spark. הערכים התקפים: 4,‏ 8,‏ 16. 4
spark.executor.memory

נפח הזיכרון שיוקצה לכל תהליך של Spark executor, בפורמט מחרוזת זיכרון של JVM עם סיומת של יחידת גודל ("m",‏ "g" או "t").

הזיכרון הכולל של ה-executor לכל ליבת executor, כולל התקורה של זיכרון ה-executor, חייב להיות בין 1024m ל-7424m ברמת המחשוב הרגילה (24576m ברמת המחשוב פרימיום). לדוגמה, אם spark.executor.cores = 4, אז 4096m <= spark.executor.memory + spark.executor.memoryOverhead <= 29696m.

512m, 2g
spark.executor.memoryOverhead

כמות הזיכרון הנוסף של JVM שצריך להקצות לתהליך של Spark executor, בפורמט של מחרוזת זיכרון של JVM עם סיומת של יחידת גודל ("m",‏ "g" או "t").

זהו זיכרון שאינו ערימה (non-heap) שמשמש לתקורה של JVM, למחרוזות פנימיות ולתקורות מקוריות אחרות, והוא כולל זיכרון של מנהל הביצוע של PySpark וזיכרון שמשמש תהליכים אחרים שאינם מנהלי ביצוע שפועלים במאגר. גודל הזיכרון המקסימלי של הקונטיינר שבו פועל ה-executor נקבע לפי הסכום של spark.executor.memoryOverhead ו-spark.executor.memory.

הזיכרון הכולל של ה-executor לכל ליבת executor, כולל התקורה של זיכרון ה-executor, חייב להיות בין 1024m ל-7424m ברמת המחשוב הרגילה (24576m ברמת המחשוב פרימיום). לדוגמה, אם spark.executor.cores = 4, אז 4096m <= spark.executor.memory + spark.executor.memoryOverhead <= 29696m.

‫10% מזיכרון ה-executor, חוץ מעומסי עבודה באצווה של PySpark, שבהם ברירת המחדל היא 40% מזיכרון ה-executor 512m, 2g
spark.dataproc.executor.compute.tier רמת המחשוב שבה משתמשים ב-executors. רמת המחשוב Premium מציעה ביצועים גבוהים יותר לכל ליבה, אבל החיוב עליה גבוה יותר. רגיל רגיל, פרימיום
spark.dataproc.executor.disk.size נפח האחסון שמוקצה לכל מפעיל, מצוין באמצעות סיומת של יחידת גודל ("k",‏ "m",‏ "g" או "t"). יכול להיות שהמקום בכונן של ה-executor ישמש לנתוני ערבוב ולהכנת יחסי תלות. לפחות 250GiB ימים. אם בוחרים את רמת הדיסק Premium ב-executor, הגדלים החוקיים הם 375g,‏ 750g,‏ 1500g,‏ 3000g,‏ 6000g או 9000g. אם בוחרים את רמת הדיסק Premium ו-16 ליבות של מנהלי משימות, גודל הדיסק המינימלי הוא 750GB. ‫100GiB לכל ליבה 1024g, 2t
spark.dataproc.executor.disk.tier שכבת הדיסק שבה משתמשים לאחסון מקומי ולאחסון של נתונים שעברו ערבוב (shuffle) במבצעי המשימות. רמת הדיסק Premium מציעה ביצועים טובים יותר ב-IOPS ובקצב העברת הנתונים, אבל החיוב עליה גבוה יותר. אם בוחרים את רמת הדיסק Premium ב-executor, צריך לבחור גם את רמת המחשוב Premium באמצעות spark.dataproc.executor.compute.tier=premium, ולציין את נפח האחסון בדיסק באמצעות spark.dataproc.executor.disk.size.

אם בוחרים ברמת הדיסק Premium, לכל מפעיל מוקצה נפח דיסק נוסף של 50GiB לאחסון המערכת, שלא ניתן להשתמש בו באפליקציות של המשתמשים.

רגיל רגיל, פרימיום
spark.executor.instances המספר הראשוני של מנהלי המשימות שצריך להקצות. אחרי שמתחיל עומס עבודה באצווה, יכול להיות שההתאמה האוטומטית לעומס תשנה את מספר מנהלי הביצוע הפעילים. הערך צריך להיות לפחות 2 ולכל היותר 2000.

מאפייני התאמה אוטומטית לעומס (Automatic scaling)

במאמר מאפייני הקצאה דינמית של Spark מפורטים מאפייני Spark שבהם אפשר להשתמש כדי להגדיר התאמה אוטומטית לעומס (autoscaling) ב-Managed Service for Apache Spark.

מאפייני רישום ביומן

מאפיין (property) תיאור ברירת מחדל דוגמאות
spark.log.level כשהמדיניות מוגדרת, היא מבטלת את כל הגדרות היומן שהמשתמשים הגדירו, וגורמת להפעלה של SparkContext.setLogLevel() בזמן ההפעלה של Spark. רמות היומן התקינות הן: ALL,‏ DEBUG,‏ ERROR,‏ FATAL,‏ INFO,‏ OFF,‏ TRACE ו-WARN. INFO, DEBUG
spark.executor.syncLogLevel.enabled כשמגדירים את הערך true, רמת היומן שמוחלת באמצעות השיטה SparkContext.setLogLevel() מופצת לכל מבצעי המשימות. false true, false
spark.log.level.PackageName כשהמדיניות מוגדרת, היא מבטלת את כל הגדרות היומן שהמשתמשים הגדירו, ומפעילה קריאה ל-SparkContext.setLogLevel(PackageName, level) בזמן ההפעלה של Spark. רמות היומן התקינות הן: ALL,‏ DEBUG,‏ ERROR,‏ FATAL,‏ INFO,‏ OFF,‏ TRACE ו-WARN. spark.log.level.org.apache.spark=error

מאפייני תזמון

מאפיין (property) תיאור ברירת מחדל דוגמאות
spark.scheduler.excludeShuffleSkewExecutors החרגה של מבצעי משימות מוטים של מפת ערבוב בזמן התזמון, מה שיכול להפחית את זמני ההמתנה הארוכים לאחזור ערבוב שנגרמים בגלל הטיה של כתיבת ערבוב. false true
spark.scheduler.shuffleSkew.minFinishedTasks מספר מינימלי של משימות מפה שהושלמו ב-shuffle ב-executor כדי להתייחס אליהן כאל הטיה. 10 100
spark.scheduler.shuffleSkew.maxExecutorsNumber המספר המקסימלי של מנהלי משימות שייחשבו כהטיה. מבצעי משימות מוטים לא נכללים בסבב התזמון הנוכחי. 5 10
spark.scheduler.shuffleSkew.maxExecutorsRatio היחס המקסימלי של סך כל מנהלי ההפעלה שצריך להתייחס אליהם כאל הטיה. מבצעי משימות מוטים לא נכללים בתזמון. 0.05 0.1
spark.scheduler.shuffleSkew.ratio כפולה של המשימות הממוצעות שהושלמו של מיפוי ערבוב (shuffle map) ב-executor, שצריך להתייחס אליה כאל הטיה. 1.5 2.0

נכסים אחרים

מאפיין (property) תיאור
dataproc.diagnostics.enabled **נתמך רק בסביבות זמן ריצה בגרסה 2.3 ומטה**. צריך להפעיל את המאפיין הזה כדי להריץ אבחון של כשל או ביטול של עומס עבודה באצווה. אם הניתוח מופעל, עומס העבודה באצווה ממשיך להשתמש ב משאבי המחשוב אחרי שעומס העבודה מסתיים, עד שהניתוח מסתיים. בשדה ה-API‏ Batch.RuntimeInfo.diagnosticOutputUri מופיע URI שמצביע על המיקום של קובץ ה-tar של האבחון.
dataproc.gcsConnector.version **נתמך רק בסביבות זמן ריצה בגרסה 2.3 ומטה**. משתמשים במאפיין הזה כדי לשדרג לגרסה של חיבור ל-Cloud Storage ששונה מהגרסה שמותקנת עם גרסת זמן הריצה של עומס העבודה באצווה.
dataproc.sparkBqConnector.version **נתמך רק בסביבות זמן ריצה בגרסה 2.3 ומטה**. אפשר להשתמש במאפיין הזה כדי לשדרג לגרסה של מחבר Spark ל-BigQuery ששונה מהגרסה שמותקנת עם גרסת זמן הריצה של עומס העבודה באצווה (ראו שימוש במחבר ל-BigQuery עם Managed Service for Apache Spark).
dataproc.profiling.enabled **נתמך רק בסביבות זמן ריצה בגרסה 2.3 ומטה**. מגדירים את המאפיין הזה לערך true כדי להפעיל את יצירת הפרופילים של עומס העבודה ב-Managed Service for Apache Spark.
dataproc.profiling.name **נתמך רק בסביבות זמן ריצה בגרסה 2.3 ומטה** משתמשים במאפיין הזה כדי להגדיר את השם שמשמש ליצירת פרופיל בשירות Profiler.
spark.jars משתמשים במאפיין הזה כדי להגדיר את הרשימה המופרדת בפסיקים של קובצי JAR שצריך לכלול בנתיבי המחלקות של הדרייבר וה-executor
spark.archives משתמשים במאפיין הזה כדי להגדיר את הרשימה המופרדת בפסיקים של קובצי הארכיון שצריך לחלץ לספריית העבודה של כל מבצע. יש תמיכה בקבצים מסוג ‎.jar,‏ ‎.tar.gz,‏ ‎.tgz ו-‎ .zip. בסשנים אינטראקטיביים ללא שרת, צריך להוסיף את המאפיין הזה כשיוצרים סשן אינטראקטיבי או פרופיל זמן ריצה (תבנית סשן).
dataproc.artifacts.remove משתמשים במאפיין הזה כדי להסיר פריטי מידע שנוצרו בתהליך הפיתוח (Artifact) שמותקנים כברירת מחדל בסביבות זמן ריצה של Managed Service for Apache Spark. הפריטים הנתמכים הם conscrypt,‏ delta-lake,‏ iceberg,‏ rapids ו-spark-bigquery-connector.