Proprietà Spark

Questo documento descrive le proprietà di Spark e come impostarle. Managed Service per Apache Spark utilizza le proprietà di Spark per determinare le risorse di calcolo, memoria e disco da allocare al carico di lavoro batch. Queste impostazioni delle proprietà possono influire sul consumo della quota e sul costo del carico di lavoro. Per ulteriori informazioni, consulta Quote di Managed Service per Apache Spark e Prezzi di Managed Service per Apache Spark.

Impostare le proprietà del carico di lavoro batch di Spark

Puoi specificare le proprietà di Spark quando invii un carico di lavoro batch di Spark di Managed Service per Apache Spark utilizzando la Google Cloud console, gcloud CLI o l'API Dataproc.

Console

  1. Nella Google Cloud console, vai alla pagina Managed Service per Apache Spark: crea batch.

    Vai a Managed Service per Apache Spark: crea batch

  2. Nella sezione Proprietà, fai clic su Aggiungi proprietà.

  3. Inserisci la Key (nome) e il Value di una proprietà di Spark supportata.

gcloud

Di seguito è riportato un esempio di invio batch di gcloud CLI. Più proprietà sono separate da virgole.

gcloud dataproc batches submit spark \
    --properties=spark.checkpoint.compress=true,spark.driver.cores=8  \
    --region=REGION \
    other args ...

API

Imposta RuntimeConfig.properties con le proprietà di Spark supportate nell'ambito di una batches.create.

Proprietà di Spark supportate

Managed Service per Apache Spark supporta la maggior parte delle proprietà di Spark, ma non supporta le proprietà di Spark correlate a YARN e shuffle, come spark.master=yarn e spark.shuffle.service.enabled. Se il codice dell'applicazione Spark imposta una proprietà YARN o shuffle, l'applicazione non verrà eseguita.

Proprietà dell'ambiente di runtime

Managed Service per Apache Spark supporta le seguenti proprietà di Spark personalizzate per la configurazione dell'ambiente di runtime:

Proprietà Descrizione
spark.dataproc.driverEnv.ENVIRONMENT_VARIABLE_NAME Aggiungi ENVIRONMENT_VARIABLE_NAME al processo del driver. Puoi specificare più variabili di ambiente.
spark.executorEnv.ENVIRONMENT_VARIABLE_NAME Aggiungi ENVIRONMENT_VARIABLE_NAME al processo dell'esecutore. Puoi specificare più variabili di ambiente.

Proprietà del livello

Proprietà Descrizione Predefinito
dataproc.tier Il livello su cui viene eseguito un carico di lavoro batch, standard o premium (vedi Livelli di Managed Service per Apache Spark). Le sessioni interattive vengono sempre eseguite al livello premium dataproc.tier.
  • Se imposti questa proprietà del livello batch su standard, le proprietà del livello di runtime e risorse di Managed Service per Apache Spark vengono impostate sul livello standard (vedi Proprietà di allocazione delle risorse).
  • Se imposti questa proprietà del livello batch su premium, spark.dataproc.engine viene impostato su lightningEngine e spark.dataproc.driver.compute.tier e spark.dataproc.executor.compute.tier vengono impostati su premium. Puoi sostituire la maggior parte delle impostazioni del livello batch impostate automaticamente, ma le impostazioni del livello di calcolo impostate automaticamente non possono essere sostituite per i batch che utilizzano runtime precedenti a 3.0 (vedi Proprietà di allocazione delle risorse).
standard

Proprietà del motore e del runtime

Proprietà Descrizione Predefinito
spark.dataproc.engine Il motore da utilizzare per eseguire il carico di lavoro batch o la sessione interattiva: lightningEngine (vedi Lightning Engine) o il motore default.
  • Carichi di lavoro batch: se selezioni la proprietà standard dataproc.tier per il carico di lavoro, questa proprietà viene impostata automaticamente su default e non può essere sostituita. Se selezioni dataproc.tier premium per il carico di lavoro, questa proprietà viene impostata automaticamente su lightningEngine, ma puoi modificare l'impostazione su default se necessario.
  • Sessioni interattive: questa impostazione viene impostata automaticamente su default, ma puoi modificarla su lightningEngine. Tieni presente che le sessioni interattive vengono sempre eseguite al livello premium.
  • Batch (livello standard): default
  • Batch (livello premium): lightningEngine
  • Sessioni: default
spark.dataproc.lightningEngine.runtime Il runtime da utilizzare quando Lightning Engine è selezionato per un carico di lavoro batch o una sessione interattiva: default o native (esecuzione di query native). default

Proprietà di allocazione delle risorse

Managed Service per Apache Spark supporta le seguenti proprietà di Spark per la configurazione dell'allocazione delle risorse:

Proprietà Descrizione Predefinito Esempi
spark.driver.cores Il numero di core (vCPU) da allocare al driver Spark. Valori validi: 4, 8, 16. 4
spark.driver.memory

La quantità di memoria da allocare al processo del driver Spark, specificata nel formato della stringa di memoria JVM con un suffisso di unità di dimensione ("m", "g" o "t").

La memoria totale del driver per core del driver, incluso l'overhead della memoria del driver, che deve essere compresa tra 1024m e 7424m per il livello di calcolo Standard (24576m per il livello di calcolo Premium). Ad esempio, se spark.driver.cores = 4, allora 4096m <= spark.driver.memory + spark.driver.memoryOverhead <= 29696m.

512m, 2g
spark.driver.memoryOverhead

La quantità di memoria JVM aggiuntiva da allocare al processo del driver Spark, specificata nel formato della stringa di memoria JVM con un suffisso di unità di dimensione ("m", "g" o "t").

Si tratta di memoria non heap associata a overhead JVM, stringhe interne e altri overhead nativi e include la memoria utilizzata da altri processi del driver, come i processi del driver PySpark e la memoria utilizzata da altri processi non driver in esecuzione nel container. La dimensione massima della memoria del container in cui viene eseguito il driver è determinata dalla somma di spark.driver.memoryOverhead e spark.driver.memory.

La memoria totale del driver per core del driver, incluso l'overhead della memoria del driver, deve essere compresa tra 1024m e 7424m per il livello di calcolo Standard (24576m per il livello di calcolo Premium). Ad esempio, se spark.driver.cores = 4, allora 4096m <= spark.driver.memory + spark.driver.memoryOverhead <= 29696m.

10% della memoria del driver, ad eccezione dei carichi di lavoro batch PySpark, che per impostazione predefinita sono il 40% della memoria del driver 512m, 2g
spark.dataproc.driver.compute.tier Il livello di calcolo da utilizzare sul driver. Il livello di calcolo Premium offre prestazioni per core più elevate, ma viene fatturato a una tariffa più alta. standard standard, premium
spark.dataproc.driver.disk.size La quantità di spazio su disco allocato al driver, specificata con un suffisso di unità di dimensione ("k", "m", "g" o "t"). Deve essere almeno 250GiB. Se sul driver è selezionato il livello di disco Premium, le dimensioni valide sono 375g, 750g, 1500g, 3000g, 6000g o 9000g. Se sono selezionati il livello di disco Premium e 16 core del driver, la dimensione minima del disco è 750g. 100GiB per core 1024g, 2t
spark.dataproc.driver.disk.tier Il livello di disco da utilizzare per l'archiviazione locale e shuffle sul driver. Il livello di disco Premium offre prestazioni migliori in termini di IOPS e velocità effettiva, ma viene fatturato a una tariffa più alta. Se sul driver è selezionato il livello di disco Premium, deve essere selezionato anche il livello di calcolo Premium utilizzando spark.dataproc.driver.compute.tier=premium, e la quantità di spazio su disco deve essere specificata utilizzando spark.dataproc.executor.disk.size.

Se è selezionato il livello di disco Premium, il driver alloca 50 GiB di spazio su disco aggiuntivo per l'archiviazione di sistema, che non è utilizzabile dalle applicazioni utente.

standard standard, premium
spark.executor.cores Il numero di core (vCPU) da allocare a ogni esecutore Spark. Valori validi: 4, 8, 16. 4
spark.executor.memory

La quantità di memoria da allocare a ogni processo dell'esecutore Spark, specificata nel formato della stringa di memoria JVM con un suffisso di unità di dimensione ("m", "g" o "t").

La memoria totale dell'esecutore per core dell'esecutore, incluso l'overhead della memoria dell'esecutore, deve essere compresa tra 1024m e 7424m per il livello di calcolo Standard (24576m per il livello di calcolo Premium). Ad esempio, se spark.executor.cores = 4, allora 4096m <= spark.executor.memory + spark.executor.memoryOverhead <= 29696m.

512m, 2g
spark.executor.memoryOverhead

La quantità di memoria JVM aggiuntiva da allocare al processo dell'esecutore Spark specificata nel formato della stringa di memoria JVM con un suffisso di unità di dimensione ("m", "g" o "t").

Si tratta di memoria non heap utilizzata per overhead JVM, stringhe interne, e altri overhead nativi e include la memoria dell'esecutore PySpark e la memoria utilizzata da altri processi non esecutori in esecuzione nel container. La dimensione massima della memoria del container in cui viene eseguito l'esecutore è determinata dalla somma di spark.executor.memoryOverhead e spark.executor.memory.

La memoria totale dell'esecutore per core dell'esecutore, incluso l'overhead della memoria dell'esecutore, deve essere compresa tra 1024m e 7424m per il livello di calcolo Standard (24576m per il livello di calcolo Premium). Ad esempio, se spark.executor.cores = 4, allora 4096m <= spark.executor.memory + spark.executor.memoryOverhead <= 29696m.

10% della memoria dell'esecutore, ad eccezione dei carichi di lavoro batch PySpark, che per impostazione predefinita sono il 40% della memoria dell'esecutore 512m, 2g
spark.dataproc.executor.compute.tier Il livello di calcolo da utilizzare sugli esecutori. Il livello di calcolo Premium offre prestazioni per core più elevate, ma viene fatturato a una tariffa più alta. standard standard, premium
spark.dataproc.executor.disk.size La quantità di spazio su disco allocato a ogni esecutore, specificata con un suffisso di unità di dimensione ("k", "m", "g" o "t"). Lo spazio su disco dell'esecutore può essere utilizzato per i dati shuffle e per preparare dipendenze. Deve essere almeno 250GiB. Se sull'esecutore è selezionato il livello di disco Premium, le dimensioni valide sono 375g, 750g, 1500g, 3000g, 6000g o 9000g. Se sono selezionati il livello di disco Premium e 16 core dell'esecutore, la dimensione minima del disco è 750g. 100GiB per core 1024g, 2t
spark.dataproc.executor.disk.tier Il livello di disco da utilizzare per l'archiviazione locale e shuffle sugli esecutori. Il livello di disco Premium offre prestazioni migliori in termini di IOPS e velocità effettiva, ma viene fatturato a una tariffa più alta. Se sull'esecutore è selezionato il livello di disco Premium, deve essere selezionato anche il livello di calcolo Premium utilizzando spark.dataproc.executor.compute.tier=premium, e la quantità di spazio su disco deve essere specificata utilizzando spark.dataproc.executor.disk.size.

Se è selezionato il livello di disco Premium, a ogni esecutore vengono allocati 50 GiB di spazio su disco aggiuntivo per l'archiviazione di sistema, che non è utilizzabile dalle applicazioni utente.

standard standard, premium
spark.executor.instances Il numero iniziale di esecutori da allocare. Dopo l'avvio di un carico di lavoro batch starts, la scalabilità automatica può modificare il numero di esecutori attivi. Deve essere almeno 2 e al massimo 2000.

Proprietà di scalabilità automatica

Per un elenco delle proprietà di Spark che puoi utilizzare per configurare la scalabilità automatica di Managed Service per Apache Spark, consulta Proprietà di allocazione dinamica di Spark.

Proprietà di logging

Proprietà Descrizione Predefinito Esempi
spark.log.level Se impostato, sostituisce tutte le impostazioni di log definite dall'utente con l'effetto di una chiamata a SparkContext.setLogLevel() all'avvio di Spark. I livelli di log validi includono: ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE e WARN. INFO, DEBUG
spark.executor.syncLogLevel.enabled Se impostato su true, il livello di log applicato tramite il metodo SparkContext.setLogLevel() viene propagato a tutti gli esecutori. false true, false
spark.log.level.PackageName Se impostato, sostituisce tutte le impostazioni di log definite dall'utente con l'effetto di una chiamata a SparkContext.setLogLevel(PackageName, level) all'avvio di Spark. I livelli di log validi includono: ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE, e WARN. spark.log.level.org.apache.spark=error

Proprietà di pianificazione

Proprietà Descrizione Predefinito Esempi
spark.scheduler.excludeShuffleSkewExecutors Escludi gli esecutori con distorsione della mappa shuffle durante la pianificazione, il che può ridurre lunghi tempi di attesa per il recupero shuffle causati dalla distorsione della scrittura shuffle. false true
spark.scheduler.shuffleSkew.minFinishedTasks Numero minimo di attività di mappa shuffle completate su un esecutore da trattare come distorsione. 10 100
spark.scheduler.shuffleSkew.maxExecutorsNumber Numero massimo di esecutori da trattare come distorsione. Gli esecutori con distorsione vengono esclusi dal round di pianificazione corrente. 5 10
spark.scheduler.shuffleSkew.maxExecutorsRatio Rapporto massimo di esecutori totali da trattare come distorsione. Gli esecutori con distorsione vengono esclusi dalla pianificazione. 0.05 0.1
spark.scheduler.shuffleSkew.ratio Un multiplo delle attività di mappa shuffle completate in media su un esecutore da trattare come distorsione. 1.5 2.0

Altre proprietà

Proprietà Descrizione
dataproc.diagnostics.enabled Abilita questa proprietà per eseguire la diagnostica in caso di errore o annullamento di un carico di lavoro batch. Se la diagnostica è abilitata, il carico di lavoro batch continua a utilizzare le risorse di calcolo dopo il completamento del carico di lavoro fino al termine della diagnostica. Un URI che rimanda alla posizione del file tar di diagnostica è elencato nel Batch.RuntimeInfo.diagnosticOutputUri.
dataproc.gcsConnector.version Utilizza questa proprietà per eseguire l'upgrade a una versione del connettore Cloud Storage diversa dalla versione installata con la versione del runtime del carico di lavoro batch.
dataproc.sparkBqConnector.version Utilizza questa proprietà per eseguire l'upgrade a una versione del connettore Spark BigQuery diversa dalla versione installata con la versione del runtime del carico di lavoro batch (vedi Utilizzare il connettore BigQuery con Managed Service per Apache Spark).
dataproc.profiling.enabled Imposta questa proprietà su true per abilitare la profilazione per il carico di lavoro di Managed Service per Apache Spark.
dataproc.profiling.name Utilizza questa proprietà per impostare il nome utilizzato per creare un profilo nel servizio Profiler.
spark.jars Utilizza questa proprietà per impostare l'elenco di jar separati da virgole da includere nei classpath del driver e dell'esecutore
spark.archives Utilizza questa proprietà per impostare l'elenco di archivi separati da virgole da estrarre nella directory di lavoro di ogni esecutore. Sono supportati i formati .jar, .tar.gz, .tgz e .zip. Per le sessioni interattive serverless, aggiungi questa proprietà quando crei una sessione/un modello interattivo
dataproc.artifacts.remove Utilizza questa proprietà per rimuovere gli artefatti predefiniti installati su runtime di Managed Service per Apache Spark. Gli artefatti supportati sono spark-bigquery-connector, conscrypt, iceberg e delta-lake.