Questo documento fornisce informazioni sulla scalabilità automatica di Dataproc Serverless per Spark. Quando invii il carico di lavoro Spark, Dataproc Serverless per Spark può scalare dinamicamente le risorse del carico di lavoro, ad esempio il numero di esecutori, per eseguirlo in modo efficiente. La scalabilità automatica di Dataproc Serverless è 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 di Dataproc Serverless versione 2
La versione 2 (V2) della scalabilità automatica di Dataproc Serverless aggiunge funzionalità e miglioramenti alla versione 1 (V1) predefinita per aiutarti a gestire i carichi di lavoro Dataproc Serverless, migliorare le prestazioni dei carichi di lavoro e risparmiare sui costi:
- Riduzione del numero di nodi asincrona: la versione 2 della scalabilità automatica sostituisce il ridimensionamento sincrono della versione 1 con il ridimensionamento asincrono. Utilizzando lo scale down asincrono, Dataproc Serverless riduce le risorse del carico di lavoro senza attendere che tutti i nodi terminino la migrazione dello shuffle. Ciò significa che i nodi long-tail che fare lo scale down lentamente la scala non bloccano l'upscaling.
- Selezione dei nodi per lo scale down intelligente: la versione 2 della scalabilità automatica sostituisce la selezione dei nodi casuale della versione 1 con un algoritmo intelligente che identifica i nodi migliori da fare lo scale down prima. Questo algoritmo prende in considerazione fattori come le dimensioni dei dati per l'ordinamento casuale del nodo e il tempo di inattività.
- Comportamento configurabile di ritiro graduale e migrazione con riordinamento di Spark: l'autoscaling 2.0 ti consente di utilizzare le proprietà Spark standard per configurare il ritiro graduale e la migrazione con riordinamento di Spark. Questa funzionalità può aiutarti a mantenere la compatibilità della migrazione con le proprietà Spark personalizzate.
Funzionalità di scalabilità automatica di Dataproc Serverless
Funzionalità | Scalabilità automatica Dataproc Serverless versione 1 | Scalabilità automatica Dataproc Serverless 2.0 |
Riduzione del numero di nodi | Sincrona | Asincrona |
Selezione dei nodi per il ridimensionamento verso il basso | Casuale | Soluzione intelligente |
Rimozione controllata e migrazione con riordinamento di Spark | Non configurabile | Configurabile |
Proprietà di allocazione dinamica di Spark
La tabella seguente elenca le proprietà di allocazione dinamica di Spark che puoi impostare quando invii un carico di lavoro batch per controllare la scalabilità automatica (consulta come impostare le proprietà di Spark).
Proprietà | Descrizione | Predefinito |
---|---|---|
spark.dataproc.scaling.version |
La versione della scalabilità automatica di Dataproc Serverless Spark. Specifica la versione 1 o 2 (consulta Scalabilità automatica di Dataproc Serverless 2.0). |
1 |
spark.dynamicAllocation.enabled |
Se utilizzare l'allocazione dinamica delle risorse, che aumenta e diminuisce il numero di esecutori in base al carico di lavoro.
Se imposti il valore su false , la scalabilità automatica viene disabilitata 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 workload, 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 ridurre il carico di lavoro.
Il valore minimo è 2 . |
2 |
spark.dynamicAllocation.maxExecutors |
Il numero massimo di esecutori fino al quale scalare il carico di lavoro.
Il valore massimo è 2000 . |
1000 |
spark.dynamicAllocation.executorAllocationRatio |
Personalizza l'aumento della scalabilità del carico di lavoro Spark. Accetta un valore da
0 a 1 . Un valore di 1.0
offre la massima capacità di scalabilità e consente di ottenere il parallelismo massimo. Un valore di 0.5 imposta la capacità di scalabilità e il parallelismo su metà del valore massimo. |
0.3 |
spark.reducer.fetchMigratedShuffle.enabled |
Se impostato su true , consente di recuperare la posizione dell'output della miscelazione dal driver Spark dopo che un recupero non è riuscito da un executor ritirato a causa dell'allocazione dinamica di Spark. In questo modo si riducono
gli errori ExecutorDeadException causati dalla migrazione dei blocchi di smistamento
dagli esecutori dismessi a quelli attivi e si riducono le ripetizioni delle fasi
causate da errori FetchFailedException (vedi
FetchFailedException causato da
ExecutorDeadException).
Questa proprietà è disponibile nelle versioni del runtime Spark
1.1.12 e successive e 2.0.20 e successive di Dataproc Serverless. |
false |
Metriche di allocazione dinamica di Spark
I carichi di lavoro batch di Spark generano le seguenti metriche relative all'allocazione dinamica delle risorse di Spark (per ulteriori informazioni sulle metriche di Spark, consulta Monitoraggio e strumenti).
Metrica | Descrizione |
---|---|
maximum-needed |
Il numero massimo di esecutori necessari in base al carico attuale per soddisfare tutte le attività in esecuzione e in attesa. |
running |
Il numero di esecutori in esecuzione che eseguono attività. |
Problemi e soluzioni relativi all'allocazione dinamica di Spark
FetchFailedException causato da ExecutorDeadException
Causa: quando l'allocazione dinamica di Spark riduce le dimensioni di un'esecuzione, viene eseguita la migrazione del file di smistamento agli eseguitori attivi. Tuttavia, poiché l'attività di riduzione di Spark su un'attività di esecuzione recupera l'output di miscelazione dalla posizione impostata dal driver Spark all'avvio dell'attività di riduzione, se viene eseguita la migrazione di un file di miscelazione, il riduttore può continuare a tentare di recuperare l'output di miscelazione da un'attività di esecuzione dismessa, causando errori
ExecutorDeadException
eFetchFailedException
.Soluzione: attiva il recupero della posizione di smistamento impostando
spark.reducer.fetchMigratedShuffle.enabled
sutrue
quando esegui il tuo carico di lavoro batch Dataproc Serverless per Spark (vedi Impostare le proprietà del carico di lavoro batch Spark). Quando questa proprietà è abilitata, il compito del riduttore recupera nuovamente la posizione dell'output della miscelazione dal driver dopo che un recupero da un'esecuzione dismessa non è riuscito.