La scalabilità automatica orizzontale consente a Dataflow di scegliere di istanze worker per il job, aggiungendo o rimuovendo worker in base alle esigenze. Dataflow scala in base all'utilizzo medio della CPU del e sul parallelismo di una pipeline. Il parallelismo di una pipeline è una stima del numero di thread necessari per elaborare i dati in modo più efficiente in qualsiasi momento.
La scalabilità automatica orizzontale è supportata nelle pipeline in modalità batch e flusso.
Scalabilità automatica batch
La scalabilità automatica orizzontale è abilitata per impostazione predefinita su tutte le pipeline batch. Dataflow sceglie automaticamente il numero di worker in base alla quantità totale stimata di lavoro in ogni fase della pipeline. Questa stima dipende dalle dimensioni dell'input e dalla velocità effettiva attuale. Ogni 30 secondi, Dataflow rivaluta la quantità di lavoro in base al l'avanzamento dell'esecuzione. Con l'aumento della quantità totale stimata di lavoro diminuisce, Dataflow scala in modo dinamico il numero di worker verso il basso.
Il numero di worker è sublineare alla quantità di lavoro. Ad esempio, un job con il doppio del lavoro ha meno del doppio dei worker.
Se si verifica una delle seguenti condizioni, Dataflow mantiene o diminuisce il numero di worker per risparmiare risorse inattive:
- L'utilizzo medio della CPU da parte dei worker è inferiore al 5%.
- Il parallelismo è limitato a causa di un lavoro impareggiabile, come l'impossibilità di dovuti a file compressi o moduli I/O che non si suddividono.
- Il grado di parallelismo è fisso, ad esempio quando si scrive in un testo in Cloud Storage.
Per impostare un limite superiore al numero di worker, imposta il valore
Opzione pipeline --maxNumWorkers
.
Questo flag è facoltativo per i job batch. Il valore predefinito è
2,000
.
Scalabilità automatica dei flussi di dati
Per i job di flussi di dati, la scalabilità automatica orizzontale consente a Dataflow modificare in modo adattivo il numero di worker in risposta ai cambiamenti di carico all'utilizzo delle risorse.
La scalabilità automatica orizzontale è abilitata per impostazione predefinita per i job di flussi di dati che utilizzano Motore di flussi di dati. Abilitare la scalabilità automatica orizzontale per i job di flussi che non utilizzano Streaming Engine, imposta quanto segue opzioni della pipeline quando avvii della tua pipeline:
Java
--autoscalingAlgorithm=THROUGHPUT_BASED
--maxNumWorkers=MAX_WORKERS
Sostituisci MAX_WORKERS con il numero massimo di worker di Compute Engine.
Python
--autoscaling_algorithm=THROUGHPUT_BASED
--max_num_workers=MAX_WORKERS
Sostituisci MAX_WORKERS con il numero massimo di worker di Compute Engine.
Vai
--autoscaling_algorithm=THROUGHPUT_BASED
--max_num_workers=MAX_WORKERS
Sostituisci MAX_WORKERS con il numero massimo di worker di Compute Engine.
Disabilita la scalabilità automatica orizzontale
Per disabilitare la scalabilità automatica orizzontale, imposta quanto segue opzione pipeline quando esegui il job.
Java
--autoscalingAlgorithm=NONE
Se disabiliti la scalabilità automatica orizzontale, Dataflow imposta
il numero di worker in base all'opzione --numWorkers
.
Python
--autoscaling_algorithm=NONE
Se disabiliti la scalabilità automatica orizzontale, Dataflow imposta
il numero di worker in base all'opzione --num_workers
.
Vai
--autoscaling_algorithm=NONE
Se disabiliti la scalabilità automatica orizzontale, Dataflow imposta
il numero di worker in base all'opzione --num_workers
.
Origini personalizzate
Se crei un'origine dati personalizzata, puoi potenzialmente migliorare il rendimento di implementare metodi che forniscono maggiori informazioni alla scalabilità automatica orizzontale algoritmo:
Java
Origini limitate
- Nella sottoclasse
BoundedSource
, implementa il metodogetEstimatedSizeBytes
. Il servizio Dataflow utilizzagetEstimatedSizeBytes
per il calcolo il numero iniziale di worker da utilizzare per la pipeline. - Nella sottoclasse
BoundedReader
, implementa il metodogetFractionConsumed
. Il servizio Dataflow utilizzagetFractionConsumed
per monitorare le letture i progressi compiuti e convergono sul numero corretto di worker da utilizzare durante una lettura.
Origini illimitate
L'origine deve informare il servizio Dataflow del backlog.
Il backlog è una stima dell'input in byte che non è stato ancora elaborato
dalla fonte. Per informare il servizio in merito al backlog, implementa uno dei seguenti
i seguenti metodi nella tua classe UnboundedReader
.
getSplitBacklogBytes()
: backlog della suddivisione attuale dell'origine. La il servizio aggrega il backlog in tutte le suddivisioni.getTotalBacklogBytes()
: il backlog globale in tutte le suddivisioni. Nella in alcuni casi il backlog non è disponibile per ogni suddivisione e può essere calcolato su tutte le suddivisioni. Solo la prima suddivisione (ID suddivisione "0") per fornire un backlog totale.
Il repository Apache Beam contiene
esempi
di origini personalizzate che implementano la classe UnboundedReader
.
Python
Origini limitate
- Nella sottoclasse
BoundedSource
, implementa il metodoestimate_size
. La Il servizio Dataflow utilizzaestimate_size
per calcolare il numero iniziale di worker da utilizzare per la pipeline. - Nella sottoclasse
RangeTracker
, implementa il metodofraction_consumed
. Il servizio Dataflow utilizzafraction_consumed
per monitorare le letture i progressi compiuti e convergono sul numero corretto di worker da utilizzare durante una lettura.
Vai
Origini limitate
- In
RangeTracker
, implementa il metodoGetProgress()
. La Il servizio Dataflow utilizzaGetProgress
per monitorare l'avanzamento della lettura e convergono sul numero corretto di worker da utilizzare durante una lettura.
Limitazioni
- Nei job che eseguono Dataflow Prime, la scalabilità automatica orizzontale è disattivata fino a 10 minuti dopo la scalabilità automatica verticale. Per ulteriori informazioni, consulta Effetto sulla scalabilità automatica orizzontale.
- Per le pipeline che non utilizzano Dataflow Shuffle, Dataflow potrebbe non essere in grado di fare lo scale down dei worker in modo efficace perché i worker potrebbero aver eseguito lo shuffling dei dati archiviati nei dischi locali.
- La
PeriodicImpulse
e Transform non è supportato con la scalabilità automatica dei flussi di dati. Se la pipeline utilizza
PeriodicImpulse
, allora i worker Dataflow non fanno lo fare lo scale down come previsto.
Passaggi successivi
- Ottimizzazione della scalabilità automatica orizzontale per le pipeline in modalità flusso
- Monitorare la scalabilità automatica di Dataflow
- Risolvere i problemi di scalabilità automatica di Dataflow