Google Cloud Serverless for Apache Spark mit Lightning Engine beschleunigen

In diesem Dokument wird beschrieben, wie Sie die Lightning Engine aktivieren, um Serverless for Apache Spark-Batcharbeitslasten und interaktive Sitzungen zu beschleunigen.

Übersicht

Die Lightning Engine ist ein leistungsstarker Abfragebeschleuniger, der auf einer mehrschichtigen Optimierungs-Engine basiert. Diese führt übliche Optimierungstechniken wie Abfrage- und Ausführungsoptimierungen sowie kuratierte Optimierungen in der Dateisystemebene und in Datenzugriffs-Connectors aus.

Wie in der folgenden Abbildung dargestellt, beschleunigt Lightning Engine die Ausführung von Spark-Abfragen bei einer TPC-H-ähnlichen Arbeitslast (10 TB-Dataset-Größe).

Weitere Informationen finden Sie unter Introducing Lightning Engine – the next generation of Apache Spark performance.

Verfügbarkeit der Lightning Engine

  • Lightning Engine ist für die Verwendung mit unterstützten Serverless for Apache Spark-Laufzeiten verfügbar, die allgemein verfügbar sind (derzeit die Laufzeiten 1.2, 2.2 und 2.3; nicht verfügbar in der Spark-Laufzeit 3.0).
  • Lightning Engine ist nur mit der Premium-Preisstufe von Serverless for Apache Spark verfügbar.
    • Batcharbeitslasten:Lightning Engine ist für Batcharbeitslasten auf der Premium-Stufe automatisch aktiviert. Sie müssen nichts weiter tun.
    • Interaktive Sitzungen:Die Lightning-Engine ist für interaktive Sitzungen nicht standardmäßig aktiviert. Informationen zum Aktivieren finden Sie unter Lightning Engine aktivieren.
    • Sitzungsvorlagen:Lightning Engine ist für Sitzungsvorlagen nicht standardmäßig aktiviert. Informationen zum Aktivieren finden Sie unter Lightning Engine aktivieren.

Lightning Engine aktivieren

In den folgenden Abschnitten wird beschrieben, wie Sie die Lightning Engine für eine Serverless for Apache Spark-Batcharbeitslast, eine Sitzungsvorlage und eine interaktive Sitzung aktivieren.

Batcharbeitslast

Lightning Engine für eine Batcharbeitslast aktivieren

Sie können die Google Cloud Console, die Google Cloud CLI oder die Dataproc API verwenden, um Lightning Engine für einen Batch-Arbeitslast zu aktivieren.

Console

Verwenden Sie die Google Cloud Console, um Lightning Engine für eine Batcharbeitslast zu aktivieren.

  1. In der Google Cloud Console:

    1. Zu Dataproc-Batches
    2. Klicken Sie auf Erstellen, um die Seite Batch erstellen zu öffnen.
  2. Wählen Sie die folgenden Felder aus und füllen Sie sie aus:

    • Container:
    • Stufenkonfiguration:

      • Wählen Sie Premium aus. Dadurch wird „LIGHTNING ENGINE aktivieren, um die Spark-Leistung zu beschleunigen“ automatisch aktiviert und geprüft.

      Wenn Sie die Premium-Stufe auswählen, werden die Driver Compute Tier (Computing-Stufe für Treiber) und die Executor Compute Tier (Computing-Stufe für Executor) auf Premium festgelegt. Diese automatisch festgelegten Compute-Einstellungen für die Premium-Stufe können für Batches mit Runtimes vor 3.0 nicht überschrieben werden.

      Sie können die Driver Disk Tier (Treiber-Festplattenstufe) und die Executor Disk Tier (Executor-Festplattenstufe) auf Premium konfigurieren oder den Standardwert Standard beibehalten. Wenn Sie eine Premium-Laufwerkstufe auswählen, müssen Sie die Laufwerksgröße angeben. Weitere Informationen finden Sie unter Eigenschaften für die Ressourcenverteilung.

    • Properties (Attribute): Optional: Geben Sie das folgende Key (Attributname) und Value-Paar ein, wenn Sie die Laufzeit Native Query Execution (Ausführung nativer Abfragen) auswählen möchten:

      Schlüssel Wert
      spark.dataproc.lightningEngine.runtime Einheimischer / Einheimische / Ureinwohner / Ureinwohnerin / gebürtig / einheimisch

  3. Geben Sie andere Einstellungen für Batch-Arbeitslasten ein, wählen Sie sie aus oder bestätigen Sie sie. Weitere Informationen finden Sie unter Spark-Batcharbeitslast senden.

  4. Klicken Sie auf Senden, um die Spark-Batcharbeitslast auszuführen.

gcloud

Legen Sie die folgenden gcloud CLI-Befehlsflags gcloud dataproc batches submit spark fest, um eine Lightning-Engine für einen Batch-Arbeitslast zu aktivieren.

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

Hinweise:

  • PROJECT_ID: Ihre Google Cloud Projekt-ID Projekt-IDs werden im Bereich Projektinformationen im Dashboard der Google Cloud Console aufgeführt.
  • REGION: Eine verfügbare Compute Engine-Region zum Ausführen der Arbeitslast.
  • --properties=dataproc.tier=premium. Wenn Sie die Premium-Stufe festlegen, werden für die Batcharbeitslast automatisch die folgenden Attribute festgelegt:

    • spark.dataproc.engine=lightningEngine wählt Lightning Engine für die Batch-Arbeitslast aus.
    • spark.dataproc.driver.compute.tier und spark.dataproc.executor.compute.tier sind auf premium gesetzt (siehe Attribute für die Ressourcenzuweisung). Diese automatisch festgelegten Einstellungen für die Berechnung auf Premium-Ebene können für Batches mit Runtimes vor 3.0 nicht überschrieben werden.
  • Weitere Eigenschaften

    • Native Query Engine: spark.dataproc.lightningEngine.runtime=native Fügen Sie diese Eigenschaft hinzu, wenn Sie die Laufzeit Native Query Execution auswählen möchten.

    • Laufwerkstufen und ‑größen: Standardmäßig sind die Laufwerkgrößen für Treiber und Executors auf standard-Stufen und ‑Größen festgelegt. Sie können Eigenschaften hinzufügen, um premium-Laufwerkstufen und ‑Größen (in Vielfachen von 375 GiB) auszuwählen.
      Weitere Informationen finden Sie unter Eigenschaften für die Ressourcenzuweisung.

  • OTHER_FLAGS_AS_NEEDED: Weitere Informationen finden Sie unter Spark-Batcharbeitslast senden.

API

Wenn Sie Lightning Engine für eine Batcharbeitslast aktivieren möchten, fügen Sie RuntimeConfig.properties hinzu. Wenn Sie die Premium-Stufe festlegen, werden für die Batcharbeitslast automatisch die folgenden Attribute festgelegt:

  • spark.dataproc.engine=lightningEngine wählt Lightning Engine für die Batch-Arbeitslast aus.
  • spark.dataproc.driver.compute.tier und spark.dataproc.executor.compute.tier sind auf premium gesetzt (siehe Attribute für die Ressourcenzuweisung). Diese automatisch festgelegten Einstellungen für die Berechnung auf Premium-Ebene können für Batches mit Runtimes vor 3.0 nicht überschrieben werden.

Sonstiges RuntimeConfig.properties:

  • Native Query Engine: spark.dataproc.lightningEngine.runtime:native. Fügen Sie dieses Attribut hinzu, wenn Sie die Laufzeit Native Query Execution auswählen möchten.

  • Laufwerkstufen und ‑größen: Standardmäßig sind die Laufwerkgrößen für Treiber und Executors auf standard-Stufen und ‑Größen festgelegt. Sie können Eigenschaften hinzufügen, um premium-Stufen und ‑Größen (in Vielfachen von 375 GiB) auszuwählen.
    Weitere Informationen finden Sie unter Eigenschaften für die Ressourcenverteilung.

Informationen zum Festlegen anderer API-Felder für Batcharbeitslasten finden Sie unter Spark-Batcharbeitslast senden.

Sitzungsvorlage

Lightning Engine für eine Sitzungsvorlage aktivieren

Sie können die Google Cloud Console, die Google Cloud CLI oder die Dataproc API verwenden, um Lightning Engine für eine Sitzungsvorlage für eine Jupyter- oder Spark Connect-Sitzung zu aktivieren.

Console

Verwenden Sie die Google Cloud Console, um Lightning Engine für eine Batcharbeitslast zu aktivieren.

  1. In der Google Cloud Console:

    1. Zu Dataproc-Sitzungsvorlagen
    2. Klicken Sie auf Erstellen, um die Seite Sitzungsvorlage erstellen zu öffnen.
  2. Wählen Sie die folgenden Felder aus und füllen Sie sie aus:

    • Informationen zur Sitzungsvorlage:
      • Wählen Sie „Lightning Engine aktivieren, um die Spark-Leistung zu beschleunigen“ aus.
    • Ausführungskonfiguration:
    • Attribute:Geben Sie die folgenden Key- und Value-Paare (Attributname und Attributwert) ein, um den Premium-Tarif auszuwählen:

      Schlüssel Wert
      dataproc.tier Premium
      spark.dataproc.engine lightningEngine

      Optional: Geben Sie das folgende Key-Value-Paar (Eigenschaftsname) ein, um die Laufzeit Native Query Execution auszuwählen:

      Schlüssel Wert
      spark.dataproc.lightningEngine.runtime native

  3. Füllen Sie andere Einstellungen für die Sitzungsvorlage aus, wählen Sie sie aus oder bestätigen Sie sie. Weitere Informationen finden Sie unter Sitzungsvorlage erstellen.

  4. Klicken Sie auf Senden, um die Sitzungsvorlage zu erstellen.

gcloud

Sie können keine Vorlage für Serverless for Apache Spark-Sitzungen direkt mit der gcloud CLI erstellen. Stattdessen können Sie mit dem Befehl gcloud beta dataproc session-templates import eine vorhandene Sitzungsvorlage importieren, die importierte Vorlage bearbeiten, um die Lightning Engine und optional die Native Query-Laufzeit zu aktivieren, und die bearbeitete Vorlage dann mit dem Befehl gcloud beta dataproc session-templates export exportieren.

API

Wenn Sie Lightning Engine für eine Sitzungsvorlage aktivieren möchten, fügen Sie RuntimeConfig.properties als Teil Ihrer sessionTemplates.create-Anfrage die Attribute „dataproc.tier“: „premium“ und „spark.dataproc.engine“: „lightningEngine“ hinzu.

Sonstiges RuntimeConfig.properties:

  • Native Query Engine: spark.dataproc.lightningEngine.runtime:native: Fügen Sie diese Property zu RuntimeConfig.properties hinzu, um die Laufzeit Native Query Execution auszuwählen.

Informationen zum Festlegen anderer API-Felder für Sitzungsvorlagen finden Sie unter Sitzungsvorlage erstellen.

Interaktive Sitzung

Lightning Engine in einer interaktiven Sitzung aktivieren

Sie können die Google Cloud CLI oder die Dataproc API verwenden, um Lightning Engine für eine serverlose interaktive Apache Spark-Sitzung zu aktivieren. Sie können Lightning Engine auch in einer interaktiven Sitzung in einem BigQuery Studio-Notebook aktivieren.

gcloud

Legen Sie die folgenden gcloud CLI-Befehlsflags gcloud beta dataproc sessions create spark fest, um Lightning Engine in einer interaktiven Sitzung zu aktivieren.

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

Hinweise:

  • PROJECT_ID: Ihre Google Cloud Projekt-ID Projekt-IDs werden im Bereich Projektinformationen im Dashboard der Google Cloud Console aufgeführt.
  • REGION: Eine verfügbare Compute Engine-Region zum Ausführen der Arbeitslast.
  • --properties=dataproc.tier=premium,spark.dataproc.engine=lightningEngine. Mit diesen Eigenschaften wird Lightning Engine für die Sitzung aktiviert.

  • Weitere Eigenschaften:

    • Native Query Engine: spark.dataproc.lightningEngine.runtime=native: Fügen Sie diese Eigenschaft hinzu, um die Laufzeit Native Query Execution auszuwählen.
  • OTHER_FLAGS_AS_NEEDED: Weitere Informationen finden Sie unter Interaktive Sitzung erstellen.

API

Wenn Sie Lightning Engine für eine Sitzung aktivieren möchten, fügen Sie „dataproc.tier“:“premium“ und „spark.dataproc.engine“:“lightningEngine“ als Teil Ihrer sessions.create-Anfrage zu RuntimeConfig.properties hinzu.

Sonstiges RuntimeConfig.properties:

* Native Query Engine: spark.dataproc.lightningEngine.runtime:native: Fügen Sie diese Property zu RuntimeConfig.properties hinzu, wenn Sie die Laufzeit Native Query Execution auswählen möchten.

Informationen zum Festlegen anderer API-Felder für Sitzungsvorlagen finden Sie unter Interaktive Sitzung erstellen.

BigQuery-Notebook

Sie können Lightning Engine aktivieren, wenn Sie eine Sitzung in einem BigQuery Studio-PySpark-Notebook erstellen.

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

# Enable Lightning Engine.
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-Einstellungen prüfen

Sie können die Google Cloud -Konsole, die Google Cloud CLI oder die Dataproc API verwenden, um die Lightning Engine-Einstellungen für einen Batcharbeitslast, eine Sitzungsvorlage oder eine interaktive Sitzung zu prüfen.

Batcharbeitslast

  • So prüfen Sie, ob die Stufe des Batches auf premium und die Engine auf Lightning Engine festgelegt ist:

    • Google Cloud Console: Auf der Seite Batches finden Sie die Spalten Tier und Engine für den Batch. Sie können auch auf die Batch-ID klicken, um diese Einstellungen auf der Seite mit den Batchdetails aufzurufen.
    • gcloud CLI: Führen Sie den Befehl gcloud dataproc batches describe aus.
    • API: Senden Sie eine batches.get-Anfrage.

Sitzungsvorlage

  • So prüfen Sie, ob engine für eine Sitzungsvorlage auf Lightning Engine festgelegt ist:

    • Google Cloud -Konsole: Auf der Seite Sitzungsvorlagen finden Sie in der Spalte Engine die Engine für Ihre Vorlage. Sie können auch auf den Namen der Sitzungsvorlage klicken, um diese Einstellung auf der Detailseite der Sitzungsvorlage aufzurufen.
    • gcloud CLI: Führen Sie den Befehl gcloud beta dataproc session-templates describe aus.
    • API: Senden Sie eine sessionTemplates.get-Anfrage.

Interaktive Sitzung

  • Die Engine ist für eine interaktive Sitzung auf Lightning Engine festgelegt:

    • Google Cloud -Konsole: Auf der Seite Interaktive Sitzungen finden Sie die Vorlage in der Spalte Engine. Sie können auch auf die ID der interaktiven Sitzung klicken, um diese Einstellung auf der Detailseite der Sitzungsvorlage aufzurufen.
    • gcloud CLI: Führen Sie den Befehl gcloud beta dataproc sessions describe aus.
    • API: Senden Sie eine sessions.get-Anfrage.

Ausführung nativer Abfragen

Die native Ausführung von Abfragen (Native Query Execution, NQE) ist ein optionales Lightning Engine-Feature, das die Leistung durch eine native Implementierung auf Basis von Apache Gluten und Velox verbessert. Es wurde für Google-Hardware entwickelt.

Die Native Query Execution-Laufzeit umfasst einheitliches Arbeitsspeicher-Management für das dynamische Umschalten zwischen Off-Heap- und On-Heap-Arbeitsspeicher, ohne dass Änderungen an vorhandenen Spark-Konfigurationen erforderlich sind. NQE bietet erweiterte Unterstützung für Operatoren, Funktionen und Spark-Datentypen sowie die Möglichkeit, automatisch Möglichkeiten zur Verwendung der nativen Engine für optimale Pushdown-Vorgänge zu erkennen.

Arbeitslasten für die Ausführung nativer Abfragen ermitteln

Verwenden Sie die Ausführung nativer Abfragen in den folgenden Szenarien:

  • Spark-DataFrame-APIs, Spark-Dataset-APIs und Spark-SQL-Abfragen, mit denen Daten aus Parquet- und ORC-Dateien gelesen werden. Das Ausgabedateiformat hat keine Auswirkungen auf die Leistung der Ausführung nativer Abfragen.

  • Arbeitslasten, die vom Qualifizierungstool für die Ausführung nativer Abfragen empfohlen werden.

Die Ausführung nativer Abfragen wird für Arbeitslasten mit Eingaben der folgenden Datentypen nicht empfohlen:

  • Byte: ORC und Parquet
  • Zeitstempel: ORC
  • Struct, Array, Map: Parquet

Einschränkungen bei der Ausführung nativer Abfragen

Wenn Sie die Ausführung nativer Abfragen in den folgenden Szenarien aktivieren, kann dies zu Ausnahmen, Spark-Inkompatibilitäten oder einem Fallback der Arbeitslast auf die standardmäßige Spark-Engine führen.

Fallbacks

Die Ausführung nativer Abfragen kann dazu führen, dass die Arbeitslast auf die Spark-Ausführungs-Engine zurückfällt, was zu Regressionen oder Fehlern führt.

  • ANSI:Wenn der ANSI-Modus aktiviert ist, wird die Ausführung auf Spark zurückgesetzt.

  • Modus mit Berücksichtigung der Groß-/Kleinschreibung:Die Ausführung nativer Abfragen unterstützt nur den standardmäßigen Spark-Modus ohne Berücksichtigung der Groß-/Kleinschreibung. Wenn der Modus „Groß-/Kleinschreibung beachten“ aktiviert ist, können falsche Ergebnisse auftreten.

  • Scan partitionierter Tabellen:Die native Abfrageausführung unterstützt den Scan partitionierter Tabellen nur, wenn der Pfad die Partitionsinformationen enthält. Andernfalls wird die Arbeitslast auf die Spark-Ausführungs-Engine zurückgesetzt.

Inkompatibles Verhalten

In den folgenden Fällen kann es bei der Ausführung nativer Abfragen zu inkompatiblem Verhalten oder falschen Ergebnissen kommen:

  • JSON-Funktionen:Bei der Ausführung nativer Abfragen werden Strings unterstützt, die von doppelten Anführungszeichen umschlossen sind, nicht von einfachen Anführungszeichen. Bei einfachen Anführungszeichen werden falsche Ergebnisse zurückgegeben. Wenn Sie „*“ im Pfad mit der Funktion get_json_object verwenden, wird NULL zurückgegeben.

  • Parquet-Lesekonfiguration:

    • Bei der Ausführung nativer Abfragen wird spark.files.ignoreCorruptFiles als auf den Standardwert false festgelegt behandelt, auch wenn der Wert true ist.
    • Bei der Ausführung nativer Abfragen wird spark.sql.parquet.datetimeRebaseModeInRead ignoriert und es werden nur die Inhalte der Parquet-Datei zurückgegeben. Unterschiede zwischen dem alten Hybridkalender (julianisch-gregorianisch) und dem proleptischen gregorianischen Kalender werden nicht berücksichtigt. Die Ergebnisse von Spark können abweichen.
  • NaN:Nicht unterstützt. Unerwartete Ergebnisse können beispielsweise auftreten, wenn Sie NaN in einem numerischen Vergleich verwenden.

  • Spaltenweises Lesen in Spark:Ein schwerwiegender Fehler kann auftreten, da der spaltenweise Spark-Vektor nicht mit der nativen Abfrageausführung kompatibel ist.

  • Spill:Wenn die Anzahl der Shuffle-Partitionen auf einen hohen Wert festgelegt ist, kann die Funktion „Spill-to-Disk“ einen OutOfMemoryException auslösen. Wenn dies der Fall ist, kann diese Ausnahme durch Reduzieren der Anzahl der Partitionen behoben werden.