Lightning Engine verwenden
Lightning Engine ist die nächste Generation von Apache Spark. Sie bietet exklusive Verbesserungen, die erhebliche Steigerungen bei Leistung, Kosteneffizienz und operativer Stabilität ermöglichen.
Vorteile
Lightning Engine bietet folgende Vorteile:
Beschleunigte Datenvorgänge: Durch Optimierungen der Cloud Storage-Interaktion, einschließlich Metadatenverwaltung, Schreibarbeitslasten und vektorisierter Ein-/Ausgabe, können Sie erhebliche Leistungssteigerungen und Kosteneinsparungen erzielen.
Intelligente Abfrageausführung: Nutzen Sie erweiterte Optimierungen , die die Menge der gescannten Daten dynamisch reduzieren, die Datenverarbeitung optimieren und effizientere Ausführungspläne für schnellere und kostengünstigere Abfragen generieren.
Optimierte KI- und ML-Arbeitslasten: Reduzieren Sie die Cluster-Startzeiten für GPU-basierte Arbeitslasten und vereinfachen Sie die Bereitstellung in sicheren Umgebungen mit für KI optimierten Images.
Lightning Engine bietet erhebliche Leistungssteigerungen, die genauen Auswirkungen variieren jedoch je nach Arbeitslast. Sie eignet sich am besten für rechenintensive Aufgaben, bei denen Spark Dataframe APIs, Spark Dataset APIs und Spark SQL-Abfragen verwendet werden, und weniger für E/A-gebundene Vorgänge.
Vergleich mit der Standard-Engine
Lightning Engine ist eine Alternative zur Standard-Engine, die zum Ausführen von Spark-Jobs in einem Managed Service for Apache Spark-Cluster verwendet wird. In der folgenden Tabelle werden die Aktivierungseigenschaften, die Anwendbarkeit auf Arbeitslasten und die wichtigsten Vorteile von Lightning Engine im Vergleich zur Standard-Engine aufgeführt.
| Funktion | Standard-Engine | Lightning Engine |
|---|---|---|
| CLI-Flag | --engine=default oder Flag nicht festgelegt |
--engine=lightning |
| Am besten geeignet für | Allgemeine Jobs, Entwicklung und Tests | Arbeitslasten im Unternehmen, die eine erhebliche Beschleunigung erfordern |
| Wichtigste Vorteile | Baseline-Leistung | Optimierte Cloud Storage-Interaktion, intelligente Abfrageausführung |
Voraussetzungen
Für die Lightning Engine-Funktion gelten die folgenden Voraussetzungen:
- Image-Version: Lightning Engine muss mit der
Managed Service for Apache Spark-Image-Version
2.3.3und späteren2.3-Subminor-Image-Versionen verwendet werden. Lightning Engine wird in der Managed Service for Apache Spark-Image-Version3.0nicht unterstützt. - Unterstützte Jobs: Spark, PySpark, SparkSQL und SparkR werden unterstützt. Die Standard-Engine wird für andere Jobtypen ausgeführt, die an einen Lightning Engine-Cluster gesendet werden.
Ausführung nativer Abfragen
Die Ausführung nativer Abfragen (Native Query Execution, NQE) ist eine optionale Komponente von Lightning Engine, die eine noch stärkere Beschleunigung für bestimmte Jobs ermöglicht. Es handelt sich um eine native Engine, die auf Apache Gluten und Velox basiert und für Google-Hardware optimiert ist. Sie steigert die Leistung, indem sie Teile einer Spark-Abfrage außerhalb der JVM ausführt.
- NQE wird empfohlen für:
- Rechenintensive Aufgaben, bei denen Spark Dataframe APIs und Spark Dataset APIs verwendet werden, sowie Spark SQL-Abfragen, die Daten aus Parquet- und ORC-Dateien lesen. Das Ausgabedateiformat hat keine Auswirkungen auf die Leistung.
- NQE wird nicht empfohlen für:
- Jobs, die stark auf Resilient Distributed Datasets (RDDs), nutzerdefinierten Funktionen (User-Defined Functions, UDFs), den meisten Spark Machine Learning-Bibliotheken (ML) und E/A-gebundenen Vorgängen mit Verzögerungen aufgrund des Speicherzugriffs basieren.
Voraussetzungen
Für die Funktion zur Ausführung nativer Abfragen gelten die folgenden Voraussetzungen:
Ausführungs-Engine: NQE ist nur auf Clustern verfügbar, für die Lightning Engine bei der Clustererstellung aktiviert wurde.
Betriebssystem: Es werden nur die Betriebssysteme
Debian-12undUbuntu-22unterstützt. Jobs, für die NQE aktiviert ist und die ein anderes Betriebssystem verwenden, schlagen fehl.Unterstützte Jobs: Spark, PySpark, SparkSQL und SparkR werden unterstützt. Die Standard-Engine wird (ohne NQE) für andere Jobtypen ausgeführt, die an einen Lightning Engine-Cluster gesendet werden.
Maschinentypen: Es werden nur Maschinenfamilien mit Intel- oder AMD-Prozessoren unterstützt. Jobs, für die NQE aktiviert ist und die ARM-Prozessoren verwenden, schlagen fehl (können aber von Lightning Engine ohne NQE profitieren).
Keine GPUs und Beschleuniger: Jobs, für die NQE aktiviert ist und die auf GPU-Beschleunigern gesendet werden, schlagen fehl (können aber von Lightning Engine ohne NQE profitieren).
Datentypen: Eingaben der folgenden Datentypen werden nicht unterstützt:
- Byte: ORC und Parquet
- Struct, Array, Map: Parquet
Preise
Informationen zu den Preisen finden Sie unter Preise für Managed Service for Apache Spark.
Lightning Engine-Cluster erstellen
In diesem Abschnitt erfahren Sie, wie Sie einen Managed Service for Apache Spark-Cluster erstellen, der Lightning Engine für Spark-Jobs aktiviert, die an den Cluster gesendet werden.
Sie können die Ausführung nativer Abfragen (Native Query Execution, NQE) auch beim Erstellen des Clusters aktivieren oder NQE später für bestimmte Spark-Jobs aktivieren, die an den Cluster gesendet werden.
Hinweis
- Melden Sie sich in Ihrem Google Cloud Konto an. Wenn Sie noch kein Konto haben Google Cloud, erstellen Sie ein Konto, um die Leistung unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
-
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.
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.-
Installieren Sie die Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:
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.
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.-
Installieren Sie die Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init
Erforderliche Rollen
Bestimmte IAM-Rollen sind erforderlich, um einen Managed Service for Apache Spark-Cluster zu erstellen und Jobs an den Cluster zu senden. Abhängig von den Organisationsrichtlinien hat ein Cloud-Projektinhaber oder Dienstadministrator diese Rollen möglicherweise bereits Ihnen oder einem Dienstkonto zugewiesen. Informationen zum Prüfen von Rollenzuweisungen finden Sie unter Müssen Rollen zugewiesen werden?.
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen.
Nutzerrollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Erstellen eines Managed Service for Apache Spark-Clusters benötigen:
-
Alle:
- Dataproc-Bearbeiter (
roles/dataproc.editor) für das Projekt - Dienstkontonutzer (
roles/iam.serviceAccountUser) für das Compute Engine-Standarddienstkonto
- Dataproc-Bearbeiter (
Dienstkontorolle
Bitten Sie Ihren Administrator, dem Compute Engine-Standarddienstkonto die IAM-Rolle Dataproc Worker (roles/dataproc.worker) für das Projekt zuzuweisen, damit das Compute Engine-Standarddienstkonto die erforderlichen
Berechtigungen zum Erstellen eines Managed Service for Apache Spark-Clusters hat.
Cluster erstellen
In den folgenden Beispielen wird gezeigt, wie Sie einen Lightning Engine-Cluster mit der Google Cloud Console, der Google Cloud CLI, der Dataproc API, den Cloud-Clientbibliotheken für Python oder Terraform erstellen. Sie können auch einen Cluster mit der Lightning Engine mit den Go, Java, und Node.js Cloud-Clientbibliotheken erstellen.
Console
- Öffnen Sie die Seite **Cluster erstellen**.
- Klicken Sie auf Zusätzliche Konfiguration , um den Bereich zu maximieren.
- Bearbeiten Sie Anpassung und Sonstiges.
- Prüfen Sie im daraufhin geöffneten Steuerfeld, ob das Kästchen Lightning Engine aktivieren ausgewählt ist.
- Optional: Klicken Sie das Kästchen Native Ausführung aktivieren an, um die native Ausführungslaufzeit standardmäßig für Spark-Jobs zu aktivieren.
- Klicken Sie auf Speichern.
- Konfigurieren Sie bei Bedarf weitere Clustereinstellungen.
- Klicken Sie auf Cluster erstellen.
gcloud CLI
Führen Sie den
gcloud dataproc clusters createBefehl mit dem--engine=lightningFlag aus, um einen Cluster mit aktivierter Lightning Engine zu erstellen. Weitere Informationen finden Sie unter Cluster mit der gcloud CLI erstellen.gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --engine=lightning \ --image-version=2.3Optional: Wenn Sie die native Ausführungslaufzeit standardmäßig für Spark-Jobs aktivieren möchten, fügen Sie das Attribut
spark:spark.dataproc.lightningEngine.runtime=nativehinzu.gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --engine=lightning \ --image-version=2.3 \ --properties='spark:spark.dataproc.lightningEngine.runtime=native'
API
Senden Sie eine clusters.create-Anfrage, um einen Cluster mit aktivierter Lightning Engine zu erstellen. Weitere Informationen finden Sie unter Cluster mit
der REST
API erstellen.
Legen Sie im Anfragetext das
engineFeld aufLIGHTNINGfest.{ "projectId": "PROJECT_ID", "clusterName": "CLUSTER_NAME", "config": { "engine": "LIGHTNING", "gceClusterConfig": {}, "softwareConfig": { "imageVersion": "2.3" } } }Optional: Wenn Sie die native Ausführungslaufzeit standardmäßig für alle Jobs aktivieren möchten, fügen Sie das Attribut
spark:spark.dataproc.lightningEngine.runtimehinzu.{ "projectId": "PROJECT_ID", "clusterName": "CLUSTER_NAME", "config": { "engine": "LIGHTNING", "gceClusterConfig": {}, "softwareConfig": { "imageVersion": "2.3", "properties": { "spark:spark.dataproc.lightningEngine.runtime": "native" } } } }
Python
Verwenden Sie die Methode
create_clusterund legen Sie das Feldenginein der Clusterkonfiguration aufLIGHTNINGfest, um einen Cluster mit aktivierter Lightning Engine zu erstellen. Weitere Informationen finden Sie unter Cluster mit Python erstellen.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}")Optional: Wenn Sie die native Ausführungslaufzeit standardmäßig für Spark-Jobs aktivieren möchten, fügen Sie das Attribut
spark:spark.dataproc.lightningEngine.runtimehinzu.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
- Legen Sie in der Konfiguration Ihrer
google_dataproc_cluster-Ressource das ArgumentengineaufLIGHTNINGfest. - Weitere Informationen und erweiterte Optionen finden Sie in der offiziellen Terraform
Dokumentation zur
google_dataproc_clusterRessource.
Cluster-Engine prüfen
Console
- Rufen Sie in der Google Cloud Console die Seite Clusterdetails auf.
- Prüfen Sie, ob im Feld Engine der Wert
Lightning Engineaufgeführt ist. - Wenn Sie die Ausführung nativer Abfragen aktiviert haben, prüfen Sie, ob im Feld Native Ausführung
nativeaufgeführt ist.
gcloud
Führen Sie den Befehl
gcloud dataproc clusters describeaus, um die Engine und NQE (falls aktiviert) zu prüfen:gcloud dataproc clusters describe CLUSTER_NAME --project=PROJECT_ID --region=REGIONPrüfen Sie die Ausgabe auf die Attribute
engineundlightningEngine.runtime:clusterName: lightning-engine-cluster engine: lightningEngine lightningEngine.runtime: native
Job mit Lightning Engine senden
Wenn Sie Lightning Engine beim Erstellen eines Clusters aktiviert haben, ist Lightning Engine standardmäßig für Spark-Jobs aktiviert, die Sie an den Cluster senden.
Ausführung nativer Abfragen für einen Job aktivieren
Wenn Sie die Ausführung nativer Abfragen (Native Query Execution, NQE) beim Erstellen eines Lightning Engine Clusters aktiviert haben, werden alle Spark-Jobs mit aktivierter NQE ausgeführt, es sei denn, Sie deaktivieren NQE für einen bestimmten Job.
Wenn Sie NQE beim Erstellen des Lightning Engine-Clusters nicht aktiviert haben, können Sie NQE für einen Job aktivieren, wenn Sie den Job senden, wie in den folgenden Beispielen gezeigt.
gcloud
Wenn Sie die Ausführung nativer Abfragen aktivieren möchten, wenn Sie einen Spark
Job senden,
fügen Sie das spark.dataproc.lightningEngine.runtime=native Attribut hinzu:
gcloud dataproc jobs submit spark \
--cluster=CLUSTER_NAME \
--region=REGION \
--properties=spark.dataproc.lightningEngine.runtime=native \
-- ...
API
{
"job":{
"placement":{
"clusterName": ...
},
"sparkJob":{
"mainClass": ...,
"properties":{
"spark.dataproc.lightningEngine.runtime":"native"
}
}
}
}
Ausführung nativer Abfragen für einen Job deaktivieren
Wenn Sie die Ausführung nativer Abfragen (Native Query Execution, NQE) beim Erstellen eines Lightning Engine Clusters aktiviert haben, werden alle Spark-Jobs mit aktivierter NQE ausgeführt, es sei denn, Sie deaktivieren NQE für einen bestimmten Job.
Sie können NQE für einen bestimmten Spark-Job deaktivieren, wenn Sie den Job senden, wie in den folgenden Beispielen gezeigt.
gcloud
gcloud dataproc jobs submit spark \
--cluster=CLUSTER_NAME \
--region=REGION \
--properties=spark.dataproc.lightningEngine.runtime=default \
-- ...
API
{
"job":{
"placement":{
"clusterName": ...
},
"sparkJob":{
"mainClass": ...,
"properties":{
"spark.dataproc.lightningEngine.runtime":"default"
}
}
}
}
Ausführung nativer Abfragen für einen Job prüfen
Nachdem Sie einen Job an einen Lightning Engine-Cluster gesendet haben, können Sie prüfen, ob die Ausführung nativer Abfragen für den Job aktiviert ist.
Console
- Rufen Sie in der Google Cloud Console die Jobs Seite auf.
- Klicken Sie auf die Job-ID, um die Seite Jobdetails zu öffnen.
- Prüfen Sie, ob im Feld Native Ausführung
nativeaufgeführt ist.
gcloud
Führen Sie den Befehl
gcloud dataproc jobs describeaus:gcloud dataproc jobs describe JOB_ID --project=PROJECT_ID --region=REGIONPrüfen Sie in der Ausgabe im Abschnitt Properties (Attribute) auf
lightningEngine.runtime:lightningEngine.runtime: native
Konfigurationsparameter
In der folgenden Tabelle sind die wichtigsten Konfigurationsparameter für Lightning Engine und die Ausführung nativer Abfragen zusammengefasst.
| Parametername | Beschreibung | Anwendbare Engine(s) | Standardwert | Standardwert (Lightning Engine) | Überschreibbar durch Nutzer (Jobebene) | Umfang |
|---|---|---|---|---|---|---|
--engine |
Einstellung auf Clusterebene, um die Engine bei der Clustererstellung auszuwählen. | Clusterweit | default |
lightning |
Nein | Cluster |
spark:spark.dataproc.lightningEngine.runtime |
Einstellung auf Clusterebene, um die Lightning Engine-Laufzeit bei der Clustererstellung auszuwählen. | Nur Lightning | default |
default |
Nein | Cluster |
spark.dataproc.lightningEngine.runtime |
Aktiviert oder deaktiviert die Ausführung nativer Abfragen (Native Query Execution, NQE) in der Lightning Engine. | Nur Lightning | default |
default |
Ja. Kann auf native oder default festgelegt werden. |
Job |
Beschränkungen
Wenn Sie die Ausführung nativer Abfragen in den folgenden Szenarien aktivieren, kann dies zu Ausnahmen, Spark-Inkompatibilitäten oder einem Fallback der Arbeitslast zur Standard-Spark-Engine führen.
Fallbacks
Die Ausführung nativer Abfragen in den folgenden Szenarien kann zu einem Fallback der Arbeitslast zur Spark-Ausführungs-Engine führen:
- ANSI: Wenn der ANSI-Modus aktiviert ist, wird die Ausführung auf Spark zurückgesetzt.
- Modus mit Beachtung der Groß-/Kleinschreibung: Die Ausführung nativer Abfragen unterstützt nur den standardmäßigen Modus von Spark , bei dem die Groß-/Kleinschreibung nicht beachtet wird. Wenn der Modus mit Beachtung der Groß-/Kleinschreibung aktiviert ist, können falsche Ergebnisse auftreten.
- Scan partitionierter Tabellen: Die Ausführung nativer Abfragen unterstützt den partitionierten Tabellenscan nur, wenn der Pfad die Partitionierungsinformationen enthält. Andernfalls wird die Arbeitslast auf die Spark-Ausführungs-Engine zurückgesetzt.
Inkompatibles Verhalten
Inkompatibles Verhalten oder falsche Ergebnisse können auftreten, wenn Sie die Ausführung nativer Abfragen in den folgenden Fällen verwenden:
- JSON-Funktionen: Die Ausführung nativer Abfragen unterstützt Strings, die von
doppelten Anführungszeichen umgeben sind, nicht von einfachen Anführungszeichen. Bei einfachen Anführungszeichen treten falsche Ergebnisse auf. Wenn Sie
*im Pfad mit der Funktionget_json_objectverwenden, wirdNULLzurückgegeben. - Parquet-Lesekonfiguration:
- Die Ausführung nativer Abfragen behandelt
spark.files.ignoreCorruptFilesso, als wäre der Standardwertfalsefestgelegt, auch wenntruefestgelegt ist. - Die Ausführung nativer Abfragen ignoriert
spark.sql.parquet.datetimeRebaseModeInReadund gibt nur den Inhalt der Parquet-Datei zurück. Unterschiede zwischen dem Legacy-Hybridkalender und dem proleptischen gregorianischen Kalender werden nicht berücksichtigt. Die Spark-Ergebnisse können abweichen.
- Die Ausführung nativer Abfragen behandelt
- NaN: wird nicht unterstützt. Es können unerwartete Ergebnisse auftreten, z. B. wenn Sie
NaNin einem numerischen Vergleich verwenden. - Spaltenweises Lesen in Spark: Es kann ein schwerwiegender Fehler auftreten, da der spaltenweise Vektor von Spark nicht mit der Ausführung nativer Abfragen kompatibel ist.
- Spill: Wenn Sie Shuffle-Partitionen auf eine große Zahl festlegen, kann die Funktion
Spill to Disk eine
OutOfMemoryExceptionauslösen. In diesem Fall kann die Anzahl der Partitionen reduziert werden, um diese Ausnahme zu vermeiden.
Nächste Schritte
- Spark-Batcharbeitslasten und -Sitzungen mit Lightning Engine beschleunigen.