Dataproc Serverless per scalabilità automatica di Spark

Quando invii il tuo carico di lavoro Spark, Dataproc Serverless per Spark è in grado di scalare dinamicamente le risorse del carico di lavoro, ad esempio il numero di esecutori, per eseguire il carico di lavoro in modo efficiente. La scalabilità automatica serverless di Dataproc è il comportamento predefinito e utilizza l'allocazione dinamica delle risorse di Spark per determinare se, come e quando scalare il carico di lavoro.

Scalabilità automatica serverless V2 di Dataproc

La versione 2 (V2) della scalabilità automatica serverless di Dataproc aggiunge funzionalità e miglioramenti alla versione predefinita 1 (V1) per aiutarti a gestire i carichi di lavoro Dataproc serverless, migliorare le prestazioni dei carichi di lavoro e risparmiare sui costi:

  • Downscaling asincrono dei nodi: la scalabilità automatica V2 sostituisce il downscaling sincrono di V1 con il downscaling asincrono. Grazie al downscaling asincrono, Dataproc serverless esegue il downgrade delle risorse dei carichi di lavoro senza attendere che tutti i nodi terminino la migrazione dello shuffling. Ciò significa che i nodi long-tail, che fare lo scale down lentamente, non bloccano l'upscaling.
  • Selezione intelligente dei nodi di scale down: la scalabilità automatica V2 sostituisce la selezione casuale dei nodi di V1 con un algoritmo intelligente che identifica i nodi migliori da fare per fare lo scale down per primi. Questo algoritmo considera fattori come la dimensione dei dati di shuffling del nodo e il tempo di inattività.
  • Comportamento flessibile per il ritiro tramite cluster e la migrazione shuffling di Spark: la scalabilità automatica V2 consente di utilizzare le proprietà standard di Spark per configurare il ritiro controllato da Spark e la migrazione dello shuffling. Questa funzionalità può aiutarti a mantenere la compatibilità della migrazione con le tue proprietà Spark personalizzate.

Funzionalità di scalabilità automatica di Dataproc Serverless

Selezione delle Scalabilità automatica serverless V1 di Dataproc Scalabilità automatica serverless V2
Scalabilità dei nodi Sincrona Asincrona
Selezione dei nodi per il downscal Casuale Soluzione intelligente
Avvia rimozione controllata e la migrazione shuffling Non configurabile Configurabile

Proprietà di allocazione dinamica Spark

La seguente tabella elenca le proprietà di allocazione dinamica Spark che puoi impostare quando invii un carico di lavoro batch per controllare la scalabilità automatica (vedi come impostare le proprietà Spark).

Proprietà Descrizione Valore predefinito
spark.dataproc.scaling.version La versione della scalabilità automatica di Spark serverless Dataproc. Specifica la versione 1 o 2 (vedi Scalabilità automatica serverless V2 di Dataproc). 1
spark.dynamicAllocation.enabled Indica se utilizzare l'allocazione dinamica delle risorse, che fa lo scale up e lo scale down del numero di esecutori in base al carico di lavoro. L'impostazione del valore su false disabilita la scalabilità automatica per il carico di lavoro. Valore predefinito: true. true
spark.dynamicAllocation.initialExecutors Il numero iniziale di esecutori allocati al carico di lavoro. Dopo l'avvio del carico di lavoro, la scalabilità automatica potrebbe modificare il numero di esecutori attivi. Il valore minimo è 2; il valore massimo è 500. 2
spark.dynamicAllocation.minExecutors Il numero minimo di esecutori a cui fare lo scale down del carico di lavoro. Il valore minimo è 2. 2
spark.dynamicAllocation.maxExecutors Il numero massimo di esecutori a cui fare lo scale up del carico di lavoro. Il valore massimo è 2000. 1000
spark.dynamicAllocation.executorAllocationRatio Personalizza lo scale up del carico di lavoro Spark. Accetta un valore compreso tra 0 e 1. Un valore 1.0 fornisce la massima capacità di scale up e consente di ottenere il massimo parallelismo. Un valore 0.5 imposta la capacità di scale up e il parallelismo a metà del valore massimo. 0.3
spark.reducer.fetchMigratedShuffle.enabled Se impostato su true, consente di recuperare la posizione di output dello shuffling dal driver Spark dopo che un recupero non riesce da un esecutore dismesso a causa dell'allocazione dinamica Spark. Questo riduce gli errori ExecutorDeadException causati dalla migrazione dei blocchi shuffle da esecutori dismessi a esecutori attivi e riduce i nuovi tentativi di fase causati da FetchFailedException errori (consulta la pagina FetchFailedException causata da ExecutorDeadException). Questa proprietà è disponibile in Dataproc Serverless, versioni runtime Spark 1.1.12 e successive e 2.0.20 e successive. false

Metriche di allocazione dinamica Spark

I carichi di lavoro batch Spark generano le metriche elencate di seguito relative all'allocazione di risorse dinamiche Spark (per ulteriori informazioni sulle metriche Spark, consulta Monitoraggio e strumentazione).

Metrica Descrizione
maximum-needed Il numero massimo di esecutori necessari sotto il carico attuale per soddisfare tutte le attività in esecuzione e in sospeso.
running Il numero di esecutori in esecuzione che eseguono attività.

Problemi e soluzioni di allocazione dinamica di Spark

  • FetchFailedException causata da ExecutorDeadException

    Causa: quando l'allocazione dinamica Spark fa lo scale down di un esecutore, il file di shuffle viene migrato a esecutori live. Tuttavia, poiché l'attività di riduttore Spark su un esecutore recupera l'output di shuffling dalla posizione impostata dal driver Spark quando è stata avviata l'attività del riduttore, se viene eseguita la migrazione di un file di shuffling, il riduttore può continuare a tentare di recuperare l'output di shuffling da un esecutore dismesso, causando errori ExecutorDeadException e FetchFailedException.

    Soluzione: abilita il recupero della località di shuffling impostando spark.reducer.fetchMigratedShuffle.enabled su true quando esegui il carico di lavoro batch di Dataproc Serverless per Spark (consulta Impostazione delle proprietà del carico di lavoro batch di Spark). Se questa proprietà è abilitata, l'attività di riduttore recupera nuovamente la posizione di output shuffle dal driver dopo che un recupero da un esecutore dismesso ha esito negativo.