מאפייני Spark

במאמר הזה מוסבר על מאפייני 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.

המסוף

  1. נכנסים לדף Dataproc create batch במסוף Google Cloud .

    מעבר אל Dataproc Create batch

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

  3. מזינים את 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 מגדירה את מאפייני הרמה של זמן הריצה והמשאבים של Dataproc כרמה 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

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

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

מאפיין (property) תיאור ברירת מחדל דוגמאות
spark.driver.cores מספר ליבות (vCPU) להקצאה ל-Spark driver. ערכים תקינים: 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 ליבות של מנהל התקן, גודל הדיסק המינימלי הוא 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").

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