Questo documento fornisce informazioni sull'ottimizzazione automatica dei workload batch Serverless per Apache Spark. L'ottimizzazione di un carico di lavoro Spark per le prestazioni e la resilienza può essere difficile a causa del numero di opzioni di configurazione di Spark e della difficoltà di valutare l'impatto di queste opzioni su un carico di lavoro. L'ottimizzazione automatica di Serverless per Apache Spark offre un'alternativa alla configurazione manuale del workload applicando automaticamente le impostazioni di configurazione di Spark a un workload Spark ricorrente in base alle best practice di ottimizzazione di Spark e a un'analisi delle esecuzioni del workload (chiamate "coorti").
Registrati per l'ottimizzazione automatica di Serverless per Apache Spark
Per registrarti e accedere alla release di anteprima dell'ottimizzazione automatica di Serverless per Apache Spark descritta in questa pagina, compila e invia il modulo di registrazione Richiesta di accesso all'anteprima di Dataproc. Una volta approvato il modulo, i progetti elencati al suo interno hanno accesso alle funzionalità di anteprima.
Vantaggi
L'ottimizzazione automatica di Serverless per Apache Spark può offrire i seguenti vantaggi:
- Ottimizzazione automatica: ottimizza automaticamente le configurazioni batch e Spark di Serverless per Apache Spark inefficienti, il che può velocizzare i tempi di esecuzione dei job.
- Apprendimento storico: impara dalle esecuzioni ricorrenti per applicare consigli personalizzati per il tuo carico di lavoro.
Coorti di ottimizzazione automatica
L'ottimizzazione automatica viene applicata alle esecuzioni ricorrenti (coorti) di un carico di lavoro batch.
Il nome della coorte specificato quando invii un carico di lavoro batch lo identifica come una delle esecuzioni successive del carico di lavoro ricorrente.
L'ottimizzazione automatica viene applicata ai cohorti di carichi di lavoro batch nel seguente modo:
L'ottimizzazione automatica viene calcolata e applicata alla seconda e alle successive coorti di un carico di lavoro. L'ottimizzazione automatica non viene applicata alla prima esecuzione di un workload ricorrente perché l'ottimizzazione automatica di Serverless per Apache Spark utilizza la cronologia dei workload per l'ottimizzazione.
L'ottimizzazione automatica non viene applicata retroattivamente ai workload in esecuzione, ma solo a quelli appena inviati.
La regolazione automatica apprende e migliora nel tempo analizzando le statistiche del gruppo. Per consentire al sistema di raccogliere dati sufficienti, ti consigliamo di mantenere l'ottimizzazione automatica attivata per almeno cinque esecuzioni.
Nomi delle coorti: una prassi consigliata è utilizzare nomi delle coorti che aiutino a identificare il tipo di workload ricorrente. Ad esempio, potresti utilizzare
daily_sales_aggregation come nome del gruppo per un carico di lavoro pianificato che esegue
un'attività di aggregazione delle vendite giornaliere.
Scenari di ottimizzazione automatica
Se applicabile, la regolazione automatica seleziona ed esegue automaticamente i seguenti
scenarios o obiettivi per ottimizzare un carico di lavoro batch:
- Scalabilità: impostazioni di configurazione della scalabilità automatica di Spark.
- Ottimizzazione dei join: impostazioni di configurazione di Spark per ottimizzare le prestazioni dei join di trasmissione SQL.
Utilizzare l'ottimizzazione automatica di Serverless per Apache Spark
Puoi attivare la regolazione automatica di Serverless per Apache Spark su un workload batch utilizzando la console Google Cloud , Google Cloud CLI, l'API Dataproc o le librerie client Cloud.
Console
Per attivare l'ottimizzazione automatica di Serverless per Apache Spark a ogni invio di un workload batch ricorrente, segui questi passaggi:
Nella console Google Cloud , vai alla pagina Batch di Dataproc.
Per creare un workload batch, fai clic su Crea.
Nella sezione Ottimizzazione automatica:
Attiva il pulsante Abilita per attivare l'ottimizzazione automatica per il workload Spark.
Coorte:inserisci il nome della coorte, che identifica il batch come parte di una serie di carichi di lavoro ricorrenti. L'ottimizzazione automatica viene applicata al secondo e ai successivi carichi di lavoro inviati con questo nome di coorte. Ad esempio, specifica
daily_sales_aggregationcome nome del coorte per un carico di lavoro batch pianificato che esegue un'attività di aggregazione delle vendite giornaliera.
Compila le altre sezioni della pagina Crea batch in base alle tue esigenze, poi fai clic su Invia. Per saperne di più su questi campi, consulta Inviare un batch di workload.
gcloud
Per abilitare l'ottimizzazione automatica di Serverless per Apache Spark a ogni invio di un workload batch ricorrente, esegui questo comando gcloud CLI
gcloud dataproc batches submit
localmente in una finestra del terminale o in
Cloud Shell.
gcloud dataproc batches submit COMMAND \ --region=REGION \ --cohort=COHORT \ --autotuning-scenarios=auto \ other arguments ...
Sostituisci quanto segue:
- COMMAND: il tipo di workload Spark, ad esempio
Spark,PySpark,Spark-SqloSpark-R. - REGION: la regione in cui verrà eseguito il carico di lavoro batch.
- COHORT: il nome della coorte, che
identifica il batch come parte di una serie di carichi di lavoro ricorrenti.
L'ottimizzazione automatica viene applicata al secondo e ai successivi carichi di lavoro inviati con questo nome di coorte. Ad esempio, specifica
daily_sales_aggregationcome nome del coorte per un carico di lavoro batch pianificato che esegue un'attività di aggregazione delle vendite giornaliera. --autotuning-scenarios=auto: attiva l'ottimizzazione automatica.
API
Per attivare l'ottimizzazione automatica di Serverless per Apache Spark a ogni invio di un workload batch ricorrente, invia una richiesta batches.create che includa i seguenti campi:
RuntimeConfig.cohort: il nome della coorte, che identifica il batch come parte di una serie di carichi di lavoro ricorrenti. L'ottimizzazione automatica viene applicata al secondo e ai successivi carichi di lavoro inviati con questo nome di coorte. Ad esempio, specificadaily_sales_aggregationcome nome coorte per un carico di lavoro batch pianificato che esegue un'attività di aggregazione delle vendite giornaliere.AutotuningConfig.scenarios: specificaAUTOper abilitare l'ottimizzazione automatica sul workload batch Spark.
Esempio:
...
runtimeConfig:
cohort: COHORT_NAME
autotuningConfig:
scenarios:
- AUTO
...
Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di Serverless per Apache Spark per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Serverless per Apache Spark Java.
Per eseguire l'autenticazione in Serverless per Apache Spark, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configura l'autenticazione per un ambiente di sviluppo locale.
Per attivare l'ottimizzazione automatica di Serverless per Apache Spark a ogni invio di un workload batch ricorrente, chiama BatchControllerClient.createBatch con un CreateBatchRequest che includa i seguenti campi:
Batch.RuntimeConfig.cohort: il nome della coorte, che identifica il batch come parte di una serie di carichi di lavoro ricorrenti. L'ottimizzazione automatica viene applicata al secondo e ai successivi carichi di lavoro inviati con questo nome di coorte. Ad esempio, potresti specificaredaily_sales_aggregationcome nome della coorte per un carico di lavoro batch pianificato che esegue un'attività di aggregazione delle vendite giornaliera.Batch.RuntimeConfig.AutotuningConfig.scenarios: specificaAUTOper abilitare l'ottimizzazione automatica del workload batch Spark.
Esempio:
...
Batch batch =
Batch.newBuilder()
.setRuntimeConfig(
RuntimeConfig.newBuilder()
.setCohort("daily_sales_aggregation")
.setAutotuningConfig(
AutotuningConfig.newBuilder()
.addScenarios(Scenario.AUTO))
...
.build();
batchControllerClient.createBatch(
CreateBatchRequest.newBuilder()
.setParent(parent)
.setBatchId(batchId)
.setBatch(batch)
.build());
...
Per utilizzare l'API, devi utilizzare la versione google-cloud-dataproc della libreria client
4.43.0 o successive. Puoi utilizzare una delle seguenti configurazioni per aggiungere la
libreria al tuo progetto.
Maven
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-dataproc</artifactId>
<version>4.43.0</version>
</dependency>
</dependencies>
Gradle
implementation 'com.google.cloud:google-cloud-dataproc:4.43.0'
SBT
libraryDependencies += "com.google.cloud" % "google-cloud-dataproc" % "4.43.0"
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida di Serverless per Apache Spark per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Serverless per Apache Spark Python.
Per eseguire l'autenticazione in Serverless per Apache Spark, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configura l'autenticazione per un ambiente di sviluppo locale.
Per attivare l'ottimizzazione automatica di Serverless per Apache Spark a ogni invio di un workload batch ricorrente, chiama BatchControllerClient.create_batch con un Batch che includa i seguenti campi:
batch.runtime_config.cohort: il nome della coorte, che identifica il batch come parte di una serie di carichi di lavoro ricorrenti. L'ottimizzazione automatica viene applicata al secondo e ai successivi carichi di lavoro inviati con questo nome di coorte. Ad esempio, potresti specificaredaily_sales_aggregationcome nome coorte per un carico di lavoro batch pianificato che esegue un'attività di aggregazione delle vendite giornaliere.batch.runtime_config.autotuning_config.scenarios: specificaAUTOper abilitare l'ottimizzazione automatica sul workload batch Spark.
Esempio:
# Create a client
client = dataproc_v1.BatchControllerClient()
# Initialize request argument(s)
batch = dataproc_v1.Batch()
batch.pyspark_batch.main_python_file_uri = "gs://bucket/run_tpcds.py"
batch.runtime_config.cohort = "daily_sales_aggregation"
batch.runtime_config.autotuning_config.scenarios = [
Scenario.AUTO
]
request = dataproc_v1.CreateBatchRequest(
parent="parent_value",
batch=batch,
)
# Make the request
operation = client.create_batch(request=request)
Per utilizzare l'API, devi utilizzare la versione 5.10.1 o successive della libreria client google-cloud-dataproc. Per aggiungerlo al tuo progetto, puoi utilizzare il seguente requisito:
google-cloud-dataproc>=5.10.1
Airflow
Anziché inviare manualmente ogni coorte di batch con ottimizzazione automatica, puoi utilizzare Airflow per pianificare l'invio di ogni workload batch ricorrente. Per farlo, chiama BatchControllerClient.create_batch con un Batch che include i seguenti campi:
batch.runtime_config.cohort: il nome della coorte, che identifica il batch come parte di una serie di carichi di lavoro ricorrenti. L'ottimizzazione automatica viene applicata al secondo e ai successivi carichi di lavoro inviati con questo nome di coorte. Ad esempio, potresti specificaredaily_sales_aggregationcome nome del coorte per un carico di lavoro batch pianificato che esegue un'attività di aggregazione delle vendite giornaliera.batch.runtime_config.autotuning_config.scenarios: specificaAUTOper abilitare l'ottimizzazione automatica del workload batch Spark.
Esempio:
create_batch = DataprocCreateBatchOperator(
task_id="batch_create",
batch={
"pyspark_batch": {
"main_python_file_uri": PYTHON_FILE_LOCATION,
},
"environment_config": {
"peripherals_config": {
"spark_history_server_config": {
"dataproc_cluster": PHS_CLUSTER_PATH,
},
},
},
"runtime_config": {
"cohort": "daily_sales_aggregation",
"autotuning_config": {
"scenarios": [
Scenario.AUTO,
]
}
},
},
batch_id="BATCH_ID",
)
Per utilizzare l'API, devi utilizzare la versione 5.10.1 o successive della libreria client google-cloud-dataproc. Puoi utilizzare il seguente requisito dell'ambiente Airflow:
google-cloud-dataproc>=5.10.1
Per aggiornare il pacchetto in Cloud Composer, vedi Installare le dipendenze Python per Cloud Composer .
Visualizzare le modifiche alla regolazione automatica
Per visualizzare le modifiche apportate alla scalabilità automatica di Serverless per Apache Spark a un workload batch,
esegui il comando
gcloud dataproc batches describe.
Esempio: l'output di gcloud dataproc batches describe è simile al seguente:
...
runtimeInfo:
propertiesInfo:
# Properties set by autotuning.
autotuningProperties:
spark.dataproc.sql.broadcastJoin.hints:
annotation: Converted 1 Sort-Merge Joins to Broadcast Hash Join
value: v2;Inner,<hint>
spark.dynamicAllocation.initialExecutors:
annotation: Adjusted Initial executors based on stages submitted in first
2 minutes to 9
overriddenValue: '2'
value: '9'
spark.dynamicAllocation.maxExecutors:
annotation: Tuned Max executors to 11
overriddenValue: '5'
value: '11'
spark.dynamicAllocation.minExecutors:
annotation: Changed Min executors to 9
overriddenValue: '2'
value: '9'
...
Puoi visualizzare le ultime modifiche di ottimizzazione automatica applicate a un carico di lavoro in esecuzione, completato o non riuscito nella pagina Dettagli batch della console Google Cloud , nella scheda Riepilogo.

Prezzi
L'ottimizzazione automatica di Serverless per Apache Spark è offerta durante l'anteprima privata senza costi aggiuntivi. Vengono applicati i prezzi di Serverless per Apache Spark.