Accelerare Google Cloud Serverless per Apache Spark con Lightning Engine

Questo documento mostra come attivare Lightning Engine per accelerare i workload batch e le sessioni interattive di Serverless per Apache Spark.

Panoramica

Lightning Engine è un acceleratore di query ad alte prestazioni basato su un motore di ottimizzazione multilivello che esegue tecniche di ottimizzazione consuete, come le ottimizzazioni di query ed esecuzione, nonché ottimizzazioni curate nel livello del file system e nei connettori di accesso ai dati.

Come mostrato nella figura seguente, Lightning Engine accelera le prestazioni di esecuzione delle query Spark su un carico di lavoro simile a TPC-H (dimensioni del set di dati 10 TB).

Per saperne di più, consulta Ti presentiamo Lightning Engine, la nuova generazione di prestazioni di Apache Spark.

Disponibilità di Lightning Engine

  • Lightning Engine è disponibile per l'utilizzo con runtime Serverless per Apache Spark supportati disponibili a livello generale (attualmente i runtime 1.2, 2.2 e 2.3; non disponibile nel runtime Spark 3.0).
  • Lightning Engine è disponibile solo con il livello di prezzo Premium di Serverless per Apache Spark.
    • Carichi di lavoro batch: Lightning Engine viene attivato automaticamente per i carichi di lavoro batch nel livello Premium. Non è richiesta alcuna azione da parte tua.
    • Sessioni interattive: Lightning Engine non è abilitato per impostazione predefinita per le sessioni interattive. Per abilitarlo, consulta Attivare Lightning Engine.
    • Modelli di sessione: Lightning Engine non è abilitato per impostazione predefinita per i modelli di sessione. Per abilitarlo, consulta Attivare Lightning Engine.

Abilita Lightning Engine

Le sezioni seguenti mostrano come attivare Lightning Engine in un workload batch Serverless per Apache Spark, in un modello di sessione e in una sessione interattiva.

Workload batch

Abilitare Lightning Engine su un workload batch

Puoi utilizzare la console Google Cloud , Google Cloud CLI o l'API Dataproc per attivare Lightning Engine in un carico di lavoro batch.

Console

Utilizza la console Google Cloud per attivare Lightning Engine su un workload batch.

  1. Nella console Google Cloud :

    1. Vai a Batch Dataproc.
    2. Fai clic su Crea per aprire la pagina Crea batch.
  2. Seleziona e compila i seguenti campi:

    • Container:
    • Configurazione del livello:

      • Seleziona Premium. Questa opzione attiva e seleziona automaticamente "Abilita LIGHTNING ENGINE per accelerare le prestazioni di Spark".

      Quando selezioni il livello premium, Livello di computing driver e Livello di computing esecutore sono impostati su Premium. Queste impostazioni di calcolo del livello premium impostate automaticamente non possono essere ignorate per i batch che utilizzano runtime precedenti a 3.0.

      Puoi configurare il livello del disco del driver e il livello del disco dell'esecutore su Premium o lasciare invariato il valore Standard predefinito del livello. Se scegli un livello di disco premium, devi selezionare la dimensione del disco. Per saperne di più, consulta le proprietà di allocazione delle risorse.

    • Proprietà: (facoltativo) inserisci la seguente coppia Key (nome della proprietà) e Value se vuoi selezionare il runtime Esecuzione query nativa:

      Chiave Valore
      spark.dataproc.lightningEngine.runtime indigeno/nativo/locale

  3. Compila, seleziona o conferma le altre impostazioni dei carichi di lavoro batch. Vedi Inviare un carico di lavoro batch Spark.

  4. Fai clic su Invia per eseguire il carico di lavoro batch Spark.

gcloud

Imposta i seguenti flag di comando gcloud dataproc batches submit spark gcloud CLI per attivare un Lightning Engine in un carico di lavoro batch.

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

Note:

  • PROJECT_ID: il tuo ID progetto Google Cloud . Gli ID progetto sono elencati nella sezione Informazioni sul progetto della Google Cloud console Dashboard.
  • REGION: una regione di Compute Engine disponibile per l'esecuzione del carico di lavoro.
  • --properties=dataproc.tier=premium. L'impostazione del livello premium imposta automaticamente le seguenti proprietà sul carico di lavoro batch:

    • spark.dataproc.engine=lightningEngine seleziona Lightning Engine per il workload batch.
    • spark.dataproc.driver.compute.tier e spark.dataproc.executor.compute.tier sono impostati su premium (vedi proprietà di allocazione delle risorse). Queste impostazioni di calcolo del livello premium impostate automaticamente non possono essere sostituite per i batch che utilizzano runtime precedenti a 3.0.
  • Altre proprietà

    • Native Query Engine: spark.dataproc.lightningEngine.runtime=native Aggiungi questa proprietà se vuoi selezionare il runtime Native Query Execution.

    • Livelli e dimensioni del disco: per impostazione predefinita, le dimensioni del disco del driver e dell'executor sono impostate sui livelli e sulle dimensioni standard. Puoi aggiungere proprietà per selezionare i livelli e le dimensioni del disco premium (in multipli di 375 GiB).
      Per ulteriori informazioni, consulta Proprietà di allocazione delle risorse.

  • OTHER_FLAGS_AS_NEEDED: vedi Invia un workload batch Spark.

API

Per abilitare Lightning Engine in un workload batch, aggiungi "dataproc.tier":"premium" a RuntimeConfig.properties nell'ambito della richiesta batches.create. L'impostazione del livello premium imposta automaticamente le seguenti proprietà nel carico di lavoro batch:

  • spark.dataproc.engine=lightningEngine seleziona Lightning Engine per il workload batch.
  • spark.dataproc.driver.compute.tier e spark.dataproc.executor.compute.tier sono impostati su premium (vedi proprietà di allocazione delle risorse). Queste impostazioni di calcolo del livello premium impostate automaticamente non possono essere sostituite per i batch che utilizzano runtime precedenti a 3.0.

Altro RuntimeConfig.properties:

  • Native Query Engine: spark.dataproc.lightningEngine.runtime:native. Aggiungi questa proprietà se vuoi selezionare il runtime Native Query Execution.

  • Livelli e dimensioni del disco: per impostazione predefinita, le dimensioni del disco del driver e dell'executor sono impostate sui livelli e sulle dimensioni standard. Puoi aggiungere proprietà per selezionare i livelli e le dimensioni di premium (in multipli di 375 GiB).
    Per ulteriori informazioni, consulta Proprietà di allocazione delle risorse.

Consulta Invia un carico di lavoro batch Spark per impostare altri campi dell'API batch workload.

Modello di sessione

Attivare Lightning Engine in un modello di sessione

Puoi utilizzare la console Google Cloud , Google Cloud CLI o l'API Dataproc per abilitare Lightning Engine in un modello di sessione per una sessione Jupyter o Spark Connect.

Console

Utilizza la console Google Cloud per attivare Lightning Engine su un workload batch.

  1. Nella console Google Cloud :

    1. Vai a Modelli di sessione Dataproc.
    2. Fai clic su Crea per aprire la pagina Crea modello sessione.
  2. Seleziona e compila i seguenti campi:

    • Informazioni sui modelli di sessione:
      • Seleziona "Abilita Lightning Engine per accelerare le prestazioni di Spark".
    • Configurazione esecuzione:
    • Proprietà:inserisci le seguenti coppie Key (nome proprietà) e Value per selezionare il livello Premium:

      Chiave Valore
      dataproc.tier premium
      spark.dataproc.engine lightningEngine

      (Facoltativo) Inserisci la seguente coppia Key (nome proprietà) e Value per selezionare il runtime Esecuzione query nativa:

      Chiave Valore
      spark.dataproc.lightningEngine.runtime native

  3. Compila, seleziona o conferma le altre impostazioni del modello di sessione. Vedi Crea un modello di sessione.

  4. Fai clic su Invia per creare il modello di sessione.

gcloud

Non puoi creare direttamente un modello di sessione Serverless per Apache Spark utilizzando gcloud CLI. In alternativa, puoi utilizzare il comando gcloud beta dataproc session-templates import per importare un template di sessione esistente, modificare il template importato per attivare Lightning Engine e, facoltativamente, il runtime delle query native, quindi esportare il template modificato utilizzando il comando gcloud beta dataproc session-templates export.

API

Per attivare Lightning Engine in un modello di sessione, aggiungi "dataproc.tier":"premium" e "spark.dataproc.engine":"lightningEngine" a RuntimeConfig.properties nell'ambito della richiesta sessionTemplates.create.

Altro RuntimeConfig.properties:

  • Native Query Engine: spark.dataproc.lightningEngine.runtime:native: aggiungi questa proprietà a RuntimeConfig.properties per selezionare il runtime Native Query Execution.

Consulta Crea un template di sessione per impostare altri campi API del template di sessione.

Sessione interattiva

Attivare Lightning Engine in una sessione interattiva

Puoi utilizzare Google Cloud CLI o l'API Dataproc per abilitare Lightning Engine in una sessione interattiva serverless per Apache Spark. Puoi anche attivare Lightning Engine in una sessione interattiva in un notebook BigQuery Studio.

gcloud

Imposta i seguenti flag di comando gcloud beta dataproc sessions create spark gcloud CLI per attivare Lightning Engine in una sessione interattiva.

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

Note:

  • PROJECT_ID: il tuo ID progetto Google Cloud . Gli ID progetto sono elencati nella sezione Informazioni sul progetto della Google Cloud console Dashboard.
  • REGION: una regione di Compute Engine disponibile per l'esecuzione del carico di lavoro.
  • --properties=dataproc.tier=premium,spark.dataproc.engine=lightningEngine. Queste proprietà attivano Lightning Engine nella sessione.

  • Altre proprietà:

    • Native Query Engine: spark.dataproc.lightningEngine.runtime=native: Aggiungi questa proprietà per selezionare il runtime Native Query Execution.
  • OTHER_FLAGS_AS_NEEDED: vedi Creare una sessione interattiva.

API

Per attivare Lightning Engine in una sessione, aggiungi "dataproc.tier":"premium" e "spark.dataproc.engine":"lightningEngine" a RuntimeConfig.properties nell'ambito della richiesta sessions.create.

Altro RuntimeConfig.properties:

* Native Query Engine: spark.dataproc.lightningEngine.runtime:native: Aggiungi questa proprietà a RuntimeConfig.properties se vuoi selezionare il runtime Native Query Execution.

Consulta Crea una sessione interattiva per impostare altri campi dell'API del modello di sessione.

Notebook BigQuery

Puoi attivare Lightning Engine quando crei una sessione in un notebook PySpark di 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["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:

Verifica le impostazioni di Lightning Engine

Puoi utilizzare la console Google Cloud , Google Cloud CLI o l'API Dataproc per verificare le impostazioni di Lightning Engine in un batch, un modello di sessione o una sessione interattiva.

Workload batch

  • Per verificare che il livello del batch sia impostato su premium e che il motore sia impostato su Lightning Engine:

    • ConsoleGoogle Cloud : nella pagina Batch, consulta le colonne Livello e Motore per il batch. Puoi fare clic sull'ID batch per visualizzare queste impostazioni anche nella pagina dei dettagli del batch.
    • gcloud CLI: esegui il comando gcloud dataproc batches describe.
    • API: invia una richiesta batches.get.

Modello di sessione

  • Per verificare che engine sia impostato su Lightning Engine per un modello di sessione:

    • ConsoleGoogle Cloud : nella pagina Modelli di sessione, visualizza la colonna Motore per il tuo modello. Puoi fare clic sul nome del modello di sessione per visualizzare questa impostazione anche nella pagina dei dettagli del modello di sessione.
    • gcloud CLI: esegui il comando gcloud beta dataproc session-templates describe.
    • API: invia una richiesta sessionTemplates.get.

Sessione interattiva

  • Per il motore è impostato su Lightning Engine per una sessione interattiva:

    • ConsoleGoogle Cloud : nella pagina Sessioni interattive, consulta la colonna Motore per il modello. Puoi fare clic sull'ID sessione interattiva per visualizzare questa impostazione anche nella pagina dei dettagli del modello di sessione.
    • gcloud CLI: esegui il comando gcloud beta dataproc sessions describe.
    • API: invia una richiesta sessions.get.

Esecuzione di query native

L'esecuzione di query nativa (NQE) è una funzionalità opzionale di Lightning Engine che migliora le prestazioni tramite un'implementazione nativa basata su Apache Gluten e Velox, progettata per l'hardware Google.

L'ambiente di runtime di esecuzione delle query native include la gestione unificata della memoria per il passaggio dinamico tra la memoria off-heap e on-heap senza richiedere modifiche alle configurazioni Spark esistenti. NQE include un supporto esteso per operatori, funzioni e tipi di dati Spark, nonché l'intelligenza per identificare automaticamente le opportunità di utilizzare il motore nativo per operazioni di pushdown ottimali.

Identificare i workload di esecuzione delle query native

Utilizza l'esecuzione di query native nei seguenti scenari:

L'esecuzione di query native non è consigliata per i workload con input dei seguenti tipi di dati:

  • Byte: ORC e Parquet
  • Timestamp: ORC
  • Struct, Array, Map: Parquet

Limitazioni dell'esecuzione di query native

L'attivazione dell'esecuzione di query native nei seguenti scenari può causare eccezioni, incompatibilità di Spark o fallback del workload al motore Spark predefinito.

Fallback

L'esecuzione di query native nella seguente esecuzione può comportare il fallback del carico di lavoro al motore di esecuzione Spark, con conseguente regressione o errore.

  • ANSI:se la modalità ANSI è attivata, l'esecuzione torna a Spark.

  • Modalità sensibile alle maiuscole e minuscole:l'esecuzione di query native supporta solo la modalità predefinita di Spark che non fa distinzione tra maiuscole e minuscole. Se la modalità sensibile alle maiuscole/minuscole è attivata, possono verificarsi risultati errati.

  • Scansione della tabella partizionata: l'esecuzione di query native supporta la scansione della tabella partizionata solo quando il percorso contiene le informazioni sulla partizione. In caso contrario, il carico di lavoro torna al motore di esecuzione Spark.

Comportamento incompatibile

Un comportamento incompatibile o risultati errati possono verificarsi quando si utilizza l'esecuzione di query native nei seguenti casi:

  • Funzioni JSON: l'esecuzione di query native supporta le stringhe racchiuse tra virgolette doppie, non singole. I risultati errati si verificano con gli apici singoli. L'utilizzo di "*" nel percorso con la funzione get_json_object restituisce NULL.

  • Configurazione di lettura Parquet:

    • L'esecuzione di query native considera spark.files.ignoreCorruptFiles come impostato sul valore predefinito false, anche se impostato su true.
    • L'esecuzione di query native ignora spark.sql.parquet.datetimeRebaseModeInRead e restituisce solo i contenuti del file Parquet. Le differenze tra il calendario ibrido precedente (giuliano gregoriano) e il calendario gregoriano prolettico non vengono prese in considerazione. I risultati di Spark possono variare.
  • NaN: non supportato. Possono verificarsi risultati imprevisti, ad esempio quando si utilizza NaN in un confronto numerico.

  • Lettura colonnare di Spark: può verificarsi un errore irreversibile perché il vettore colonnare di Spark non è compatibile con l'esecuzione di query native.

  • Spill:quando le partizioni di shuffling sono impostate su un numero elevato, la funzionalità di spill-to-disk può attivare un OutOfMemoryException. Se si verifica questo problema, la riduzione del numero di partizioni può eliminare questa eccezione.