האצת עומסי עבודה של אצוות וסשנים של Spark באמצעות Lightning Engine

במאמר הזה מוסבר איך להפעיל את Lightning Engine כדי להאיץ עומסי עבודה באצווה וסשנים אינטראקטיביים ב-Managed Service for Apache Spark.

סקירה כללית

‫Lightning Engine הוא מאיץ שאילתות עם ביצועים גבוהים שמופעל על ידי מנוע אופטימיזציה רב-שכבתי. המנוע מבצע טכניקות אופטימיזציה מקובלות, כמו אופטימיזציה של שאילתות וביצוע, וגם אופטימיזציות מותאמות אישית בשכבת מערכת הקבצים ובמחברי הגישה לנתונים.

כפי שמוצג באיור הבא, מנוע Lightning מאיץ את ביצוע השאילתות של Spark בעומס עבודה דמוי TPC-H (גודל קבוצת נתונים של 10 TB).

מידע נוסף זמין במאמר Introducing Lightning Engine — the next generation of Apache Spark performance.

זמינות של Lightning Engine

  • אפשר להשתמש ב-Lightning Engine ובהרצת שאילתות מקוריות עם סביבת זמן הריצה 2.3 של Managed Service for Apache Spark. מנוע Lightning והפעלת שאילתות מקוריות לא זמינים בסביבת זמן הריצה 3.0.

  • ‫Lightning Engine זמין רק ב-Managed Service for Apache Spark במסלול הפרימיום.

    • עומסי עבודה באצווה: מנוע Lightning מופעל באופן אוטומטי לעומסי עבודה באצווה במסלול הפרימיום. לא נדרשת שום פעולה.

    • סשנים אינטראקטיביים: מנוע Lightning לא מופעל כברירת מחדל בסשנים אינטראקטיביים. כדי להפעיל אותו, קראו את המאמר הפעלת Lightning Engine.

    • פרופילים של סביבות זמן ריצה (תבניות של סשנים): כשיוצרים פרופיל של סביבת זמן ריצה במסוף Google Cloud , כברירת מחדל נבחרים הרמה Premium והאפשרות Enable Lightning Engine to accelerate performance. כשיוצרים תבנית סשן באמצעות Google Cloud CLI או Dataproc API, מנוע Lightning לא מופעל כברירת מחדל. כדי להפעיל או להגדיר אותו, קראו את המאמר הפעלת Lightning Engine.

הפעלת Lightning Engine

בקטעים הבאים מוסבר איך להפעיל את Lightning Engine בעומס עבודה באצווה, בפרופיל זמן ריצה (תבנית סשן) ובסשן אינטראקטיבי ב-Managed Service for Apache Spark.

עומס עבודה באצווה

הפעלת Lightning Engine בעומס עבודה באצווה

כדי להפעיל את Lightning Engine בעומס עבודה באצווה, אתם יכולים להשתמש במסוף Google Cloud , ב-Google Cloud CLI או ב-Dataproc API.

המסוף

כדי להפעיל את Lightning Engine בעומס עבודה באצווה, משתמשים במסוף Google Cloud .

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

    לדף Managed Service for Apache Spark Jobs

  2. לוחצים על Submit job כדי לפתוח את הדף Submit a job.

  3. בקטע Select compute type for job, מוודאים שהאפשרות Serverless Spark מסומנת.

  4. בקטע Serverless job details:

    • בוחרים Runtime profile (או משאירים את הגדרת שירות ברירת מחדל לאזור שלכם), ולוחצים על Configure בכרטיס Summary (או לוחצים על Create new profile בתפריט Runtime profile) כדי לפתוח את חלונית ההגדרות של פרופיל זמן הריצה.
    • ‫Tier: בוחרים באפשרות Premium. הפעולה הזו מפעילה ומסמנת באופן אוטומטי את האפשרות Enable Lightning Engine to accelerate performance.

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

    • הגדרות נוספות:

      • Runtime configuration: לוחצים על Edit, בוחרים את 2.3 בשביל Spark runtime version ולוחצים על Save.
      • הגדרת מנהל ההתקן וה-executor: אופציונלי: לוחצים על Edit כדי להגדיר את Driver disk ואת Executor disk ל-Premium (SSD)‎, או משאירים אותם בערך ברירת המחדל Standard (HDD)‎ ולוחצים על Save. אם בוחרים רמת דיסק פרימיום, צריך לבחור את גודל הדיסק. מידע נוסף זמין במאמר מאפייני הקצאת משאבים.
    • לוחצים על שימוש בהגדרות האישיות (או על שמירת פרופיל חדש).

  5. בקטע Job execution and properties, בקטע Spark properties (או בחלונית ההגדרות של פרופיל זמן הריצה בקטע Additional configuration ‏> Other customizations ‏> Spark properties), אפשר ללחוץ על Add property ולהזין את הצמד הבא של Key (שם המאפיין) ו-Value כדי לבחור את זמן הריצה של Native Query Execution:

    מפתח ערך
    spark.dataproc.lightningEngine.runtime מותאמת

  6. בדף Submit a job, ממלאים את השדה Files and artifacts ואת ההגדרות האחרות של עומס העבודה באצווה. שליחת עומס עבודה של Spark באצווה

  7. לוחצים על Submit כדי להריץ את עומס העבודה של Spark באצווה.

gcloud

כדי להפעיל את Lightning Engine בעומס עבודה באצווה, מגדירים את דגלי הפקודה הבאים של ה-CLI של gcloud‏ gcloud dataproc batches submit spark.

gcloud dataproc batches submit spark \
    --project=PROJECT_ID \
    --region=REGION \
    --version=2.3 \
    --properties=dataproc.tier=premium \
    OTHER_FLAGS_AS_NEEDED

הערות:

  • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud . מזהי הפרויקטים מופיעים בקטע Project info ב-Dashboard במסוף Google Cloud .
  • ‫REGION: אזור זמין ב-Compute Engine להרצת עומס העבודה.
  • --properties=dataproc.tier=premium. הגדרת מסלול פרימיום מגדירה באופן אוטומטי את המאפיינים הבאים בעומס העבודה באצווה:

    • ‫spark.dataproc.engine=lightningEngine בוחר את Lightning Engine לעומס העבודה באצווה.
    • המאפיינים spark.dataproc.driver.compute.tier ו-spark.dataproc.executor.compute.tier מוגדרים לערך premium (ראו מאפייני הקצאת משאבים). אי אפשר לשנות את הגדרות משאבי המחשוב האלה של מסלול הפרימיום שנקבעו באופן אוטומטי, עבור אצוות שמשתמשות בסביבות זמן ריצה שנוצרו לפני 3.0.
  • מאפיינים אחרים

    • Native Query Engine: spark.dataproc.lightningEngine.runtime=native מוסיפים את המאפיין הזה אם רוצים לבחור את סביבת זמן הריצה Native Query Execution.

    • רמות וגדלים של דיסקים: כברירת מחדל, גודל הדיסק של מנהל ההתקן ושל ה-executor מוגדר לרמות ולגדלים של standard. אפשר להוסיף מאפיינים כדי לבחור רמות וגדלים של דיסקים ב-premium (בכפולות של 375 GiB).
      מידע נוסף זמין במאמר מאפייני הקצאת משאבים.

  • ‫OTHER_FLAGS_AS_NEEDED: ראו שליחת עומס עבודה באצווה של Spark.

API

כדי להפעיל את Lightning Engine בעומס עבודה באצווה, כחלק מבקשת batches.create:

  • מגדירים את RuntimeConfig.version לערך 2.3.
  • מוסיפים את "dataproc.tier":"premium" ל-RuntimeConfig.properties. הגדרת מסלול הפרימיום מגדירה באופן אוטומטי את המאפיינים הבאים בעומס העבודה באצווה:

    • ‫spark.dataproc.engine=lightningEngine בוחר את Lightning Engine לעומס העבודה באצווה.
    • המאפיינים spark.dataproc.driver.compute.tier ו-spark.dataproc.executor.compute.tier מוגדרים לערך premium (ראו מאפייני הקצאת משאבים). אי אפשר לשנות את הגדרות המחשוב האלה ברמת Premium שנקבעו באופן אוטומטי, עבור אצוות שמשתמשות בסביבות זמן ריצה שנוצרו לפני 3.0.

אחר RuntimeConfig.properties:

  • מנוע שאילתות מקומי: spark.dataproc.lightningEngine.runtime:native. צריך להוסיף את המאפיין הזה אם רוצים לבחור את סביבת זמן הריצה Native Query Execution.

  • רמות וגדלים של דיסקים: כברירת מחדל, גודל הדיסק של מנהל ההתקן ושל ה-executor מוגדר לרמות ולגדלים של standard. אפשר להוסיף מאפיינים כדי לבחור רמות וגדלים של premium (בכפולות של 375 GiB).
    מידע נוסף זמין במאמר מאפיינים של הקצאת משאבים.

במאמר שליחת עומס עבודה של Spark באצווה מוסבר איך להגדיר שדות אחרים של API לעומס עבודה באצווה.

פרופיל זמן ריצה

הפעלת Lightning Engine בפרופיל של סביבת זמן ריצה (תבנית סשן)

אתם יכולים להפעיל את Lightning Engine בפרופיל זמן ריצה (תבנית סשן) לסשן של Jupyter או של Spark Connect באמצעות מסוף Google Cloud ,‏ Google Cloud CLI או Dataproc API.

המסוף

כדי להפעיל את Lightning Engine בפרופיל זמן ריצה (תבנית סשן) באמצעות מסוף Google Cloud :

  1. במסוף Google Cloud , נכנסים לדף Serverless Runtime Profiles של Managed Service for Apache Spark:

    כניסה לדף Serverless Runtime Profiles

  2. לוחצים על Create כדי לפתוח את הדף Create a runtime profile.

  3. בוחרים וממלאים את השדות הבאים:

    • ‫Tier: מוודאים שהאפשרות Premium (ברירת המחדל) מסומנת, ומוודאים שהאפשרות Enable Lightning Engine to accelerate performance (מסומנת כברירת מחדל, ומגדירה את spark.dataproc.engine=lightningEngine) מסומנת.

    • הגדרות נוספות: קובעים את ההגדרות הבאות של סביבת זמן הריצה ושל מאפייני Spark:

      • Runtime configuration: לוחצים על Edit ומוודאים שהערך של Spark runtime version הוא 2.3, ואז לוחצים על Save.

      • התאמות אישיות אחרות: (אופציונלי) כדי לבחור את סביבת זמן הריצה Native Query Execution, לוחצים על Edit, לוחצים על Add property בקטע Spark properties, מזינים את הצמד הבא של Key (שם המאפיין) ו-Value, ואז לוחצים על Save:

        מפתח ערך
        spark.dataproc.lightningEngine.runtime native

  4. ממלאים, בוחרים או מאשרים הגדרות אחרות של פרופיל סביבת זמן הריצה. מידע נוסף על הגדרות פרופיל זמן הריצה זמין במאמר יצירת פרופיל זמן ריצה.

  5. לוחצים על יצירה.

gcloud

אי אפשר ליצור ישירות תבנית סשן (פרופיל זמן ריצה) של Managed Service for Apache Spark באמצעות ה-CLI של gcloud. במקום זאת, אתם יכולים להשתמש בפקודה gcloud beta dataproc session-templates import כדי לייבא תבנית סשן קיימת, לערוך את התבנית המיובאת כדי להפעיל את Lightning Engine ואת סביבת זמן הריצה של Native Query (אופציונלי), ואז לייצא את התבנית הערוכה באמצעות הפקודה gcloud beta dataproc session-templates export.

API

כדי להפעיל את Lightning Engine בתבנית סשן (פרופיל זמן ריצה), כחלק מבקשת sessionTemplates.create:

אחר RuntimeConfig.properties:

  • מנוע שאילתות מקומי: spark.dataproc.lightningEngine.runtime:native: מוסיפים את המאפיין הזה ל-RuntimeConfig.properties כדי לבחור את סביבת זמן הריצה Native Query Execution.

מידע נוסף על הגדרת שדות אחרים של ממשק ה-API של תבנית הסשן זמין במאמר יצירת פרופיל זמן ריצה (תבנית סשן).

סשן אינטראקטיבי

הפעלת Lightning Engine בסשן אינטראקטיבי

אתם יכולים להשתמש ב-Google Cloud CLI או ב-Dataproc API כדי להפעיל את Lightning Engine בסשן אינטראקטיבי של Managed Service for Apache Spark. אפשר גם להפעיל את Lightning Engine בסשן אינטראקטיבי ב-Notebook ב-BigQuery Studio.

gcloud

כדי להפעיל את Lightning Engine בסשן אינטראקטיבי, מגדירים את הדגלים הבאים של פקודת gcloud beta dataproc sessions create spark ב-CLI של gcloud.

gcloud beta dataproc sessions create spark \
    --project=PROJECT_ID \
    --location=REGION \
    --version=2.3 \
    --properties=dataproc.tier=premium,spark.dataproc.engine=lightningEngine \
    OTHER_FLAGS_AS_NEEDED

הערות:

  • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud . מזהי הפרויקטים מופיעים בקטע Project info ב-Dashboard במסוף Google Cloud .
  • ‫REGION: אזור זמין ב-Compute Engine להרצת עומס העבודה.
  • --properties=dataproc.tier=premium,spark.dataproc.engine=lightningEngine. המאפיינים האלה מפעילים את Lightning Engine בסשן.

  • נכסים אחרים:

    • ‫Native Query Engine: spark.dataproc.lightningEngine.runtime=native: מוסיפים את המאפיין הזה כדי לבחור את סביבת זמן הריצה Native Query Execution.
  • OTHER_FLAGS_AS_NEEDED: ראו יצירת סשן אינטראקטיבי.

API

כדי להפעיל את Lightning Engine בסשן, כחלק מבקשת sessions.create:

אחר RuntimeConfig.properties:

  • ‫Native Query Engine‏: spark.dataproc.lightningEngine.runtime:native: מוסיפים את המאפיין הזה ל-RuntimeConfig.properties אם רוצים לבחור את סביבת זמן הריצה Native Query Execution.

במאמר יצירת סשן אינטראקטיבי מוסבר איך להגדיר שדות אחרים של תבנית הסשן ב-API.

‫Notebook ב-BigQuery

אתם יכולים להפעיל את Lightning Engine כשאתם יוצרים סשן בNotebook של PySpark ב-BigQuery Studio.

from google.cloud.dataproc_spark_connect import DataprocSparkSession
from google.cloud.dataproc_v1 import Session
session = Session()

# Enable Lightning Engine.
session.runtime_config.properties["version"] = "2.3"
session.runtime_config.properties["dataproc.tier"] = "premium"
session.runtime_config.properties["spark.dataproc.engine"] = "lightningEngine"

# Enable THE Native Query Execution runtime.
session.runtime_config.properties["spark.dataproc.lightningEngine.runtime"] = "native"

# Create the Spark session.
spark = (
   DataprocSparkSession.builder
     .appName("APP_NAME")
     .dataprocSessionConfig(session)
     .getOrCreate())

# Add Spark application code here:

אימות ההגדרות של Lightning Engine

אתם יכולים להשתמש במסוף Google Cloud , ב-Google Cloud CLI או ב-Dataproc API כדי לאמת את ההגדרות של Lightning Engine בעומס עבודה באצווה, בפרופיל זמן ריצה (תבנית סשן) או בסשן אינטראקטיבי.

עומס עבודה באצווה

  • כדי לוודא שהערך של tier באצווה מוגדר ל-premium ושהערך של engine מוגדר ל-Lightning Engine:

    • מסוףGoogle Cloud : בדף Jobs, בוחרים בכרטיסייה Serverless Spark כדי לראות את העמודה Tier של ה-batch, ולוחצים על Job ID של ה-batch כדי לראות את ההגדרות של Tier ו-Engine בכרטיסייה Summary בדף Job details של ה-batch.
    • ה-CLI של gcloud: מריצים את הפקודה gcloud dataproc batches describe.
    • ‫API: שולחים בקשת batches.get.

פרופיל זמן ריצה

  • כדי לוודא שהערך של engine הוא Lightning Engine בפרופיל זמן ריצה (תבנית סשן):

    • ‫Google Cloud : בדף Serverless Runtime Profiles, לוחצים על השם של פרופיל סביבת זמן הריצה כדי לראות את ההגדרות שלו בדף הפרטים של פרופיל סביבת זמן הריצה.

    • ‫ה-CLI של gcloud: מריצים את הפקודה gcloud beta dataproc session-templates describe.

    • ‫API: שולחים בקשת sessionTemplates.get.

סשן אינטראקטיבי

  • כדי לוודא שהפרמטר engine מוגדר לערך Lightning Engine בסשן אינטראקטיבי:

    • מסוףGoogle Cloud : בדף Sessions, בודקים את העמודה Engine של הסשן. אפשר ללחוץ על Session ID כדי לראות את ההגדרה הזו גם בדף הפרטים של הסשן.

    • ‫ה-CLI של gcloud: מריצים את הפקודה gcloud beta dataproc sessions describe.

    • ‫API: שולחים בקשת sessions.get.

ביצוע שאילתה מקורית

הפעלת שאילתות מקוריות (NQE) היא תכונה אופציונלית של Lightning Engine שמשפרת את הביצועים באמצעות הטמעה מקורית שמבוססת על Apache Gluten ו-Velox, ומיועדת למכשירי Google.

סביבת זמן הריצה של Native Query Execution כוללת ניהול זיכרון מאוחד למעבר דינמי בין זיכרון off-heap לזיכרון on-heap, בלי צורך לשנות את ההגדרות הקיימות של Spark. ‫NQE כולל תמיכה מורחבת באופרטורים, בפונקציות ובסוגי נתונים של Spark, וגם יכולות חכמות לזיהוי אוטומטי של הזדמנויות לשימוש במנוע המקורי לפעולות pushdown אופטימליות.

זיהוי עומסי עבודה של הרצת שאילתות מקוריות

כדאי להשתמש ב-Native Query Execution בתרחישים הבאים:

  • ממשקי API של Spark Dataframe, ממשקי API של Spark Dataset ושאילתות Spark SQL שקוראות נתונים מקובצי Parquet ו-ORC. פורמט קובץ הפלט לא משפיע על ביצועי ההרצה של Native Query.

  • עומסי עבודה שמומלצים על ידי כלי ההתאמה של Native Query Execution.

לא מומלץ להפעיל שאילתות מקוריות בעומסי עבודה עם קלט מסוגי הנתונים הבאים:

  • בייט: ORC ו-Parquet
  • חותמת זמן: ORC
  • ‫Struct, ‏ Array, ‏ Map: ‏Parquet

מגבלות על הרצת שאילתות מקוריות

הפעלת Native Query Execution בתרחישים הבאים עלולה לגרום לחריגות, לחוסר תאימות ל-Spark או לחזרה של עומס העבודה למנוע ברירת המחדל של Spark.

חלופות

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

  • ‫ANSI: אם מצב ANSI מופעל, הביצוע חוזר ל-Spark.

  • מצב תלוי אותיות רישיות: הרצת שאילתות מקורית תומכת רק במצב ברירת המחדל של Spark, שלא תלוי באותיות רישיות. אם מופעל מצב תלוי אותיות רישיות, יכולות להתקבל תוצאות שגויות.

  • סריקת טבלה מחולקת למחיצות (Partitions): הרצת שאילתות מקוריות תומכת בסריקת טבלה מחולקת למחיצות רק כשהנתיב מכיל את פרטי המחיצה. אחרת, עומס העבודה חוזר למנוע ההרצה של Spark.

התנהגות לא תואמת

התנהגות לא תואמת או תוצאות שגויות יכולות להתרחש כשמשתמשים בהרצת שאילתות מקוריות במקרים הבאים:

  • פונקציות JSON: הרצת שאילתות מקוריות תומכת במחרוזות שמוקפות במירכאות כפולות, ולא במירכאות בודדות. אם משתמשים במירכאות בודדות, התוצאות שגויות. אם משתמשים ב-"*" בנתיב עם הפונקציה get_json_object, הפונקציה מחזירה NULL.

  • הגדרת קריאה של Parquet:

    • ב-Native Query Execution, הערך של spark.files.ignoreCorruptFiles הוא ברירת המחדל false, גם אם הוא מוגדר כ-true.
    • התכונה "הרצת שאילתות מקורית" מתעלמת מ-spark.sql.parquet.datetimeRebaseModeInRead ומחזירה רק את תוכן הקובץ בפורמט Parquet. ההבדלים בין לוח השנה ההיברידי הקודם (יוליאני-גרגוריאני) לבין לוח השנה הגרגוריאני הפרופטי לא נלקחים בחשבון. התוצאות של Spark יכולות להיות שונות.
  • ‫NaN: לא נתמך. לדוגמה, אם משתמשים ב-NaN בהשוואה מספרית, יכולות להתקבל תוצאות לא צפויות.

  • קריאה עמודית של Spark: יכולה להתרחש שגיאה חמורה כי הווקטור העמודי של Spark לא תואם ל-Native Query Execution.

  • זליגה: כשמגדירים מספר גדול של מחיצות ערבוב, התכונה "זליגה לדיסק" יכולה להפעיל OutOfMemoryException. במקרה כזה, אפשר להקטין את מספר המחיצות כדי למנוע את החריגה.