Utilizzo di Lightning Engine
Lightning Engine è la nuova generazione di prestazioni di Apache Spark, che introduce miglioramenti esclusivi progettati per offrire miglioramenti sostanziali in termini di prestazioni, efficienza dei costi e stabilità operativa.
Vantaggi
I vantaggi di Lightning Engine includono:
Operazioni sui dati accelerate: ottieni significativi miglioramenti delle prestazioni e risparmi sui costi grazie alle ottimizzazioni dell'interazione con spazio di archiviazione sul cloud, tra cui la gestione dei metadati, i workload di scrittura e l'I/O vettoriale.
Esecuzione intelligente delle query: sfrutta i miglioramenti avanzati dell'ottimizzatore che riducono dinamicamente i dati scansionati, ottimizzano l'elaborazione dei dati e generano piani di esecuzione più efficienti per query più veloci ed economiche.
Workload di AI e ML semplificati: riduci i tempi di avvio dei cluster per i workload basati su GPU e semplifica il deployment in ambienti sicuri con immagini AI e ML native.
Sebbene Lightning Engine offra notevoli miglioramenti delle prestazioni, l'impatto specifico varia a seconda del workload. È più adatto per le attività a elevato utilizzo di risorse di calcolo che sfruttano le API Spark Dataframe, le API Spark Dataset e le query Spark SQL, anziché le operazioni con I/O limitato.
Confronto con il motore standard
Lightning Engine è un'alternativa al motore standard utilizzato per eseguire i job Spark su un cluster Managed Service for Apache Spark. La tabella seguente confronta le proprietà di attivazione, l'applicabilità dei workload e i vantaggi principali di Lightning Engine rispetto al motore standard.
| Funzionalità | Motore standard | Lightning Engine |
|---|---|---|
| Proprietà di attivazione | --engine=default o non impostare il flag |
--engine=lightning |
| Ideale per | Job di uso generale, sviluppo e test | Workload su scala aziendale che richiedono un'accelerazione significativa |
| Vantaggi principali | Prestazioni di riferimento | Interazione ottimizzata con spazio di archiviazione sul cloud, esecuzione intelligente delle query |
Requisiti
I seguenti requisiti si applicano alla funzionalità Lightning Engine:
- Versione dell'immagine: Lightning Engine deve essere utilizzato con Managed Service for Apache Spark
versione dell'immagine
2.3.3o successive. - Job supportati: sono supportati Spark, PySpark, SparkSQL e SparkR. Il motore standard verrà eseguito su altri tipi di job inviati a un cluster Lightning Engine.
Esecuzione nativa delle query
L'esecuzione nativa delle query (NQE) è un componente facoltativo di Lightning Engine che fornisce un livello di accelerazione più approfondito per job specifici. È un motore nativo basato su Apache Gluten e Velox, ottimizzato per l'hardware Google, che migliora le prestazioni eseguendo parti di una query Spark al di fuori della JVM.
- NQE è consigliato per:
- Attività a elevato utilizzo di risorse di calcolo (anziché operazioni con I/O limitato) che sfruttano le API Spark Dataframe, le API Spark Dataset e le query Spark SQL che leggono i dati da file Parquet e ORC. Il formato del file di output non influisce sulle prestazioni.
- NQE non è consigliato per:
- Job che si basano fortemente su set di dati distribuiti resilienti (RDD), funzioni definite dall'utente (UDF) o sulla maggior parte delle librerie di machine learning (ML) di Spark.
Requisiti
I seguenti requisiti si applicano alla funzionalità di esecuzione nativa delle query:
Motore di esecuzione: NQE è disponibile solo sui cluster in cui è abilitato il motore Lightning durante la creazione del cluster.
Sistema operativo: sono supportate solo le immagini
Debian-12. I job con NQE abilitato che utilizzano qualsiasi altro sistema operativo non riusciranno.Job supportati: sono supportati Spark, PySpark, SparkSQL e SparkR. Il motore standard verrà eseguito (senza NQE) su altri tipi di job inviati a un cluster Lightning Engine.
Tipi di macchine: sono supportate solo le famiglie di macchine che utilizzano processori Intel o AMD. I job con NQE abilitato che utilizzano processori ARM non riusciranno (ma possono trarre vantaggio da Lightning Engine senza NQE).
Nessuna GPU e acceleratori: i job con NQE abilitato inviati agli acceleratori GPU non riusciranno (ma possono trarre vantaggio da Lightning Engine senza NQE).
Tipi di dati: gli input dei seguenti tipi di dati non sono supportati:
- Byte: ORC e Parquet
- Struct, Array, Map: Parquet
Prezzi
Per informazioni sui prezzi, consulta Prezzi di Managed Service for Apache Spark su Compute Engine.
Creare un cluster Lightning Engine
Questa sezione mostra come creare un cluster Managed Service for Apache Spark che abilita Lightning Engine sui job Spark inviati al cluster.
Puoi anche abilitare l'esecuzione nativa delle query (NQE) sul cluster quando crei il cluster oppure puoi abilitare NQE in un secondo momento per job Spark specifici inviati al cluster.
Prima di iniziare
- Accedi al tuo Google Cloud account. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei workload.
-
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 Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Installa Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
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 Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Installa Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init
Ruoli obbligatori
Per creare un cluster Managed Service for Apache Spark e inviare job al cluster sono necessari determinati ruoli IAM. A seconda delle policy dell'organizzazione, questi ruoli potrebbero essere già stati concessi. Per verificare le concessioni dei ruoli, consulta Devi concedere i ruoli?.
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Ruoli utente
Per ottenere le autorizzazioni necessarie per creare un cluster Managed Service for Apache Spark, chiedi all'amministratore di concederti i seguenti ruoli IAM:
-
Editor di Managed Service for Apache Spark (
roles/dataproc.editor) sul progetto -
Utente account di servizio (
roles/iam.serviceAccountUser) sul service account predefinito di Compute Engine
Ruolo del service account
Per assicurarti che il account di servizio predefinito di Compute Engine disponga delle autorizzazioni necessarie per creare un cluster Managed Service for Apache Spark, chiedi all'amministratore di concedere il ruolo IAM Worker di Managed Service for Apache Spark (roles/dataproc.worker) al account di servizio predefinito di Compute Engine sul progetto.
Crea il cluster
Gli esempi seguenti mostrano come creare un cluster Lightning Engine utilizzando la Google Cloud console, Google Cloud CLI, l'API Dataproc, Python o Terraform. Puoi anche creare un cluster Managed Service for Apache Spark con Lightning Engine abilitato utilizzando le librerie client Go, Java e Node.js.
Console
Nella Google Cloud console, vai a Crea un cluster Apache Spark su Compute Engine. Per saperne di più, consulta Creare un cluster con la Google Cloud console.
In Definisci il cluster, seleziona la casella di controllo Abilita Lightning Engine per creare un cluster con Lightning Engine abilitato.
(Facoltativo) Per abilitare il runtime di esecuzione nativa per impostazione predefinita per i job Spark, seleziona la casella di controllo Abilita esecuzione nativa.
Configura le altre impostazioni del cluster in base alle esigenze.
Fai clic su Crea.
Gcloud CLI
Per creare un cluster con Lightning Engine abilitato, esegui il
gcloud dataproc clusters createcomando con il flag--engine=lightning. Per saperne di più, consulta Creare un cluster con gcloud CLI.gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --engine=lightning \ --image-version=2.3(Facoltativo) Per abilitare il runtime di esecuzione nativa per impostazione predefinita per i job Spark, includi la proprietà
spark:spark.dataproc.lightningEngine.runtime=native.gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --engine=lightning \ --image-version=2.3 \ --properties='spark:spark.dataproc.lightningEngine.runtime=native'
API
Per creare un cluster con Lightning Engine abilitato, invia una richiesta clusters.create. Per saperne di più, consulta
Creare un cluster con l'API REST.
Nel corpo della richiesta, imposta il
enginecampo suLIGHTNING.{ "projectId": "PROJECT_ID", "clusterName": "CLUSTER_NAME", "config": { "gceClusterConfig": {}, "softwareConfig": { "imageVersion": "2.3" } }, "engine": "LIGHTNING" }(Facoltativo) Per abilitare il runtime di esecuzione nativa per impostazione predefinita per tutti i job, includi la proprietà
spark:spark.dataproc.lightningEngine.runtime.{ "projectId": "PROJECT_ID", "clusterName": "CLUSTER_NAME", "config": { "gceClusterConfig": {}, "softwareConfig": { "imageVersion": "2.3", "properties": { "spark:spark.dataproc.lightningEngine.runtime": "native" } } }, "engine": "LIGHTNING" }
Python
Per creare un cluster con Lightning Engine abilitato, utilizza il metodo
create_clustere imposta il campoenginenella configurazione del cluster suLIGHTNING. Per saperne di più, consulta Creare un cluster con Python.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}")(Facoltativo) Per abilitare il runtime di esecuzione nativa per impostazione predefinita per i job Spark, includi la proprietà
spark:spark.dataproc.lightningEngine.runtime.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
- Nella configurazione della risorsa
google_dataproc_cluster, imposta l'argomentoenginesuLIGHTNING. - Per maggiori dettagli e opzioni avanzate, consulta la documentazione ufficiale di Terraform
per la
google_dataproc_clusterrisorsa.
Verificare il motore del cluster
Console
- Nella Google Cloud console, vai alla pagina Dettagli cluster.
- Verifica che il valore
Lightning Enginesia elencato nel campo Motore. - Se hai abilitato l'esecuzione nativa delle query, verifica che
nativesia elencato nel campo Esecuzione nativa.
gcloud
Per verificare il motore e NQE (se abilitato), esegui il comando
gcloud dataproc clusters describe:gcloud dataproc clusters describe CLUSTER_NAME --project=PROJECT_ID --region=REGIONControlla l'output per le proprietà
engineelightningEngine.runtime:clusterName: lightning-engine-cluster engine: lightningEngine lightningEngine.runtime: native
Inviare un job con Lightning Engine
Dopo aver creato un cluster Lightning Engine, quando invii un job Spark al cluster, Lightning Engine viene abilitato automaticamente per il job.
Abilitare l'esecuzione nativa delle query per un job
Se hai abilitato l'esecuzione nativa delle query (NQE) quando hai creato un cluster Lightning Engine, tutti i job Spark verranno eseguiti con NQE abilitato, a meno che tu non disabiliti NQE per un job specifico.
Se non hai abilitato NQE quando hai creato il cluster Lightning Engine, puoi abilitare NQE per un job specifico quando lo invii, come mostrato negli esempi seguenti.
gcloud
Per abilitare l'esecuzione nativa delle query quando
invii un job Spark,
includi la proprietà spark.dataproc.lightningEngine.runtime=native:
```none
gcloud dataproc jobs submit spark \
--cluster=CLUSTER_NAME \
--region=REGION \
--properties=spark.dataproc.lightningEngine.runtime=native \
-- ...
```
API
Per abilitare l'esecuzione nativa delle query quando
invii un job Spark,
includi la proprietà spark.dataproc.lightningEngine.runtime nella richiesta:
```json
{
"job":{
"placement":{
"clusterName": ...
},
"sparkJob":{
"mainClass": ...,
"properties":{
"spark.dataproc.lightningEngine.runtime":"native"
}
}
}
}
```
Disabilitare l'esecuzione nativa delle query per un job
Se hai abilitato l'esecuzione nativa delle query (NQE) quando hai creato un cluster Lightning Engine, tutti i job Spark verranno eseguiti con NQE abilitato, a meno che tu non disabiliti NQE per un job specifico.
Puoi disabilitare NQE per un job Spark specifico quando lo invii, come mostrato negli esempi seguenti.
gcloud
```shell
gcloud dataproc jobs submit spark \
--cluster=CLUSTER_NAME \
--region=REGION \
--properties=spark.dataproc.lightningEngine.runtime=default \
-- ...
```
API
Per disabilitare l'esecuzione nativa delle query quando
invii un job Spark,
a un cluster Lightning Engine, includi la proprietà spark.dataproc.lightningEngine.runtime=default:
```json
{
"job":{
"placement":{
"clusterName": ...
},
"sparkJob":{
"mainClass": ...,
"properties":{
"spark.dataproc.lightningEngine.runtime":"default"
}
}
}
}
```
Verificare l'esecuzione nativa delle query per un job
Dopo aver inviato un job a un cluster Lightning Engine, puoi verificare che l'esecuzione nativa delle query sia abilitata per il job.
Console
- Nella Google Cloud console, vai alla pagina Dettagli job.
- Verifica che
nativesia elencato nel campo Esecuzione nativa.
gcloud
Esegui il comando
gcloud dataproc jobs describe:gcloud dataproc clusters describe JOB_ID --project=PROJECT_ID --region=REGIONControlla l'output per
lightningEngine.runtimenella Proprietà sezione:lightningEngine.runtime: native
Parametri di configurazione
La tabella seguente riepiloga i principali parametri di configurazione per Lightning Engine e l'esecuzione nativa delle query.
| Nome parametro | Descrizione | Motori applicabili | Valore predefinito | Valore predefinito (Lightning Engine) | Override utente (a livello di job) | Ambito |
|---|---|---|---|---|---|---|
--engine |
Impostazione a livello di cluster per selezionare il motore durante la creazione del cluster. | A livello di cluster | default |
lightning |
No | Cluster |
spark:spark.dataproc.lightningEngine.runtime |
Impostazione a livello di cluster per selezionare il runtime del motore Lightning durante la creazione del cluster. | Solo Lightning | default |
default |
No | Cluster |
spark.dataproc.lightningEngine.runtime |
Abilita o disabilita l'esecuzione nativa delle query (NQE) all'interno di Lightning Engine. | Solo Lightning | default |
default |
Sì. Può essere impostato su native o default. |
Job |
Limitazioni
L'abilitazione dell'esecuzione nativa delle query nei seguenti scenari può causare eccezioni, incompatibilità di Spark o il fallback del workload al motore Spark predefinito.
Fallback
L'esecuzione nativa delle query nei seguenti scenari può comportare un fallback del workload al motore di esecuzione Spark:
- ANSI: se la modalità ANSI è abilitata, l'esecuzione torna a Spark.
- Modalità sensibile alle maiuscole/minuscole: l'esecuzione nativa delle query supporta solo la modalità predefinita di Spark che non fa distinzione tra maiuscole e minuscole. Se la modalità sensibile alle maiuscole/minuscole è abilitata, possono verificarsi risultati errati.
- Scansione di tabelle partizionate: l'esecuzione nativa delle query supporta la scansione di tabelle partizionate solo quando il percorso contiene le informazioni sulla partizione. In caso contrario, il workload torna al motore di esecuzione Spark.
Comportamento incompatibile
Quando utilizzi l'esecuzione nativa delle query nei seguenti casi, possono verificarsi comportamenti incompatibili o risultati errati:
- Funzioni JSON: l'esecuzione nativa delle query supporta le stringhe racchiuse tra virgolette
doppie, non singole. Con le virgolette singole si verificano risultati errati. L'utilizzo di
*nel percorso con la funzioneget_json_objectrestituisceNULL. - Configurazione di lettura di Parquet:
- L'esecuzione nativa delle query considera
spark.files.ignoreCorruptFilesimpostato sul valore predefinitofalse, anche quando è impostato sutrue. - L'esecuzione nativa delle query ignora
spark.sql.parquet.datetimeRebaseModeInReade restituisce solo i contenuti del file Parquet. Le differenze tra il calendario ibrido legacy e il calendario gregoriano prolettico non vengono prese in considerazione. I risultati di Spark possono variare.
- L'esecuzione nativa delle query considera
- NaN: non supportato. Possono verificarsi risultati imprevisti, ad esempio quando utilizzi
NaNin un confronto numerico. - Lettura colonnare di Spark: può verificarsi un errore irreversibile perché il vettore colonnare di Spark non è compatibile con l'esecuzione nativa delle query.
- Spill: quando imposti un numero elevato di partizioni di shuffle, la
funzionalità di spill su disco può attivare un'
OutOfMemoryException. In questo caso, la riduzione del numero di partizioni può eliminare questa eccezione.