Questo documento fornisce informazioni sulla Google Cloud scalabilità automatica di Serverless per Apache Spark. Quando invii il carico di lavoro Spark, Serverless for Apache Spark può 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 di Serverless per Apache Spark è il comportamento predefinito e utilizza l'allocazione dinamica delle risorse di Spark per determinare se, come e quando scalare il workload.
Scalabilità automatica V2 di Serverless per Apache Spark
La versione 2 (V2) della scalabilità automatica di Serverless per Apache Spark aggiunge funzionalità e miglioramenti alla versione 1 (V1) predefinita per aiutarti a gestire i workload Serverless per Apache Spark, migliorare le prestazioni dei workload e ridurre i costi:
- Ridimensionamento asincrono dei nodi: la scalabilità automatica V2 sostituisce il ridimensionamento sincrono di V1 con il ridimensionamento asincrono. Utilizzando la riduzione del numero di istanze asincrona, Serverless per Apache Spark riduce le risorse del carico di lavoro senza attendere che tutti i nodi completino la migrazione shuffle. Ciò significa che i nodi long-tail che vengono fare lo scale down lentamente non bloccheranno l'upscaling.
- Selezione intelligente dei nodi per lo scale down: la scalabilità automatica V2 sostituisce la selezione casuale dei nodi della V1 con un algoritmo intelligente che identifica i nodi migliori per fare lo scale down. Questo algoritmo prende in considerazione fattori come le dimensioni dei dati di shuffling e il tempo di inattività del nodo.
- Comportamento configurabile di ritiro controllato e migrazione shuffle di Spark: Autoscaling V2 ti consente di utilizzare le proprietà Spark standard per configurare il ritiro controllato e la migrazione shuffle di Spark. Questa funzionalità può aiutarti a mantenere la compatibilità della migrazione con le proprietà Spark personalizzate.
Funzionalità di scalabilità automatica di Serverless per Apache Spark
Funzionalità | Scalabilità automatica di Serverless per Apache Spark V1 | Scalabilità automatica V2 di Serverless per Apache Spark |
Riduzione delle dimensioni dei nodi | Sincrona | Asincrona |
Selezione dei nodi per la riduzione delle risorse | Casuale | Soluzione intelligente |
Avvia la rimozione controllata di Spark e la migrazione shuffle | 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 workload batch per controllare la scalabilità automatica (vedi come impostare le proprietà di Spark).
Proprietà | Descrizione | Predefinito |
---|---|---|
spark.dataproc.scaling.version |
La versione di scalabilità automatica di Spark di Serverless per Apache Spark. Specifica
la versione 1 o 2 (vedi
Scalabilità automatica V2 di Serverless per Apache Spark). |
1 |
spark.dynamicAllocation.enabled |
Se utilizzare l'allocazione dinamica delle risorse, che aumenta e diminuisce il numero di executor in base al workload.
Se imposti il valore su false , la scalabilità automatica viene disattivata
per il carico di lavoro. Predefinito: true . |
true |
spark.dynamicAllocation.initialExecutors |
Il numero iniziale di esecutori allocati al workload. Dopo l'avvio del
carico di lavoro, la scalabilità automatica potrebbe modificare il numero di esecutori attivi.
Il valore minimo è 2 , il valore massimo è 2000 . |
2 |
spark.dynamicAllocation.minExecutors |
Il numero minimo di esecutori a cui ridurre il workload.
Il valore minimo è 2 . |
2 |
spark.dynamicAllocation.maxExecutors |
Il numero massimo di esecutori a cui scalare il carico di lavoro.
Il valore massimo è 2000 . |
1000 |
spark.dynamicAllocation.executorAllocationRatio |
Personalizza lo scale up del workload Spark. Accetta un valore compreso
tra 0 e 1 . Un valore di 1.0
offre la massima capacità di scalabilità e aiuta a ottenere il massimo
parallelismo. Un valore di 0.5 imposta la capacità di scalabilità e
il parallelismo a metà del valore massimo. |
0.3 |
spark.reducer.fetchMigratedShuffle.enabled |
Se impostato su true , consente di recuperare la posizione dell'output di shuffling dal driver Spark dopo che il recupero non è riuscito da un executor ritirato a causa dell'allocazione dinamica di Spark. Ciò riduce
gli errori ExecutorDeadException causati dalla migrazione dei blocchi di rimescolamento
dagli executor ritirati a quelli attivi e riduce i tentativi di ripristino dello stage
causati da errori FetchFailedException (vedi
FetchFailedException causata da
ExecutorDeadException).
Questa proprietà è disponibile in Serverless per Apache Spark
versioni del runtime Spark
1.1.12 e successive e 2.0.20 e successive. |
false |
Metriche di allocazione dinamica di Spark
I carichi di lavoro batch Spark generano le seguenti metriche relative all'allocazione dinamica delle risorse Spark (per ulteriori informazioni sulle metriche Spark, consulta Monitoraggio e strumentazione).
Metrica | Descrizione |
---|---|
maximum-needed |
Il numero massimo di esecutori necessari con il 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 causata da ExecutorDeadException
Causa: quando l'allocazione dinamica di Spark riduce le dimensioni di un executor, viene eseguita la migrazione del file di shuffle agli executor attivi. Tuttavia, poiché l'attività di riduzione di Spark su un executor recupera l'output di shuffle dalla posizione impostata dal driver Spark all'avvio dell'attività di riduzione, se un file di shuffle viene migrato, il reducer può continuare a tentare di recuperare l'output di shuffle da un executor ritirato, causando errori
ExecutorDeadException
eFetchFailedException
.Soluzione: attiva il recupero della posizione di shuffling impostando
spark.reducer.fetchMigratedShuffle.enabled
sutrue
quando esegui il workload batch Serverless per Apache Spark (vedi Impostare le proprietà del workload batch Spark). Quando questa proprietà è abilitata, l'attività di riduzione recupera nuovamente la posizione dell'output di shuffle dal driver dopo che un recupero da un esecutore ritirato non riesce.