Accelerare i workload batch e le sessioni Spark con Lightning Engine

Questo documento mostra come abilitare Lightning Engine per accelerare i workload batch e le sessioni interattive di Managed Service for 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 nell'illustrazione seguente, Lightning Engine accelera le prestazioni di esecuzione delle query Spark su un workload simile a TPC-H (dimensioni del set di dati 10 TB).

Per saperne di più, consulta Introduzione a Lightning Engine: la nuova generazione di prestazioni di Apache Spark.

Disponibilità di Lightning Engine

  • Lightning Engine e l'esecuzione di query native sono disponibili per l'utilizzo con il runtime di Managed Service for Apache Spark 2.3. Lightning Engine e l'esecuzione di query native non sono disponibili nel runtime 3.0.

  • Lightning Engine è disponibile solo con il livello di prezzo Premium di Managed Service for Apache Spark.

    • Workload batch: Lightning Engine viene attivato automaticamente per i workload 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 attivarlo, consulta Abilita Lightning Engine.

    • Profili di runtime (modelli di sessione): quando crei un profilo di runtime nella console Google Cloud , il livello Premium e l'opzione Attiva Lightning Engine per accelerare le prestazioni sono selezionati per impostazione predefinita. Quando crei un modello di sessione utilizzando Google Cloud CLI o l'API Dataproc, Lightning Engine non è abilitato per impostazione predefinita. Per attivarlo o configurarlo, consulta Attiva Lightning Engine.

Abilita Lightning Engine

Le sezioni seguenti mostrano come abilitare Lightning Engine su un workload batch, un profilo di runtime (template di sessione) e una sessione interattiva di Managed Service for Apache Spark.

Workload batch

Abilita Lightning Engine su un workload batch

Puoi utilizzare la console Google Cloud , Google Cloud CLI o l'API Dataproc per abilitare Lightning Engine su un workload batch.

Console

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

  1. Nella console Google Cloud , vai alla pagina Job di Managed Service for Apache Spark:

    Vai ai job Managed Service for Apache Spark

  2. Fai clic su Invia job per aprire la pagina Invia un job.

  3. In Seleziona il tipo di computing per il job, verifica che sia selezionato Spark serverless.

  4. Nella sezione Dettagli job serverless:

    • Seleziona un Profilo di runtime (o mantieni Configurazione del servizio predefinita per la tua regione) e fai clic su Configura nella scheda Riepilogo (o fai clic su Crea nuovo profilo nel menu Profilo di runtime) per aprire il riquadro di configurazione del profilo di runtime.
    • Livello: Seleziona Premium. In questo modo, l'opzione Abilita Lightning Engine per accelerare le prestazioni viene attivata e selezionata automaticamente.

      Quando selezioni il livello Premium, i livelli di computing del driver e dell'esecutore vengono impostati su Premium. Queste impostazioni di calcolo del livello Premium impostate automaticamente non possono essere sostituite per i batch che utilizzano runtime precedenti alla versione 3.0.

    • Configurazione aggiuntiva:

      • Configurazione di runtime: fai clic su Modifica, seleziona 2.3 per Versione runtime Spark e fai clic su Salva.
      • Configurazione di esecutore e driver: (facoltativo) fai clic su Modifica per configurare Disco driver e Disco esecutore su Premium (SSD) o lasciali sul valore predefinito Standard (HDD), quindi fai clic su Salva. Se scegli un livello di disco premium, devi selezionare la dimensione del disco. Per saperne di più, consulta le proprietà di allocazione delle risorse.
    • Fai clic su Usa configurazione (o Salva nuovo profilo).

  5. Nella sezione Esecuzione e proprietà del job, in Proprietà Spark (o nel riquadro di configurazione del profilo di runtime in Configurazione aggiuntiva > Altre personalizzazioni > Proprietà Spark), facoltativamente fai clic su Aggiungi proprietà e inserisci la seguente coppia Chiave (nome della proprietà) e Valore se vuoi selezionare il runtime di Native Query Execution:

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

  6. Compila i campi File e artefatti e altre impostazioni del workload batch nella pagina Invia un job. Consulta Invia un workload batch Spark.

  7. Fai clic su Invia per eseguire il workload batch Spark.

gcloud

Imposta i seguenti flag del comando gcloud CLI gcloud dataproc batches submit spark per attivare un motore Lightning su un workload batch.

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

Note:

  • PROJECT_ID: l'ID progetto Google Cloud . Gli ID progetto sono elencati nella sezione Informazioni sul progetto della dashboard della console Google Cloud .
  • REGION: una regione di Compute Engine disponibile per eseguire il workload.
  • --properties=dataproc.tier=premium. L'impostazione del livello Premium imposta automaticamente le seguenti proprietà sul workload 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 computing di livello Premium impostate automaticamente non possono essere sostituite per i batch che utilizzano runtime precedenti alla versione 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 dei dischi: per impostazione predefinita, le dimensioni dei dischi del driver e dell'esecutore sono impostate su livelli e dimensioni standard. Puoi aggiungere proprietà per selezionare i livelli e le dimensioni dei dischi premium (in multipli di 375 GiB).
      Per saperne di più, consulta le proprietà di allocazione delle risorse.

  • OTHER_FLAGS_AS_NEEDED: consulta Invia un workload batch Spark.

API

Per abilitare Lightning Engine su un workload batch, nell'ambito della richiesta batches.create:

  • Imposta RuntimeConfig.version su 2.3.
  • Aggiungi "dataproc.tier":"premium" a RuntimeConfig.properties. L'impostazione del livello Premium imposta automaticamente le seguenti proprietà sul workload 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 computing del livello Premium impostate automaticamente non possono essere sostituite per i batch che utilizzano runtime precedenti alla versione 3.0.

Altro RuntimeConfig.properties:

  • Motore di query nativo: spark.dataproc.lightningEngine.runtime:native. Aggiungi questa proprietà se vuoi selezionare il runtime Esecuzione di query native.

  • Livelli e dimensioni dei dischi: per impostazione predefinita, le dimensioni dei dischi del driver e dell'esecutore sono impostate su livelli e dimensioni standard. Puoi aggiungere proprietà per selezionare livelli e dimensioni di premium (in multipli di 375 GiB).
    Per saperne di più, consulta le proprietà di allocazione delle risorse.

Consulta Invia un workload batch Spark per impostare altri campi dell'API del workload batch.

Profilo di runtime

Abilita Lightning Engine su un profilo di runtime (template di sessione)

Puoi utilizzare la console Google Cloud , Google Cloud CLI o l'API Dataproc per abilitare il motore Lightning su un profilo di runtime (modello di sessione) per una sessione Jupyter o Spark Connect.

Console

Utilizza la console Google Cloud per abilitare Lightning Engine su un profilo di runtime (template di sessione):

  1. Nella console Google Cloud , vai alla pagina Serverless (Profili di runtime) di Managed Service for Apache Spark:

    Vai a Profili di runtime

  2. Fai clic su Crea per aprire la pagina Crea un profilo di runtime.

  3. Seleziona e compila i seguenti campi:

    • Livello: verifica che sia selezionato Premium (predefinito) e che sia selezionata l'opzione Abilita Lightning Engine per accelerare le prestazioni (selezionata per impostazione predefinita, che imposta spark.dataproc.engine=lightningEngine).

    • Configurazione aggiuntiva: configura le seguenti impostazioni delle proprietà di runtime e Spark:

      • Configurazione di runtime: fai clic su Modifica e verifica che la versione del runtime Spark sia impostata su 2.3, quindi fai clic su Salva.

      • Altre personalizzazioni: (facoltativo) per selezionare il runtime di Native Query Execution, fai clic su Modifica, poi su Aggiungi proprietà in Proprietà Spark, inserisci la seguente coppia Chiave (nome della proprietà) e Valore, quindi fai clic su Salva:

        Chiave Valore
        spark.dataproc.lightningEngine.runtime native

  4. Compila, seleziona o conferma le altre impostazioni del profilo di runtime. Per saperne di più sulle impostazioni del profilo di runtime, consulta Crea un profilo di runtime.

  5. Fai clic su Crea.

gcloud

Non puoi creare direttamente un template di sessione di Managed Service for Apache Spark (profilo di runtime) 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 il motore Lightning e, facoltativamente, il runtime di Native Query, quindi esportare il template modificato utilizzando il comando gcloud beta dataproc session-templates export.

API

Per abilitare Lightning Engine su un template di sessione (profilo di runtime), 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.

Per saperne di più sull'impostazione di altri campi dell'API del template di sessione, consulta Crea un profilo di runtime (template di sessione).

Sessione interattiva

Abilita Lightning Engine in una sessione interattiva

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

gcloud

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

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

Note:

  • PROJECT_ID: l'ID progetto Google Cloud . Gli ID progetto sono elencati nella sezione Informazioni sul progetto della dashboard della console Google Cloud .
  • REGION: una regione di Compute Engine disponibile per eseguire il workload.
  • --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 di Native Query Execution.
  • OTHER_FLAGS_AS_NEEDED: consulta Crea una sessione interattiva.

API

Per abilitare Lightning Engine in una sessione, 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 template di sessione.

Notebook di BigQuery

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

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 su un workload batch, un profilo di runtime (modello di sessione) o una sessione interattiva.

Workload batch

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

    • ConsoleGoogle Cloud : nella pagina Job, seleziona la scheda Spark serverless per visualizzare la colonna Livello per il batch, quindi fai clic sull'ID job batch per visualizzare le impostazioni Livello e Motore nella scheda Riepilogo della pagina Dettagli job batch.
    • gcloud CLI: esegui il comando gcloud dataproc batches describe.
    • API: invia una richiesta batches.get.

Profilo di runtime

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

    • ConsoleGoogle Cloud : nella pagina Serverless (profili di runtime), fai clic sul nome del profilo di runtime per visualizzarne le impostazioni nella pagina dei dettagli del profilo di runtime.

    • gcloud CLI: esegui il comando gcloud beta dataproc session-templates describe.

    • API: invia una richiesta sessionTemplates.get.

Sessione interattiva

  • Per verificare che engine sia impostato su Lightning Engine per una sessione interattiva:

    • ConsoleGoogle Cloud : nella pagina Sessioni, consulta la colonna Motore della sessione. Puoi fare clic sull'ID sessione per visualizzare questa impostazione anche nella pagina dei dettagli della sessione.

    • gcloud CLI: esegui il comando gcloud beta dataproc sessions describe.

    • API: invia una richiesta sessions.get.

Esecuzione di query native

Native Query Execution (NQE) è una funzionalità facoltativa di Lightning Engine che migliora le prestazioni tramite un'implementazione nativa basata su Apache Gluten e Velox progettata per l'hardware Google.

Il runtime di Native Query Execution include la gestione della memoria unificata 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'intelligence per identificare automaticamente le opportunità di utilizzo del motore nativo per operazioni di pushdown ottimali.

Identifica i workload di esecuzione di 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'abilitazione dell'esecuzione di query native nei seguenti scenari può causare eccezioni, incompatibilità di Spark o il fallback del workload al motore Spark predefinito.

Fallback

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

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

  • Modalità sensibile alle maiuscole: l'esecuzione di query native supporta solo la modalità predefinita di Spark senza distinzione tra maiuscole e minuscole. Se la modalità sensibile alle maiuscole è attiva, potrebbero verificarsi risultati errati.

  • Scansione di tabelle partizionate: l'esecuzione di query native supporta la scansione di tabella partizionata solo quando il percorso contiene le informazioni sulla partizione, altrimenti il workload torna al motore di esecuzione Spark.

Comportamento incompatibile

L'utilizzo dell'esecuzione di query native può comportare un comportamento incompatibile o risultati errati nei seguenti casi:

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

  • Configurazione di lettura Parquet:

    • Native Query Execution 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 utilizzi NaN in un confronto numerico.

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

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