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

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

סקירה כללית

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

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

מידע נוסף זמין במאמר הדור הבא של ביצועי Apache Spark: הכירו את Lightning Engine.

זמינות של Lightning Engine

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

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

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

הפעלת Lightning Engine

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

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

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

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

המסוף

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

  1. במסוף Google Cloud :

    1. עוברים אל Managed Service for Apache Spark Batches.
    2. לוחצים על יצירה כדי לפתוח את הדף יצירת קבוצה.
  2. בוחרים את השדות הבאים וממלאים אותם:

    • מאגר:
      • גרסת זמן ריצה: בוחרים באפשרות 2.3.
    • הגדרת מסלול:

      • בוחרים באפשרות Premium. האפשרות 'הפעלת LIGHTNING ENGINE לשיפור הביצועים של Spark' מופעלת ומסומנת אוטומטית.

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

      אתם יכולים להגדיר את רמת הדיסק של ה-Driver ואת רמת הדיסק של ה-Executor ל-Premium או להשאיר אותם בערך ברירת המחדל של הרמה Standard. אם בוחרים רמת פרימיום של דיסק, צריך לבחור את גודל הדיסק. מידע נוסף זמין במאמר בנושא מאפייני הקצאת משאבים.

    • מאפיינים: אופציונלי: מזינים את הצמד Key (שם המאפיין) ו-Value אם רוצים לבחור את זמן הריצה של Native Query Execution:

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

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

  4. לוחצים על שליחה כדי להפעיל את עומס העבודה של Spark batch.

gcloud

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

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 בלוח הבקרה של מסוף 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.

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

אחר RuntimeConfig.properties:

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

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

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

תבנית סשן

הפעלת Lightning Engine בתבנית סשן

אפשר להשתמש במסוף, ב-Google Cloud CLI או ב-Dataproc API Google Cloud כדי להפעיל את Lightning Engine בתבנית של סשן ב-Jupyter או ב-Spark Connect.

המסוף

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

  1. במסוף Google Cloud :

    1. עוברים אל Managed Service for Apache Spark Session Templates.
    2. לוחצים על יצירה כדי לפתוח את הדף יצירת תבנית סשן.
  2. בוחרים את השדות הבאים וממלאים אותם:

    • פרטי תבנית הסשן:
      • בוחרים באפשרות 'הפעלת Lightning Engine להאצת הביצועים של Spark'.
    • הגדרת הביצוע:
      • גרסת זמן ריצה: בוחרים באפשרות 2.3.
    • מאפיינים: מזינים את זוגות הערכים הבאים Key (שם המאפיין) ו-Value כדי לבחור את רמת הפרימיום:

      מפתח ערך
      dataproc.tier פרימיום
      spark.dataproc.engine lightningEngine

      אופציונלי: מזינים את הצמד הבא של Key (שם המאפיין) ו-Value כדי לבחור את זמן הריצה של Native Query Execution:

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

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

  4. לוחצים על שליחה כדי ליצור את תבנית הסשן.

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:

  • Native Query Engine: 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 בסשן אינטראקטיבי במחברת BigQuery Studio.

gcloud

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

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 בלוח הבקרה של מסוף 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 של תבנית סשן.

מחברת BigQuery

אפשר להפעיל את Lightning Engine כשיוצרים סשן במחברת 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 : בדף Batches, אפשר לראות את העמודות Tier ו-Engine של האצווה. אפשר גם ללחוץ על מזהה האצווה כדי לראות את ההגדרות האלה בדף פרטי האצווה.
    • ‫ה-CLI של gcloud: מריצים את הפקודה gcloud dataproc batches describe.
    • ‫API: שליחת בקשת batches.get.

תבנית סשן

  • כדי לוודא שהמנוע engine מוגדר ל-Lightning Engine בתבנית של סשן:

    • מסוףGoogle Cloud : בדף Session Templates, בודקים את העמודה Engine של התבנית. אפשר ללחוץ על השם של תבנית הסשן כדי לראות את ההגדרה הזו גם בדף הפרטים של תבנית הסשן.
    • ‫ה-CLI של gcloud: מריצים את הפקודה gcloud beta dataproc session-templates describe.
    • ‫API: שליחת בקשת sessionTemplates.get.

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

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

    • מסוףGoogle Cloud : בדף Interactive Sessions, בודקים את העמודה Engine של התבנית. אפשר ללחוץ על מזהה סשן אינטראקטיבי כדי לראות את ההגדרה הזו גם בדף הפרטים של תבנית הסשן.
    • ‫ה-CLI של gcloud: מריצים את הפקודה gcloud beta dataproc sessions describe.
    • ‫API: שליחת בקשת sessions.get.

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

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

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

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

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

  • ממשקי 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, שהוא מצב לא תלוי-רישיות. אם מפעילים את המצב שבו יש הבחנה בין אותיות רישיות לאותיות קטנות, יכולות להיות תוצאות שגויות.

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

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

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

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

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

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

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

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