Scalabilità automatica di Serverless per Apache Spark

Questo documento fornisce informazioni sulla scalabilità automatica di Google Cloud 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 delle risorse asincrona, Serverless per Apache Spark riduce le risorse del carico di lavoro senza attendere che tutti i nodi completino la migrazione dello 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 e FetchFailedException.

    Soluzione: attiva il recupero della posizione di shuffling impostando spark.reducer.fetchMigratedShuffle.enabled su true 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.