שימוש במנוע Lightning
Lightning Engine הוא הדור הבא של ביצועי Apache Spark, עם שיפורים בלעדיים שנועדו לספק שיפורים משמעותיים בביצועים, ביעילות מבחינת עלויות וביציבות התפעולית.
יתרונות
היתרונות של Lightning Engine כוללים:
פעולות נתונים מואצות: שיפורים באינטראקציה עם אחסון בענן, כולל טיפול במטא-נתונים, עומסי עבודה של כתיבה וקלט/פלט וקטורי, מאפשרים לכם לשפר משמעותית את הביצועים ולחסוך בעלויות.
ביצוע חכם של שאילתות: שיפורים מתקדמים באופטימיזציה מאפשרים לצמצם באופן דינמי את הנתונים שנסרקים, לבצע אופטימיזציה של עיבוד הנתונים וליצור תוכניות ביצוע יעילות יותר לשאילתות מהירות וחסכוניות יותר.
עומסי עבודה יעילים של AI ו-ML: קיצור זמני ההפעלה של אשכולות לעומסי עבודה מבוססי GPU, ופישוט הפריסה בסביבות מאובטחות באמצעות תמונות שעברו אופטימיזציה ל-AI.
מנוע Lightning מציע שיפורים משמעותיים בביצועים, אבל ההשפעה הספציפית משתנה בהתאם לעומס העבודה. הוא מתאים במיוחד למשימות עתירות-חישוב שמנצלות את ממשקי ה-API של Spark Dataframe, ממשקי ה-API של Spark Dataset ושאילתות Spark SQL, ולא לפעולות שמוגבלות על ידי קלט/פלט.
השוואה למנוע רגיל
Lightning Engine הוא חלופה למנוע הרגיל שמשמש להפעלת משימות Spark באשכול Managed Service for Apache Spark. בטבלה הבאה מוצגת השוואה בין Lightning Engine לבין מאפייני ההפעלה של מנוע רגיל, תחולת עומס העבודה והיתרונות העיקריים.
| תכונה | מנוע רגיל | Lightning Engine |
|---|---|---|
| דגל CLI | --engine=default או מבטלים את ההגדרה של הדגל |
--engine=lightning |
| מתאים במיוחד עבור | משימות כלליות, פיתוח ובדיקה | עומסי עבודה בקנה מידה ארגוני שדורשים האצה משמעותית |
| יתרונות מרכזיים | ביצועים בסיסיים | אינטראקציה אופטימלית עם אחסון בענן, ביצוע חכם של שאילתות |
דרישות
הדרישות הבאות חלות על התכונה Lightning Engine:
- גרסת התמונה: צריך להשתמש ב-Lightning Engine עם גרסה
2.3.3ואילך של תמונת Managed Service for Apache Spark, או עם גרסה3.0.2ואילך של תמונת3.02.3(תמונותdebian13ו-ubuntu24). - משימות נתמכות: נתמכות משימות Spark, PySpark, SparkSQL ו-SparkR. המנוע הרגיל פועל על סוגים אחרים של משימות שנשלחות לאשכול Lightning Engine.
ביצוע שאילתות מקומי
התכונה 'הרצת שאילתות מקוריות' (NQE) היא רכיב אופציונלי של Lightning Engine שמספק רמת האצה עמוקה יותר למשימות ספציפיות. זהו מנוע מקורי שמבוסס על Apache Gluten ועל Velox, שעבר אופטימיזציה למכשירי Google. הוא משפר את הביצועים על ידי הפעלת חלקים משאילתת Spark מחוץ ל-JVM.
- מומלץ להשתמש ב-NQE עבור:
- משימות עתירות-חישוב שמתבססות על ממשקי API של Spark Dataframe ו-Spark Dataset, ועל שאילתות Spark SQL שקוראות נתונים מקבצים ומטבלאות של Parquet, ORC, Apache Iceberg ו-Delta Lake. פורמט קובץ הפלט לא משפיע על הביצועים שלו.
- לא מומלץ להשתמש ב-NQE עבור:
- משימות שמסתמכות במידה רבה על Resilient Distributed Datasets (מערכי נתונים מבוזרים עמידים, RDD), על User-Defined Functions (פונקציות שהוגדרו על ידי המשתמש, UDF), על רוב ספריות Spark Machine Learning (למידת מכונה, ML) ועל פעולות שקשורות לקלט/פלט עם עיכובים בגלל גישה לאחסון.
הרצת שאילתות מקומיות ב-ARM
ב-Managed Service for Apache Spark יש תמיכה בהרצת שאילתות מקוריות ב-Lightning Engine בארכיטקטורת ARM, שעברה אופטימיזציה במיוחד למעבדי Google Axion במכונות וירטואליות מסוג C4A ARM (ראו סוגי מכונות ARM שנתמכים ב-Managed Service for Apache Spark) באמצעות התמונה 2.3-ubuntu22-arm. מכונות וירטואליות מבוססות-ARM של Google Axion C4A בנויות על ליבות ARM Neoverse V2, ומספקות שיפורים משמעותיים ביחס בין המחיר לביצועים.
הפעלת NQE במופעי Google Axion ARM משלבת בין ביצועים ומחיר ברמת החומרה ובין רוחב פס גבוה של זיכרון לכל ליבה, עם האצה של שאילתות וקטוריות ברמת התוכנה, וכך מקצרת משמעותית את זמני הריצה של השאילתות ומפחיתה את העלות הכוללת של הבעלות (TCO).
היתרונות העיקריים של ARM:
- מהירות גבוהה פי 2.5 עד פי 4 בהשוואה ל-Spark בקוד פתוח: שיפורי ביצועים של פי 2.5 עד פי 4 בהשוואה ל-Apache Spark בקוד פתוח בעומסי עבודה אנליטיים.
- אופטימיזציה של העלויות: מיקסום היתרון של התמחור והביצועים של מופעי Google Axion C4A (שמספקים עד 65% ביצועים טובים יותר במחיר טוב יותר בהשוואה למופעי x86 דומים).
- שוויון מלא בין אופרטורים ופורמטים: שוויון מלא עם אופרטורים של x86 NQE, עם האצה מובנית לפורמטים של טבלאות Cloud Storage Parquet, Apache Iceberg ו-Delta Lake.
- אפס שינויים בקוד: הפעלה חלקה באשכולות ARM באמצעות דגלי תצורה רגילים, בלי לשנות את קוד האפליקציה של Spark.
דרישות
הדרישות הבאות חלות על התכונה Native Query Execution:
מנוע ההפעלה: אפשר להשתמש ב-NQE רק באשכולות שמופעל בהם מנוע Lightning בזמן יצירת האשכול.
משימות נתמכות: נתמכות משימות Spark, PySpark, SparkSQL ו-SparkR. המנוע הרגיל יפעל (ללא NQE) בסוגי משימות אחרים שנשלחים לאשכול של Lightning Engine.
ללא GPUs ומאיצים: משימות שהופעלה בהן NQE ושנשלחו במאיצי GPU ייכשלו (אבל יכולות להפיק תועלת מ-Lightning Engine ללא NQE).
סוגי נתונים: אין תמיכה בקלט של סוגי הנתונים הבאים:
- בייט: ORC ו-Parquet
- Struct, Array, Map: Parquet
דרישות ארכיטקטורה ומערכת הפעלה
הדרישות של NQE שונות בהתאם לארכיטקטורת המעבד:
| ארכיטקטורה | סוגי מכונות נתמכים | מערכת הפעלה ותמונה נתמכות |
|---|---|---|
| x86 | משפחות מכונות של Intel ו-AMD | Debian-12 ו-Ubuntu-22 (גרסת תמונה 2.3.3 ומעלה 2.3); Debian-13 ו-Ubuntu-24 (גרסת תמונה 3.0.2 ומעלה 3.0) |
| ARM | סדרת מכונות C4A (מכונות וירטואליות של Google Axion ARM) | תמונה אחת (2.3-ubuntu22-arm) (גרסה 2.3.3 ומעלה 2.3) |
תמחור
למידע על מחירים אפשר לעיין במאמר בנושא מחירים של Managed Service for Apache Spark.
יצירת אשכול Lightning Engine
בקטע הזה מוסבר איך ליצור אשכול של Managed Service for Apache Spark שמאפשר את Lightning Engine במשימות Spark שנשלחות לאשכול.
אפשר גם להפעיל את התכונה Native Query Execution (NQE) באשכול כשיוצרים את האשכול, או להפעיל את NQE מאוחר יותר למשימות ספציפיות של Spark שנשלחות לאשכול.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that you have the permissions required to complete this guide.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Dataproc API, if it is not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that you have the permissions required to complete this guide.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Dataproc API, if it is not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
התפקידים הנדרשים
כדי ליצור אשכול של Managed Service for Apache Spark ולשלוח משימות לאשכול, צריך תפקידים מסוימים של ניהול זהויות והרשאות גישה (IAM). יכול להיות שבעלים של פרויקט בענן או אדמין של שירות כבר הקצו לכם או לחשבון שירות את התפקידים האלה, בהתאם למדיניות הארגון. כדי לבדוק את הקצאות התפקידים, אפשר לעיין במאמר האם צריך להקצות תפקידים?.
מידע נוסף על הקצאת תפקידים מופיע במאמר ניהול הגישה לפרויקטים, לתיקיות ולארגונים.
תפקידי משתמשים
כדי לקבל את ההרשאות שדרושות ליצירת אשכול של Managed Service for Apache Spark, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:
-
הכול:
- Dataproc Editor (
roles/dataproc.editor) on the project - משתמש בחשבון שירות (
roles/iam.serviceAccountUser) בחשבון השירות של Compute Engine שמוגדר כברירת מחדל
- Dataproc Editor (
תפקיד בחשבון שירות
כדי לוודא שלחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine יש את ההרשאות שנדרשות ליצירת אשכול של Managed Service for Apache Spark, צריך לבקש מהאדמין להקצות לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine את תפקיד ה-IAM Dataproc Worker (roles/dataproc.worker) בפרויקט.
יצירת האשכול
בדוגמאות הבאות מוסבר איך ליצור אשכול Lightning Engine באמצעות מסוף Google Cloud , Google Cloud CLI, Dataproc API, Cloud Client Libraries for Python או Terraform. אפשר גם ליצור אשכול עם Lightning Engine מופעל באמצעות ספריות הלקוח ב-Cloud של Go, Java ו-Node.js.
המסוף
- פותחים את הדף Create cluster.
- לוחצים על הגדרה נוספת כדי להרחיב את הקטע.
- עורכים את התאמה אישית ואחר.
- בחלונית שנפתחת, מוודאים שתיבת הסימון הפעלת מנוע Lightning מסומנת.
- אופציונלי: כדי להפעיל את סביבת זמן הריצה של הביצוע המקורי כברירת מחדל לעבודות Spark, מסמנים את תיבת הסימון הפעלת ביצוע מקורי.
- לוחצים על Save.
- מגדירים הגדרות אחרות של האשכול לפי הצורך.
- לוחצים על יצירת אשכול.
יצירת אשכול ARM:
כדי ליצור אשכול ARM עם Google Axion ועם Native Query Execution:
- בקטע Worker configuration, בוחרים את סדרת המכונות C4A ובוחרים את סוג מכונת ה-ARM.
- בקטע תמונה, בוחרים את התמונה
2.3-ubuntu22-arm. - בקטע Additional configuration (הגדרה נוספת) > Customization & Other (התאמה אישית ואחר), מוודאים שהאפשרויות Enable Lightning Engine (הפעלת מנוע Lightning) ו-Enable Native Execution (הפעלת ביצוע מקורי) מסומנות.
- לוחצים על יצירת אשכול.
gcloud
כדי ליצור אשכול עם Lightning Engine מופעל, מריצים את הפקודה
gcloud dataproc clusters createעם הדגל--engine=lightning. למידע נוסף, ראו יצירת אשכול באמצעות ה-CLI של gcloud.gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --engine=lightning \ --image-version=2.3אופציונלי: כדי להפעיל את זמן הריצה של ההפעלה המקורית כברירת מחדל לעבודות Spark, צריך לכלול את המאפיין
spark:spark.dataproc.lightningEngine.runtime=native.gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --engine=lightning \ --image-version=2.3 \ --properties='spark:spark.dataproc.lightningEngine.runtime=native'כדי ליצור אשכול ARM עם NQE: כדי ליצור אשכול של Managed Service for Apache Spark עם צמתים של Google Axion C4A ARM ו-NQE מופעל:
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --image-version=2.3-ubuntu22-arm \ --master-machine-type=c4a-standard-16 \ --worker-machine-type=c4a-standard-16 \ --engine=lightning \ --properties='spark:spark.dataproc.lightningEngine.runtime=native'
API
כדי ליצור אשכול עם Lightning Engine מופעל, שולחים בקשת clusters.create. מידע נוסף זמין במאמר בנושא יצירת אשכול באמצעות REST API.
בגוף הבקשה, מגדירים את השדה
engineלערךLIGHTNING.{ "projectId": "PROJECT_ID", "clusterName": "CLUSTER_NAME", "config": { "engine": "LIGHTNING", "gceClusterConfig": {}, "softwareConfig": { "imageVersion": "2.3" } } }אופציונלי: כדי להפעיל את סביבת זמן הריצה של הביצוע המקורי כברירת מחדל לכל המשימות, צריך לכלול את המאפיין
spark:spark.dataproc.lightningEngine.runtime.{ "projectId": "PROJECT_ID", "clusterName": "CLUSTER_NAME", "config": { "engine": "LIGHTNING", "gceClusterConfig": {}, "softwareConfig": { "imageVersion": "2.3", "properties": { "spark:spark.dataproc.lightningEngine.runtime": "native" } } } }
Python
כדי ליצור אשכול עם Lightning Engine מופעל, משתמשים בשיטה
create_clusterומגדירים את השדהengineבהגדרת האשכול לערךLIGHTNING. מידע נוסף זמין במאמר בנושא יצירת אשכול באמצעות Python.from google.cloud import dataproc_v1 def create_lightning_cluster(project_id, region, cluster_name): client_options = {"api_endpoint": f"{region}-dataproc.googleapis.com:443"} cluster_client = dataproc_v1.ClusterControllerClient(client_options=client_options) cluster = { "project_id": project_id, "cluster_name": cluster_name, "config": { "engine": "LIGHTNING", "software_config": { "image_version": "2.3-debian12", }, } } operation = cluster_client.create_cluster( project_id=project_id, region=region, cluster=cluster ) result = operation.result() print(f"Cluster created successfully: {result.cluster_name}")אופציונלי: כדי להפעיל את זמן הריצה של ההפעלה המקורית כברירת מחדל לעבודות Spark, צריך לכלול את המאפיין
spark:spark.dataproc.lightningEngine.runtime.from google.cloud import dataproc_v1 def create_lightning_native_cluster(project_id, region, cluster_name): client_options = {"api_endpoint": f"{region}-dataproc.googleapis.com:443"} cluster_client = dataproc_v1.ClusterControllerClient(client_options=client_options) cluster = { "project_id": project_id, "cluster_name": cluster_name, "config": { "engine": "LIGHTNING", "software_config": { "image_version": "2.3-debian12", "properties": { "spark:spark.dataproc.lightningEngine.runtime": "native" } } } } operation = cluster_client.create_cluster( project_id=project_id, region=region, cluster=cluster ) result = operation.result() print(f"Cluster created successfully: {result.cluster_name}")
Terraform
- בהגדרת המשאב
google_dataproc_cluster, מגדירים את הארגומנטengineלערךLIGHTNING. - לפרטים נוספים ולאפשרויות מתקדמות, אפשר לעיין במסמכי התיעוד הרשמיים של Terraform בנושא המשאב
google_dataproc_cluster.
אימות מנוע האשכול
המסוף
- נכנסים לדף Cluster Details במסוף Google Cloud .
- מוודאים שהערך
Lightning Engineמופיע בשדה מנוע. - אם הפעלתם את ההגדרה Native Query Execution (הרצת שאילתות מקוריות), ודאו שהערך
nativeמופיע בשדה Native Execution (הרצה מקורית).
gcloud
כדי לוודא שהמנוע ו-NQE (אם הוא מופעל) פועלים, מריצים את הפקודה
gcloud dataproc clusters describe:gcloud dataproc clusters describe CLUSTER_NAME --project=PROJECT_ID --region=REGIONבודקים את הפלט של המאפיינים
engineו-lightningEngine.runtime:clusterName: lightning-engine-cluster engine: lightningEngine lightningEngine.runtime: native
שליחת משימה באמצעות Lightning Engine
אם הפעלתם את Lightning Engine כשנוצר האשכול, כששולחים עבודת Spark לאשכול, Lightning Engine מופעל כברירת מחדל בעבודה.
הפעלת ההגדרה 'הרצת שאילתות מקוריות' לעבודה
אם הפעלתם את התכונה Native Query Execution (NQE) כשנוצר אשכול של Lightning Engine, כל עבודות Spark יפעלו עם NQE מופעל, אלא אם משביתים את NQE בעבודה ספציפית.
אם לא הפעלתם את NQE כשיצרתם את אשכול Lightning Engine, אתם יכולים להפעיל את NQE למשימה כשאתם שולחים אותה, כמו בדוגמאות הבאות.
gcloud
כדי להפעיל את התכונה Native Query Execution כששולחים עבודת Spark, צריך לכלול את המאפיין spark.dataproc.lightningEngine.runtime=native:
gcloud dataproc jobs submit spark \
--cluster=CLUSTER_NAME \
--region=REGION \
--properties=spark.dataproc.lightningEngine.runtime=native \
-- ...
API
כדי להפעיל את התכונה Native Query Execution כששולחים משימת Spark, צריך לכלול את המאפיין spark.dataproc.lightningEngine.runtime בבקשה:
{
"job":{
"placement":{
"clusterName": ...
},
"sparkJob":{
"mainClass": ...,
"properties":{
"spark.dataproc.lightningEngine.runtime":"native"
}
}
}
}
השבתת ההגדרה 'הפעלת שאילתות מקוריות' למשימה
אם הפעלתם את Native Query Execution (NQE) כשיצרתם אשכול של Lightning Engine, כל עבודות Spark יפעלו עם NQE מופעל, אלא אם תשביתו את NQE בעבודה ספציפית.
אפשר להשבית את NQE למשימת Spark ספציפית כששולחים את המשימה, כמו בדוגמאות הבאות.
gcloud
כדי להשבית את התכונה 'הרצת שאילתות מקוריות' כששולחים משימת Spark לאשכול Lightning Engine, צריך לכלול את המאפיין spark.dataproc.lightningEngine.runtime=default:
gcloud dataproc jobs submit spark \
--cluster=CLUSTER_NAME \
--region=REGION \
--properties=spark.dataproc.lightningEngine.runtime=default \
-- ...
API
כדי להשבית את התכונה 'הרצת שאילתות מקוריות' כששולחים משימת Spark לאשכול Lightning Engine, צריך לכלול את המאפיין spark.dataproc.lightningEngine.runtime=default:
{
"job":{
"placement":{
"clusterName": ...
},
"sparkJob":{
"mainClass": ...,
"properties":{
"spark.dataproc.lightningEngine.runtime":"default"
}
}
}
}
אימות של הפעלת שאילתות מקוריות לעבודות
אחרי ששולחים עבודה לאשכול Lightning Engine, אפשר לוודא שהאפשרות Native Query Execution (הרצת שאילתות מקוריות) מופעלת עבור העבודה.
המסוף
- נכנסים לדף Jobs במסוף Google Cloud .
- לוחצים על מזהה העבודה כדי לפתוח את הדף פרטי העבודה.
- מוודאים ש-
nativeמופיע בשדה Native Execution (הרצה מקומית).
gcloud
מריצים את הפקודה
gcloud dataproc jobs describe:gcloud dataproc jobs describe JOB_ID --project=PROJECT_ID --region=REGIONבודקים את הפלט של
lightningEngine.runtimeבקטע Properties:lightningEngine.runtime: native
פרמטרים להגדרה
בטבלה הבאה מפורטים פרמטרי ההגדרה העיקריים של Lightning Engine ושל Native Query Execution.
| שם הפרמטר | תיאור | מנועי חיפוש רלוונטיים | ערך ברירת המחדל | ערך ברירת המחדל (Lightning Engine) | ניתן לשינוי על ידי המשתמשים (ברמת המשרה) | היקף |
|---|---|---|---|---|---|---|
--engine |
הגדרה ברמת האשכול לבחירת המנוע במהלך יצירת האשכול. | בכל האשכול | default |
lightning |
לא | אשכול |
spark:spark.dataproc.lightningEngine.runtime |
הגדרה ברמת האשכול לבחירת זמן הריצה של מנוע Lightning במהלך יצירת האשכול. | רק Lightning | default |
default |
לא | אשכול |
spark.dataproc.lightningEngine.runtime |
המתג מפעיל או משבית את Native Query Execution (NQE) (הרצת שאילתות מקוריות) ב-Lightning Engine. | רק Lightning | default |
default |
כן. אפשר להגדיר את הערך native או default. |
משימה |
מגבלות
הפעלה של Native Query Execution בתרחישים הבאים עלולה לגרום לחריגים, לחוסר תאימות ל-Spark או להחזרת עומס העבודה למנוע Spark שמוגדר כברירת מחדל.
חלופות
במקרים הבאים, ביצוע שאילתות מקוריות עלול לגרום לנפילה של עומס העבודה למנוע הביצוע של Spark:
- ANSI: אם מצב ANSI מופעל, הביצוע חוזר ל-Spark.
- מצב תלוי-רישיות: ביצוע שאילתות מקוריות תומך רק במצב ברירת המחדל של Spark שלא תלוי באותיות רישיות. אם מפעילים את המצב שבו יש הבחנה בין אותיות רישיות לאותיות קטנות, יכולות להיות תוצאות שגויות.
- סריקה של טבלה מחולקת למחיצות: הפעלת שאילתות מקוריות תומכת בסריקה של טבלה מחולקת למחיצות רק אם הנתיב מכיל את פרטי המחיצה. אחרת, עומס העבודה חוזר למנוע ההפעלה של Spark.
התנהגות לא תואמת
התנהגות לא תואמת או תוצאות שגויות יכולות להתרחש כשמשתמשים ב-Native Query Execution במקרים הבאים:
- פונקציות JSON: בהרצת שאילתות מקוריות יש תמיכה במחרוזות שמוקפות במירכאות כפולות, ולא במירכאות בודדות. תוצאות שגויות מתקבלות עם מרכאות בודדות. שימוש ב-
*בנתיב עם הפונקציהget_json_objectמחזירNULL. - הגדרת קריאה של Parquet:
- התכונה 'הרצת שאילתות מקוריות' מתייחסת לערך
spark.files.ignoreCorruptFilesכאילו הוא מוגדר לערך ברירת המחדלfalse, גם אם הוא מוגדר לערךtrue. - הפעלת שאילתות מקוריות מתעלמת מ-
spark.sql.parquet.datetimeRebaseModeInReadומחזירה רק את התוכן של קובץ Parquet. לא נלקחים בחשבון ההבדלים בין הגרסה הקודמת של היומן ההיברידי לבין היומן הגרגוריאני הפרוֹלֶפטי. התוצאות ב-Spark יכולות להיות שונות.
- התכונה 'הרצת שאילתות מקוריות' מתייחסת לערך
- NaN: לא נתמך. לדוגמה, יכול להיות שתקבלו תוצאות לא צפויות אם תשתמשו ב-
NaNבהשוואה מספרית. - קריאה עמודתית של Spark: יכולה להתרחש שגיאה קריטית כי וקטור העמודות של Spark לא תואם להרצת שאילתות מקוריות.
- Spill: כשמגדירים מספר גדול של מחיצות ערבוב, התכונה spill-to-disk יכולה להפעיל
OutOfMemoryException. אם זה קורה, אפשר לצמצם את מספר המחיצות כדי לבטל את החריגה הזו.
המאמרים הבאים
- האצת עומסי עבודה של אצוות וסשנים של Spark באמצעות Lightning Engine.
- כדאי לעיין בסוגי המכונות של ARM שנתמכים ב-Managed Service for Apache Spark.