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
eFetchFailedException
.Soluzione: abilita il recupero della località di shuffling impostando
spark.reducer.fetchMigratedShuffle.enabled
sutrue
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.