מאפייני 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 מספר ליבות (vCPUs) להקצאה לדרייבר של 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) במנהל ההתקן. רמת הפרימיום של הדיסקים מציעה ביצועים טובים יותר ב-IOPS ובקצב העברת הנתונים, אבל החיוב עליה גבוה יותר. אם בוחרים את מסלול הפרימיום של הדיסק בדרייבר, צריך לבחור גם את מסלול הפרימיום של המחשוב באמצעות 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 ופועלים במאגר. גודל הזיכרון המקסימלי של הקונטיינר שבו מופעלת הפעולה נקבע לפי הסכום של spark.executor.memoryOverhead ועוד spark.executor.memory.

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

‫10% מזיכרון ה-executor, למעט עומסי עבודה של PySpark batch, שמוגדרים כברירת מחדל ל-40% מזיכרון ה-executor 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.

אם נבחרה רמת פרימיום של דיסק, לכל תהליך הפעלה מוקצה נפח דיסק נוסף של 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() מועברת לכל רכיבי ה-executor. 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.