מאפייני Spark

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

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

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

המסוף

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

    מעבר אל 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 ולערבוב, כמו 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 לתהליך של קובץ ההפעלה. אפשר לציין כמה משתני סביבה.

מאפיין רמה

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

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

מאפיין (property) תיאור ברירת מחדל
spark.dataproc.engine המנוע שבו יש להשתמש כדי להריץ את עומס העבודה של האצווה או את הסשן האינטראקטיבי: lightningEngine (ראו Lightning Engine) או המנוע default.
  • עומסי עבודה של אצווה: אם בוחרים את מאפיין dataproc.tier הרגיל לעומס העבודה, המאפיין הזה מוגדר אוטומטית ל-default ואי אפשר לשנות את ההגדרה. אם בוחרים באפשרות premium dataproc.tier לעומס העבודה, המאפיין הזה מוגדר אוטומטית לערך lightningEngine, אבל אפשר לשנות את ההגדרה לערך default אם צריך.
  • סשנים אינטראקטיביים: ההגדרה הזו מוגדרת אוטומטית ל-default, אבל אפשר לשנות אותה ל-lightningEngine. חשוב לזכור שסשנים אינטראקטיביים תמיד פועלים ברמה premium.
  • חבילות (מסלול רגיל): default
  • חבילות (מסלול פרימיום): lightningEngine
  • סשנים: default
spark.dataproc.lightningEngine.runtime סביבת זמן הריצה שבה יש להשתמש כשבוחרים ב-Lightning Engine לעומס עבודה של אצווה או לסשן אינטראקטיבי: default או native (Native Query Execution). default

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

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

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

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

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

512m, 2g
spark.driver.memoryOverhead

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

זהו זיכרון שאינו 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% מזיכרון ה-driver, למעט עומסי עבודה של PySpark batch, שמוגדרים כברירת מחדל ל-40% מזיכרון ה-driver 512m, 2g
spark.dataproc.driver.compute.tier רמת המחשוב שבה יש להשתמש במנהל ההתקן. רמת הפרימיום של מחשוב מציעה ביצועים גבוהים יותר לכל ליבה, אבל החיוב הוא לפי שיעור גבוה יותר. רגילה רגיל, פרימיום
spark.dataproc.driver.disk.size כמות שטח הדיסק שהוקצה לדרייבר, שמצוינת עם סיומת של יחידת גודל (k,‏ m,‏ g או t). לפחות 250GiB ימים. אם נבחרה רמת הביצועים של דיסק Premium בדרייבר, הגדלים האפשריים הם 375g, 750g, 1,500g, 3,000g, 6,000g או 9,000g. אם בוחרים את רמת הפרימיום של הדיסק ו-16 ליבות של מנהל התקן, גודל הדיסק המינימלי הוא 750 גרם. 100GiB לכל ליבה 1024g, 2t
spark.dataproc.driver.disk.tier רמת הדיסק שבה יש להשתמש לאחסון מקומי ולאחסון של נתונים מעורבבים (shuffle) בדרייבר. רמת הדיסק Premium מציעה ביצועים טובים יותר ב-IOPS ובקצב העברת הנתונים, אבל החיוב עליה גבוה יותר. אם בוחרים ברמת הדיסק Premium בדרייבר, צריך לבחור גם ברמת המחשוב Premium באמצעות spark.dataproc.driver.compute.tier=premium, ולציין את כמות שטח הדיסק באמצעות spark.dataproc.executor.disk.size.

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

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

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

הזיכרון הכולל של המבצע לכל ליבת מבצע, כולל התקורה של זיכרון המבצע, צריך להיות בין 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).

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

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

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

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

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

מאפייני התאמה אוטומטית לעומס

במאמר בנושא מאפייני הקצאה דינמית של Spark מפורטת רשימה של מאפייני Spark שאפשר להשתמש בהם כדי להגדיר את ההתאמה האוטומטית לעומס של 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 מספר מינימלי של משימות ממופות שבוצעו ב-executor כדי להתייחס אליהן כאל הטיה. 10 100
spark.scheduler.shuffleSkew.maxExecutorsNumber מספר המבצעים המקסימלי שייחשבו כהטיה. מבצעים מוטים לא נכללים בסבב התזמון הנוכחי. 5 10
spark.scheduler.shuffleSkew.maxExecutorsRatio היחס המקסימלי של מספר הכולל של תהליכי ההפעלה שייחשבו כהטיה. תהליכי הפעלה מוטים לא נכללים בתזמון. 0.05 0.1
spark.scheduler.shuffleSkew.ratio כפולה של הממוצע של משימות ערבוב שהושלמו במפה ב-executor, שתיחשב כהטיה. ‫1.5 2.0

מאפיינים אחרים

מאפיין (property) תיאור
dataproc.diagnostics.enabled ‫**נתמך רק בסביבות זמן ריצה מגרסה 2.3 ומגרסאות קודמות**. מפעילים את המאפיין הזה כדי להריץ אבחון של כשל או ביטול של עומס עבודה של אצווה. אם האבחון מופעל, עומס העבודה של אצווה ימשיך להשתמש ב משאבי מחשוב אחרי שעומס העבודה יסתיים, עד שהאבחון יסתיים. מזהה URI שמפנה למיקום של קובץ ה-tar של האבחון מופיע בשדה Batch.RuntimeInfo.diagnosticOutputUri של ה-API.
dataproc.gcsConnector.version ‫**נתמך רק בסביבות זמן ריצה מגרסה 2.3 ומגרסאות קודמות**. אפשר להשתמש במאפיין הזה כדי לשדרג לגרסה של Cloud Storage Connector ששונה מהגרסה שהותקנה עם גרסת זמן הריצה של עומס העבודה של אצווה.
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 ‫**Supported in 2.3 and earlier runtimes only** Use this property to set the name used to create a profile on the Profiler service.
spark.jars המאפיין הזה משמש להגדרת רשימה של קובצי JAR שמופרדים באמצעות פסיקים, שייכללו בנתיבי המחלקות של מנהל ההתקן וה-executor
spark.archives משתמשים במאפיין הזה כדי להגדיר את רשימת הארכיונים שמופרדים בפסיקים שיוגדרו לחילוץ לספריית העבודה של כל מפעיל. הפורמטים הנתמכים הם ‎.jar,‏ ‎.tar.gz,‏ ‎.tgz ו-‎.zip. כדי להוסיף את המאפיין הזה לסשנים אינטראקטיביים ללא שרת, צריך לעשות זאת כשיוצרים סשן או תבנית אינטראקטיביים.
dataproc.artifacts.remove משתמשים במאפיין הזה כדי להסיר ארטיפקטים שמוגדרים כברירת מחדל ומופיעים ב-Managed Service for Apache Spark runtimes. הארטיפקטים הנתמכים הם conscrypt,‏ delta-lake,‏ iceberg,‏ rapids ו-spark-bigquery-connector.