Utilizzare 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 notevoli miglioramenti delle prestazioni e risparmi sui costi grazie alle ottimizzazioni dell'interazione con spazio di archiviazione sul cloud, tra cui gestione dei metadati, carichi di lavoro di scrittura e I/O vettoriale.
Esecuzione intelligente delle query: sfrutta i miglioramenti avanzati dello strumento di ottimizzazione che riducono dinamicamente i dati scansionati, ottimizzano l'elaborazione dei dati e generano piani di esecuzione più efficienti per query più rapide ed economiche.
Carichi di lavoro di AI e ML semplificati: riduci i tempi di avvio del cluster per i carichi di lavoro basati su GPU e semplifica il deployment in ambienti sicuri utilizzando immagini ottimizzate per l'AI.
Sebbene Lightning Engine offra notevoli miglioramenti delle prestazioni, l'impatto specifico varia in base al workload. È più adatta alle 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 vincoli di I/O.
Confronto con il motore standard
Lightning Engine è un'alternativa al motore standard utilizzato per eseguire job Spark su un cluster Managed Service for Apache Spark. La tabella seguente confronta le proprietà di attivazione, l'applicabilità del workload e i vantaggi principali di Lightning Engine e del motore standard.
| Funzionalità | Motore standard | Lightning Engine |
|---|---|---|
| Flag CLI | --engine=default o rimuovi il flag. |
--engine=lightning |
| Ideale per | Job generici, 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
Alla funzionalità Lightning Engine si applicano i seguenti requisiti:
- Versione dell'immagine: Lightning Engine deve essere utilizzato con
la versione dell'immagine di Managed Service for Apache Spark
2.3.3e versioni secondarie successive dell'immagine2.3. Lightning Engine non è supportato nella versione dell'immagine di Managed Service for Apache Spark3.0. - Job supportati: sono supportati Spark, PySpark, SparkSQL e SparkR. Il motore standard viene eseguito su altri tipi di job inviati a un cluster Lightning Engine.
Esecuzione query nativa
Native Query Execution (NQE) è un componente facoltativo di Lightning Engine che fornisce un livello di accelerazione più profondo per job specifici. Si tratta di 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 che sfruttano le API Spark Dataframe e Spark Dataset e le query Spark SQL che leggono i dati dai file Parquet e ORC. Il formato del file di output non influisce sulle sue prestazioni.
- NQE non è consigliato per:
- Job che si basano molto su RDD (Resilient Distributed Datasets), UDF (User-Defined Functions), sulla maggior parte delle librerie Spark Machine Learning (ML) e su operazioni con I/O vincolati con ritardi dovuti all'accesso allo spazio di archiviazione.
Requisiti
Alla funzionalità di esecuzione di query native si applicano i seguenti requisiti:
Motore di esecuzione: NQE è disponibile solo sui cluster abilitati con il motore Lightning al momento della creazione del cluster.
Sistema operativo: sono supportati solo i sistemi operativi
Debian-12eUbuntu-22. I job abilitati per NQE che utilizzano qualsiasi altro sistema operativo non andranno a buon fine.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 abilitati per NQE che utilizzano processori ARM non andranno a buon fine (ma possono trarre vantaggio da Lightning Engine senza NQE).
Nessuna GPU e nessun acceleratore: i job abilitati a NQE inviati su acceleratori GPU non andranno a buon fine (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 la sezione Prezzi di Managed Service for Apache Spark.
Crea un cluster Lightning Engine
Questa sezione mostra come creare un cluster Managed Service for Apache Spark che attiva Lightning Engine sui job Spark inviati al cluster.
Puoi anche abilitare Native Query Execution (NQE) sul cluster quando lo crei oppure puoi abilitare NQE in un secondo momento per job Spark specifici inviati al cluster.
Prima di iniziare
- Accedi al tuo account Google Cloud . 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 carichi di lavoro.
-
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
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). 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
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). 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, un proprietario del progetto cloud o un amministratore dei servizi potrebbe aver già concesso questi ruoli a te o a uaccount di serviziont. Per controllare le concessioni di ruoli, consulta Devi concedere 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:
-
Tutte:
- Dataproc Editor (
roles/dataproc.editor) sul progetto - Service Account User (
roles/iam.serviceAccountUser) sul account di servizio predefinito Compute Engine
- Dataproc Editor (
Ruolo 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 Dataproc Worker (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 console Google Cloud , Google Cloud CLI, l'API Dataproc, le librerie client di Cloud per Python o Terraform. Puoi anche creare un cluster con Lightning Engine abilitato utilizzando le librerie client Cloud Go, Java e Node.js.
Console
- Apri la pagina Crea cluster.
- Fai clic su Configurazione aggiuntiva per espandere la sezione.
- Modifica Personalizzazione e altro.
- Nel riquadro che si apre, verifica che la casella di controllo Attiva Lightning Engine sia selezionata.
- (Facoltativo) Per attivare l'ambiente di runtime di esecuzione nativa per impostazione predefinita per i job Spark, seleziona la casella di controllo Abilita esecuzione nativa.
- Fai clic su Salva.
- Configura le altre impostazioni del cluster in base alle esigenze.
- Fai clic su Crea cluster.
gcloud CLI
Per creare un cluster con Lightning Engine abilitato, esegui il comando
gcloud dataproc clusters createcon 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 maggiori informazioni, consulta la sezione Creare un cluster con l'API REST.
Nel corpo della richiesta, imposta il campo
enginesuLIGHTNING.{ "projectId": "PROJECT_ID", "clusterName": "CLUSTER_NAME", "config": { "engine": "LIGHTNING", "gceClusterConfig": {}, "softwareConfig": { "imageVersion": "2.3" } } }(Facoltativo) Per attivare 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": { "engine": "LIGHTNING", "gceClusterConfig": {}, "softwareConfig": { "imageVersion": "2.3", "properties": { "spark:spark.dataproc.lightningEngine.runtime": "native" } } } }
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 risorsa
google_dataproc_cluster.
Verifica il motore del cluster
Console
- Nella console Google Cloud , vai alla pagina Dettagli cluster.
- Verifica che il valore di
Lightning Enginesia elencato nel campo Motore. - Se hai attivato l'esecuzione di query native, 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
Invia un job con Lightning Engine
Se hai abilitato Lightning Engine durante la creazione di un cluster, quando invii un job Spark al cluster, Lightning Engine viene abilitato per impostazione predefinita per il job.
Abilitare l'esecuzione di query native per un job
Se hai attivato Native Query Execution (NQE) durante la creazione di un cluster Lightning Engine, tutti i job Spark vengono eseguiti con NQE attivato, a meno che tu non disattivi NQE per un job specifico.
Se non hai abilitato NQE durante la creazione del cluster Lightning Engine, puoi abilitare NQE per un job quando lo invii, come mostrato negli esempi seguenti.
gcloud
Per abilitare l'esecuzione di query native quando invii un job Spark, includi la proprietà spark.dataproc.lightningEngine.runtime=native:
gcloud dataproc jobs submit spark \
--cluster=CLUSTER_NAME \
--region=REGION \
--properties=spark.dataproc.lightningEngine.runtime=native \
-- ...
API
Per abilitare l'esecuzione di query native quando invii un job Spark, includi la proprietà spark.dataproc.lightningEngine.runtime nella richiesta:
{
"job":{
"placement":{
"clusterName": ...
},
"sparkJob":{
"mainClass": ...,
"properties":{
"spark.dataproc.lightningEngine.runtime":"native"
}
}
}
}
Disattivare l'esecuzione di query native per un job
Se hai attivato Native Query Execution (NQE) quando hai creato un cluster Lightning Engine, tutti i job Spark verranno eseguiti con NQE attivato, a meno che tu non disattivi NQE per un job specifico.
Puoi disattivare NQE per un job Spark specifico quando lo invii, come mostrato negli esempi seguenti.
gcloud
Per disabilitare l'esecuzione di query nativa quando invii un job Spark a un cluster Lightning Engine, includi la proprietà spark.dataproc.lightningEngine.runtime=default:
gcloud dataproc jobs submit spark \
--cluster=CLUSTER_NAME \
--region=REGION \
--properties=spark.dataproc.lightningEngine.runtime=default \
-- ...
API
Per disabilitare l'esecuzione di query nativa quando invii un job Spark a un cluster Lightning Engine, includi la proprietà spark.dataproc.lightningEngine.runtime=default:
{
"job":{
"placement":{
"clusterName": ...
},
"sparkJob":{
"mainClass": ...,
"properties":{
"spark.dataproc.lightningEngine.runtime":"default"
}
}
}
}
Verificare l'esecuzione di query native per un job
Dopo aver inviato un job a un cluster Lightning Engine, puoi verificare che l'esecuzione delle query native sia abilitata per il job.
Console
- Nella console Google Cloud , vai alla pagina Job.
- Fai clic sull'ID job per aprire la pagina Dettagli job.
- Verifica che
nativesia elencato nel campo Esecuzione nativa.
gcloud
Esegui il comando
gcloud dataproc jobs describe:gcloud dataproc jobs describe JOB_ID --project=PROJECT_ID --region=REGIONControlla l'output per
lightningEngine.runtimenella sezione Proprietà:lightningEngine.runtime: native
Parametri di configurazione
La tabella seguente riepiloga i principali parametri di configurazione per Lightning Engine e l'esecuzione di query native.
| Nome parametro | Descrizione | Motore o motori applicabili | Valore predefinito | Valore predefinito (motore Lightning) | Override utente (livello di lavoro) | 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 |
Attiva o disattiva Native Query Execution (NQE) all'interno di Lightning Engine. | Solo Lightning | default |
default |
Sì. Può essere impostato su native o default. |
Job |
Limitazioni
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 nei seguenti scenari può comportare il fallback del workload al motore di esecuzione Spark:
- ANSI: se la modalità ANSI è attivata, l'esecuzione torna a Spark.
- Modalità sensibile alle maiuscole: 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 è attivata, possono verificarsi risultati errati.
- Scansione della tabella partizionata: l'esecuzione di query nativa supporta la scansione della tabella partizionata 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 di query native nei seguenti casi, possono verificarsi comportamenti incompatibili o risultati errati:
- Funzioni JSON: l'esecuzione di query native supporta le stringhe racchiuse tra
doppi apici, non tra singoli apici. I risultati errati si verificano con gli apici singoli. L'utilizzo di
*nel percorso con la funzioneget_json_objectrestituisceNULL. - Configurazione di lettura Parquet:
- L'esecuzione di query native considera
spark.files.ignoreCorruptFilesimpostato 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 legacy e il calendario gregoriano prolettico non vengono prese in considerazione. I risultati di Spark possono variare.
- L'esecuzione di query native considera
- NaN: non supportato. Possono verificarsi risultati imprevisti, ad esempio quando
utilizzi
NaNin 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 imposti le partizioni di shuffling su un numero elevato, la
funzionalità di spill-to-disk può attivare un
OutOfMemoryException. Se si verifica questo problema, ridurre il numero di partizioni può eliminare questa eccezione.