Scalabilità automatica orizzontale

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 metodo getEstimatedSizeBytes. Il servizio Dataflow utilizza getEstimatedSizeBytes per il calcolo il numero iniziale di worker da utilizzare per la pipeline.
  • Nella sottoclasse BoundedReader, implementa il metodo getFractionConsumed. Il servizio Dataflow utilizza getFractionConsumed 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 metodo estimate_size. La Il servizio Dataflow utilizza estimate_size per calcolare il numero iniziale di worker da utilizzare per la pipeline.
  • Nella sottoclasse RangeTracker, implementa il metodo fraction_consumed. Il servizio Dataflow utilizza fraction_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 metodo GetProgress(). La Il servizio Dataflow utilizza GetProgress 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