Questo documento mostra come attivare i miglioramenti delle prestazioni di Dataproc Spark per consentire ai job Dataproc Spark di elaborare più dati in meno tempo con costi ridotti.
I miglioramenti delle prestazioni di Dataproc Spark includono:
- Miglioramenti dell'ottimizzatore Spark:
- Regole dell'ottimizzatore scritte per piani Spark migliori
- Prestazioni migliorate del connettore BigQuery di Dataproc se utilizzato nei job Spark
- Miglioramenti dell'esecuzione di Spark:
- Miglioramenti del motore di esecuzione Spark
Altri miglioramenti delle prestazioni di Dataproc:consulta la memorizzazione nella cache dei cluster di Dataproc, che consente di ridurre il tempo dedicato all'accesso ai dati in Cloud Storage.
Puoi attivare i miglioramenti delle prestazioni di Spark su un cluster o su un job Spark:
I miglioramenti delle prestazioni di Spark abilitati su un cluster vengono applicati, per impostazione predefinita, a tutti i job Spark eseguiti sul cluster, indipendentemente dal fatto che siano inviati al servizio Dataproc o inviati direttamente al cluster.
I miglioramenti delle prestazioni di Spark possono anche essere attivati o disattivati in un job inviato al servizio Dataproc. Le impostazioni di miglioramento delle prestazioni di Spark applicate a un job sostituiscono eventuali impostazioni in conflitto impostate a livello di cluster solo per il job specificato.
Prezzi
I miglioramenti delle prestazioni di Spark non comportano costi aggiuntivi. Vengono applicati i prezzi standard di Dataproc su Compute Engine.
Considerazioni
I miglioramenti delle prestazioni di Spark modificano le proprietà di Spark, tra cui le seguenti:
spark.sql.shuffle.partitions
: i miglioramenti delle prestazioni di Spark impostano questa proprietà su1000
per i cluster con versione immagine2.2
. Questa impostazione può rallentare i job di piccole dimensioni.spark.dataproc.sql.catalog.file.index.stats.enabled
: Questa impostazione può causare condizioni di errore di memoria del driver se il conteggio delle partizioni Hive è elevato. La disattivazione di questa proprietà può risolvere la condizione di esaurimento della memoria.
Abilitare i miglioramenti durante la creazione del cluster
Puoi utilizzare la console Google Cloud , Google Cloud CLI e l'API Dataproc per attivare i miglioramenti delle prestazioni di Dataproc Spark quando crei un cluster Dataproc con versioni immagine 2.0.69+, 2.1.17+, 2.2.0+ e versioni immagine successive.
Console
- Nella console Google Cloud , apri la pagina Dataproc Crea un cluster.
- Nel modulo Crea cluster Dataproc, fai clic su Crea nella riga Cluster su Compute Engine.
- Nella pagina Crea un cluster Dataproc su Compute Engine,
fai clic sul riquadro Personalizza cluster, quindi scorri fino alla sezione
Proprietà del cluster.
- Per attivare i miglioramenti dell'ottimizzazione di Spark:
- Fai clic su + AGGIUNGI PROPRIETÀ.
- Seleziona spark nell'elenco Prefisso, poi aggiungi "spark.dataproc.enhanced.optimizer.enabled" nel campo Chiave e "true" nel campo Valore.
- Per attivare i miglioramenti dell'esecuzione di Spark:
- Fai clic su + AGGIUNGI PROPRIETÀ.
- Seleziona spark nell'elenco Prefisso, poi aggiungi "spark.dataproc.enhanced.execution.enabled" nel campo Chiave e "true" nel campo Valore.
- Per attivare i miglioramenti dell'ottimizzazione di Spark:
- Completa la compilazione o la conferma degli altri campi di creazione del cluster, poi fai clic su Crea.
gcloud
Esegui il comando gcloud dataproc clusters create localmente in una finestra del terminale o in Cloud Shell.
gcloud dataproc clusters create CLUSTER_NAME \ --project=PROJECT_ID \ --region=REGION \ --image-version=IMAGE \ --properties=PROPERTIES
Note:
- CLUSTER_NAME: il nome del cluster, che deve essere univoco all'interno di un progetto. Il nome deve iniziare con una lettera minuscola e può contenere fino a 51 lettere minuscole, numeri e trattini. Non può terminare con un trattino. Il nome di un cluster eliminato può essere riutilizzato.
- PROJECT_ID: Il progetto da associare al cluster.
- REGION: la
regione di Compute Engine
in cui si troverà il cluster, ad esempio
us-central1
.- Puoi aggiungere il flag facoltativo
--zone=ZONE
per specificare una zona all'interno della regione specificata, ad esempious-central1-a
. Se non specifichi una zona, la funzionalità di posizionamento automatico delle zone di Dataproc seleziona una zona con la regione specificata.
- Puoi aggiungere il flag facoltativo
- IMAGE: L'ottimizzatore Spark di Dataproc e i miglioramenti delle prestazioni di esecuzione sono disponibili nelle versioni immagine di Dataproc
2.0.69+
e2.1.17+
e nelle release successive. Se ometti questo flag, Dataproc selezionerà l'ultima versione secondaria dell'immagine Dataproc su Compute Engine predefinita per il cluster (vedi Versione immagine Dataproc predefinita). PROPERTIES:
- Per attivare i miglioramenti dell'ottimizzazione di Spark, specifica:
spark:spark.dataproc.enhanced.optimizer.enabled=true
- Per attivare i miglioramenti dell'esecuzione di Spark, specifica:
spark:spark.dataproc.enhanced.execution.enabled=true
- Per attivare i miglioramenti dell'ottimizzazione e dell'esecuzione di Spark, specifica:
spark:spark.dataproc.enhanced.optimizer.enabled=true,spark:spark.dataproc.enhanced.execution.enabled=true
API
Specifica quanto segue
SoftwareConfig.properties
come parte di una richiestaclusters.create
:- Per attivare i miglioramenti dell'ottimizzazione di Spark, specifica:
"spark:spark.dataproc.enhanced.optimizer.enabled": "true"
- Per attivare i miglioramenti dell'esecuzione di Spark, specifica:
"spark:spark.dataproc.enhanced.execution.enabled": "true"
- Per attivare i miglioramenti dell'ottimizzazione e dell'esecuzione di Spark, specifica:
"spark:spark.dataproc.enhanced.optimizer.enabled": "true","spark:spark.dataproc.enhanced.execution.enabled": "true"
Attivare o disattivare i miglioramenti al momento dell'invio del job
Puoi utilizzare la console Google Cloud , Google Cloud CLI e l'API Dataproc per attivare o disattivare i miglioramenti delle prestazioni di Spark in un job Spark inviato al servizio Dataproc.
Console
- Nella console Google Cloud , apri la pagina Job di Dataproc.
- Nella pagina Job, fai clic su Invia job, quindi scorri fino alla sezione Proprietà del job.
- Per attivare i miglioramenti dell'ottimizzazione di Spark:
- Fai clic su + AGGIUNGI PROPRIETÀ. Aggiungi "spark.dataproc.enhanced.optimizer.enabled" nel campo Chiave e "true" nel campo Valore.
- Per attivare i miglioramenti dell'esecuzione di Spark:
- Fai clic su + AGGIUNGI PROPRIETÀ.
- Aggiungi "spark.dataproc.enhanced.execution.enabled" nel campo Chiave e "true" nel campo Valore.
- Per attivare i miglioramenti dell'ottimizzazione di Spark:
- Completa la compilazione o la conferma degli altri campi di invio del job, poi fai clic su Invia.
gcloud
Esegui il comando gcloud dataproc jobs submit localmente in una finestra del terminale o in Cloud Shell.
gcloud dataproc jobs submit SPARK_JOB_TYPE \ --cluster=CLUSTER_NAME \ --region=REGION \ --properties=PROPERTIES
Note:
- SPARK_JOB_TYPE: specifica
spark
,pyspark
,spark-sql
ospark-r
. - CLUSTER_NAME: il nome del job in cui verrà eseguito.
- REGION: la regione in cui si trova il cluster.
PROPERTIES:
- Per attivare i miglioramenti dell'ottimizzazione di Spark, specifica:
spark.dataproc.enhanced.optimizer.enabled=true
- Per attivare i miglioramenti dell'esecuzione di Spark, specifica:
spark.dataproc.enhanced.execution.enabled=true
- Per attivare i miglioramenti dell'ottimizzazione e dell'esecuzione di Spark, specifica:
spark.dataproc.enhanced.optimizer.enabled=true,spark.dataproc.enhanced.execution.enabled=true
- SPARK_JOB_TYPE: specifica
API
Specifica i seguenti
properties
per un SparkJob, PySparkJob, SparkSqlJob o SparkRJob nell'ambito di una richiestajobs.submit
:- Per attivare i miglioramenti dell'ottimizzazione di Spark, specifica:
"spark.dataproc.enhanced.optimizer.enabled=true"
- Per attivare i miglioramenti dell'esecuzione di Spark, specifica:
"spark.dataproc.enhanced.execution.enabled=true"
- Per attivare i miglioramenti dell'ottimizzazione e dell'esecuzione di Spark, specifica:
"spark.dataproc.enhanced.execution.enabled=true,spark.dataproc.enhanced.optimizer.enabled=true"