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 runtime3.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.
Nella console Google Cloud , vai alla pagina Job di Managed Service for Apache Spark:
Fai clic su Invia job per aprire la pagina Invia un job.
In Seleziona il tipo di computing per il job, verifica che sia selezionato Spark serverless.
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 versione3.0.Configurazione aggiuntiva:
- Configurazione di runtime: fai clic su Modifica, seleziona
2.3per 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.
- Configurazione di runtime: fai clic su Modifica, seleziona
Fai clic su Usa configurazione (o Salva nuovo profilo).
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.runtimeindigeno/nativo/locale Compila i campi File e artefatti e altre impostazioni del workload batch nella pagina Invia un job. Consulta Invia un workload batch Spark.
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=lightningEngineseleziona Lightning Engine per il workload batch.spark.dataproc.driver.compute.tierespark.dataproc.executor.compute.tiersono impostati supremium(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 versione3.0.
Altre proprietà
Native Query Engine:
spark.dataproc.lightningEngine.runtime=nativeAggiungi 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 dischipremium(in multipli di375 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=lightningEngineseleziona Lightning Engine per il workload batch.spark.dataproc.driver.compute.tierespark.dataproc.executor.compute.tiersono impostati supremium(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 versione3.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 dipremium(in multipli di375 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):
Nella console Google Cloud , vai alla pagina Serverless (Profili di runtime) di Managed Service for Apache Spark:
Fai clic su Crea per aprire la pagina Crea un profilo di runtime.
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.runtimenative
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.
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:
- Imposta RuntimeConfig.version su
2.3. - Aggiungi "dataproc.tier":"premium" e "spark.dataproc.engine":"lightningEngine" a RuntimeConfig.properties.
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.
- Native Query Engine:
OTHER_FLAGS_AS_NEEDED: consulta Crea una sessione interattiva.
API
Per abilitare Lightning Engine in una sessione, nell'ambito della richiesta sessions.create:
- Imposta RuntimeConfig.version su
2.3. - Aggiungi "dataproc.tier":"premium" e "spark.dataproc.engine":"lightningEngine" a RuntimeConfig.properties.
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
premiume il motore suLightning 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 Engineper 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 Engineper 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:
API Spark Dataframe, API Spark Dataset e query Spark SQL che leggono i dati da file Parquet e ORC. Il formato file di output non influisce sulle prestazioni di esecuzione delle query native.
Workload consigliati dallo strumento di qualificazione dell'esecuzione di query native.
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_objectrestituisceNULL.Configurazione di lettura Parquet:
- Native Query Execution considera
spark.files.ignoreCorruptFilescome impostato sul valore predefinitofalse, anche se è impostato sutrue. - L'esecuzione di query native ignora
spark.sql.parquet.datetimeRebaseModeInReade 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.
- Native Query Execution considera
NaN: non supportato. Possono verificarsi risultati imprevisti, ad esempio quando utilizziNaNin 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.