במאמר הזה מוסבר על מאפייני Spark ואיך מגדירים אותם. Serverless (בלי שרת) ל-Apache Spark משתמש במאפייני Spark כדי לקבוע את משאבי המחשוב, הזיכרון והדיסק שיוקצו לעומס העבודה של אצווה. הגדרות הנכס האלה יכולות להשפיע על ניצול המכסה של עומס העבודה ועל העלות. מידע נוסף זמין במאמרים בנושא מכסות של Serverless for Apache Spark ותמחור של Serverless for Apache Spark.
הגדרת מאפיינים של עומסי עבודה של Spark batch
אפשר לציין מאפייני Spark כששולחים עומס עבודה של Spark באצ' של Serverless for Apache Spark באמצעות Google Cloud המסוף, ה-CLI של gcloud או Dataproc API.
המסוף
נכנסים לדף Dataproc create batch במסוף Google Cloud .
בקטע נכסים, לוחצים על הוספת נכס.
מזינים את
Key(שם) ואתValueשל מאפיין Spark נתמך.
gcloud
דוגמה לשליחת בקשות באצווה באמצעות ה-CLI של gcloud:
gcloud dataproc batches submit spark --properties=spark.checkpoint.compress=true \ --region=region \ other args ...
API
מגדירים את RuntimeConfig.properties עם מאפייני Spark נתמכים כחלק מבקשת batches.create.
מאפייני Spark נתמכים
Serverless (בלי שרת) ל-Apache Spark תומך ברוב המאפיינים של Spark, אבל לא תומך במאפיינים של Spark שקשורים ל-YARN ולערבוב, כמו spark.master=yarn ו-spark.shuffle.service.enabled. אם קוד האפליקציה של Spark מגדיר מאפיין של YARN או של shuffle, האפליקציה תיכשל.
מאפיינים של סביבת זמן הריצה
Serverless 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 (ראו Google Cloud רמות של Serverless ל-Apache Spark). סשנים אינטראקטיביים תמיד מורצים ברמה Premium dataproc.tier.
|
standard |
מאפיינים של מנוע וזמן ריצה
| מאפיין (property) | תיאור | ברירת מחדל |
|---|---|---|
spark.dataproc.engine |
המנוע שבו יש להשתמש כדי להריץ את עומס העבודה של האצווה או את הסשן האינטראקטיבי: lightningEngine (ראו Lightning Engine) או המנוע default.
|
|
spark.dataproc.lightningEngine.runtime |
סביבת זמן הריצה שבה יש להשתמש כשבוחרים ב-Lightning Engine לעומס עבודה של אצווה או לסשן אינטראקטיבי: default או native (Native Query Execution).
|
default |
מאפיינים של הקצאת משאבים
Serverless ל-Apache Spark תומך במאפייני Spark הבאים להגדרת הקצאת משאבים:
| מאפיין (property) | תיאור | ברירת מחדל | דוגמאות |
|---|---|---|---|
spark.driver.cores |
מספר ליבות (vCPU) להקצאה ל-Spark driver.
ערכים תקינים: 4, 8, 16. |
4 |
|
spark.driver.memory |
כמות הזיכרון להקצאה לתהליך של Spark driver, שצוינה בפורמט מחרוזת של זיכרון JVM עם סיומת של יחידת גודל (m, g או t). זיכרון כולל של הדרייבר לכל ליבת דרייבר, כולל תקורה של זיכרון הדרייבר, שצריך להיות בין |
512m, 2g |
|
spark.driver.memoryOverhead |
כמות הזיכרון הנוסף ב-JVM להקצאה לתהליך של Spark driver, שצוינה בפורמט מחרוזת של זיכרון JVM עם סיומת של יחידת גודל ("m", "g" או "t"). זהו זיכרון שאינו heap, שמשויך לתקורה של JVM, למחרוזות פנימיות ולתקורה מקורית אחרת, והוא כולל זיכרון שנמצא בשימוש של תהליכי מנהל התקן אחרים, כמו תהליכי מנהל התקן של PySpark, וזיכרון שנמצא בשימוש של תהליכים אחרים שאינם מנהל התקן שפועלים במאגר.
גודל הזיכרון המקסימלי של הקונטיינר שבו פועל הדרייבר נקבע לפי הסכום של הזיכרון הכולל של הדרייבר לכל ליבת דרייבר, כולל תקורה של זיכרון הדרייבר, צריך להיות בין |
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 ליבות של מנהל התקן, גודל הדיסק המינימלי הוא 750g. |
100GiB לכל ליבה |
1024g, 2t |
spark.dataproc.driver.disk.tier |
רמת הכונן שבה יש להשתמש לאחסון מקומי ולאחסון של נתונים מעורבבים בדרייבר.
רמת הפרימיום של הדיסקים מציעה ביצועים טובים יותר ב-IOPS ובקצב העברת הנתונים, אבל
החיוב עליה גבוה יותר. אם בוחרים את מסלול הפרימיום של הדיסק בדרייבר, צריך לבחור גם את מסלול הפרימיום של המחשוב באמצעות spark.dataproc.driver.compute.tier=premium, ולציין את נפח הדיסק באמצעות spark.dataproc.executor.disk.size.
אם נבחר מסלול פרימיום של דיסק, מנהל ההתקן מקצה עוד 50GiB של שטח דיסק לאחסון המערכת, שאי אפשר להשתמש בו באפליקציות של המשתמש. |
רגילה | רגיל, פרימיום |
spark.executor.cores |
מספר ליבות המעבד (vCPU) שיוקצו לכל תהליך Spark executor.
ערכים תקינים: 4, 8, 16. |
4 |
|
spark.executor.memory |
כמות הזיכרון להקצאה לכל תהליך של Spark executor, שמוגדר בפורמט מחרוזת של זיכרון JVM עם סיומת של יחידת גודל ("m", "g" או "t"). הזיכרון הכולל של המבצע לכל ליבת מבצע, כולל התקורה של זיכרון המבצע, צריך להיות בין |
512m, 2g |
|
spark.executor.memoryOverhead |
נפח הזיכרון הנוסף של JVM שיוקצה לתהליך של Spark Executor, שצוין בפורמט מחרוזת של זיכרון JVM עם סיומת של יחידת גודל (m, g או t). זהו זיכרון שאינו heap ומשמש לתקורה של JVM, למחרוזות פנימיות ולתקורה מקומית אחרת, והוא כולל זיכרון של PySpark executor וזיכרון שמשמש תהליכים אחרים שאינם executor ופועלים במאגר.
גודל הזיכרון המקסימלי של הקונטיינר שבו מופעלת הפעולה נקבע לפי הסכום של הזיכרון הכולל של המבצע לכל ליבת מבצע, כולל התקורה של זיכרון המבצע, צריך להיות בין |
10% מזיכרון ה-executor, למעט עומסי עבודה של אצווה ב-PySpark, שמוגדרים כברירת מחדל ל-40% מזיכרון ה-executor | 512m, 2g |
spark.dataproc.executor.compute.tier |
רמת המחשוב שבה רוצים להשתמש ב-executors. רמת הפרימיום של מחשוב מציעה ביצועים גבוהים יותר לכל ליבה, אבל החיוב הוא לפי שיעור גבוה יותר. | רגילה | רגיל, פרימיום |
spark.dataproc.executor.disk.size |
כמות שטח הדיסק שהוקצתה לכל executor, שצוינה עם סיומת של יחידת גודל (k, m, g או t).
יכול להיות ששטח האחסון של הרכיב Executor ישמש לנתוני ערבוב ולשלבי ביניים של תלות. לפחות 250GiB ימים.
אם נבחרה רמת הביצועים של דיסק Premium ב-executor, הגדלים התקפים הם
375g, 750g, 1,500g, 3,000g, 6,000g או 9,000g. אם בוחרים את רמת הדיסק Premium ו-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.
אם נבחרה רמת דיסק Premium, לכל רכיב Executor מוקצה נפח דיסק נוסף של 50GiB לאחסון מערכת, שלא ניתן לשימוש על ידי אפליקציות של משתמשים. |
רגילה | רגיל, פרימיום |
spark.executor.instances |
מספר המבצעים הראשוני להקצאה. אחרי שתהליך העבודה של אצווה מתחיל, יכול להיות שההתאמה האוטומטית לעומס תשנה את מספר המבצעים הפעילים. הערך חייב להיות לפחות 2 ולכל היותר 2000. |
מאפייני התאמה אוטומטית לעומס
במאמר מאפייני הקצאה דינמית של Spark מופיעה רשימה של מאפייני Spark שאפשר להשתמש בהם כדי להגדיר את ההתאמה האוטומטית לעומס של Serverless 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 |
מספר מינימלי של משימות שיוך מחדש שהושלמו בשרת ביצוע כדי להתייחס אליהן כאל הטיה. | 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 |
מפעילים את המאפיין הזה כדי להריץ אבחון של כשל או ביטול של עומס עבודה של אצווה. אם האבחון מופעל, עומס העבודה של אצווה ימשיך להשתמש ב משאבי מחשוב אחרי שעומס העבודה יסתיים, עד שהאבחון יסתיים. מזהה URI שמצביע על המיקום של קובץ ה-tar של האבחון מופיע בשדה Batch.RuntimeInfo.diagnosticOutputUri של ה-API. |
dataproc.gcsConnector.version |
משתמשים במאפיין הזה כדי לשדרג לגרסה של מחבר Cloud Storage ששונה מגרסת זמן הריצה שהותקנה עם עומס העבודה של אצווה. |
dataproc.sparkBqConnector.version |
אפשר להשתמש במאפיין הזה כדי לשדרג לגרסה של מחבר Spark BigQuery ששונה מגרסת זמן הריצה של עומס העבודה של האצווה (runtime version) (ראו שימוש במחבר BigQuery עם Serverless for Apache Spark). |
dataproc.profiling.enabled |
מגדירים את הנכס הזה לערך true כדי להפעיל את יצירת הפרופיל של עומס העבודה של Serverless for Apache Spark. |
dataproc.profiling.name |
משתמשים במאפיין הזה כדי להגדיר את השם שמשמש ליצירת פרופיל בשירות Profiler. |
spark.jars |
המאפיין הזה משמש להגדרת רשימה של קובצי JAR שמופרדים באמצעות פסיקים, שייכללו בנתיבי המחלקות של מנהל ההתקן וה-executor |
spark.archives |
משתמשים במאפיין הזה כדי להגדיר את רשימת הארכיונים שמופרדים בפסיקים, שיוגדרו לחילוץ לספריית העבודה של כל מפעיל. הפורמטים הנתמכים הם .jar, .tar.gz, .tgz ו- .zip. כדי להוסיף את המאפיין הזה כשיוצרים סשן אינטראקטיבי או תבנית של סשן אינטראקטיבי, צריך להשתמש בסשנים אינטראקטיביים בלי שרת (serverless) |
dataproc.artifacts.remove |
משתמשים במאפיין הזה כדי להסיר ארטיפקטים שמוגדרים כברירת מחדל ומופיעים ב-Serverless for Apache Spark runtimes.
הארטיפקטים הנתמכים הם spark-bigquery-connector, conscrypt, iceberg ו-delta-lake. |