Scalabilità dinamica dei thread

La scalabilità dinamica dei thread è una parte della suite di risorse verticali di Dataflow delle funzionalità di scalabilità. Integra le Dataflow scalabilità automatica orizzontale di questa funzionalità modificando il numero di attività parallele, noto anche come set, eseguito da ciascun worker Dataflow. L'obiettivo è aumentare le entrate complessive della tua pipeline Dataflow.

Quando Dataflow esegue una pipeline, l'elaborazione viene distribuita su più macchine virtuali (VM) Compute Engine, note anche come worker. Un thread è una singola attività eseguibile in esecuzione all'interno di un processo più grande. Dataflow avvia diversi thread su ogni worker.

Con la scalabilità dinamica dei thread abilitata, il servizio Dataflow sceglie automaticamente il numero appropriato di thread da eseguire su ciascun worker Dataflow. Poiché ogni thread esegue un'attività, aumentando il numero di thread è possibile eseguire più attività parallelo su un worker. Quando utilizzi questa funzionalità con la scalabilità automatica orizzontale caratteristica, il numero totale di thread utilizzati dalla pipeline rimane lo stesso, ma vengono utilizzati meno worker.

La scalabilità dinamica dei thread utilizza un algoritmo per determinare il numero thread di cui ciascun worker ha bisogno in base agli indicatori di utilizzo delle risorse generati durante l'esecuzione della pipeline. Per ulteriori informazioni, consulta nella sezione Come funziona di questa pagina.

Vantaggi

La scalabilità dinamica dei thread offre i seguenti potenziali vantaggi.

  • Consente ai worker Dataflow di elaborare i dati in modo più efficiente migliorando di utilizzo di CPU e memoria per worker.
  • Migliora l'elaborazione parallela regolando il numero di thread worker disponibili per eseguire attività in parallelo durante l'esecuzione della pipeline.
  • Riduce il numero di worker necessari per elaborare set di dati di grandi dimensioni, ridurre i costi.

Supporto e limitazioni

  • La scalabilità dinamica dei thread è disponibile per le pipeline che utilizzano i linguaggi Java, Python, e Go.
  • Il job Dataflow deve utilizzare Runner v2.
  • Sono supportate solo pipeline in modalità batch.
  • Le pipeline che richiedono molta CPU o memoria potrebbero non trarre vantaggio la scalabilità dinamica dei thread.
  • La scalabilità dinamica dei thread non riduce la quantità di tempo necessaria Job Dataflow da completare.

Come funziona

La scalabilità dinamica dei thread utilizza i principi di ottimizzazione automatica per fare lo scale up o lo scale down del conteggio dei thread su ciascun worker nel worker Dataflow piscina. Il numero di thread viene scalato in modo indipendente su ogni worker. Ogni thread esegue un'attività. L'aumento del numero di thread consente l'esecuzione di più attività parallelo su un worker. Man mano che le attività vengono completate e i thread non sono più necessari, il numero di thread viene ridotto. Un algoritmo determina il numero di thread di cui ha bisogno ogni worker.

Il numero di thread su un worker viene scalato fino a un massimo di due thread per vCPU quando vengono soddisfatte entrambe le seguenti condizioni:

  • L'utilizzo della memoria sul worker è inferiore al 50%.
  • L'utilizzo della CPU sul worker è inferiore al 65%.

Il conteggio dei thread su un worker viene ridotto a un minimo di un thread per vCPU quando la seguente condizione è soddisfatta:

  • L'utilizzo della memoria sul worker è superiore al 70%.

Per visualizzare l'utilizzo della memoria e della CPU per il job, usa la Metriche del job dell'interfaccia web di Dataflow.

Per garantire che i suggerimenti siano validi, Dataflow attende che la risorsa l'utilizzo per stabilizzarsi prima di inviare suggerimenti ai worker. Ad esempio: e l'utilizzo della CPU potrebbero essere nell'intervallo di scalabilità, ma poiché di risorse è ancora in crescita, Dataflow non invia un consiglio. Dopo il giorno l'utilizzo delle risorse si stabilizza, Dataflow invia un suggerimento.

Se si verifica un errore di esaurimento memoria (OOM), il ridimensionamento dei thread viene e la pipeline viene eseguita con un thread per vCPU.

Abilita scalabilità dinamica dei thread

Per abilitare la scalabilità dinamica dei thread, utilizza persone che seguo Opzione di servizio Dataflow.

Java

--dataflowServiceOptions=enable_dynamic_thread_scaling

Python

--dataflow_service_options=enable_dynamic_thread_scaling

Vai

--dataflow_service_options=enable_dynamic_thread_scaling

Quando la scalabilità dinamica dei thread è abilitata, puoi anche impostare i valori iniziale e di worker disponibili per la pipeline durante l'esecuzione. Per ulteriori informazioni le informazioni, vedi Opzioni pipeline.

Verifica che la scalabilità dinamica dei thread sia abilitata

Quando la scalabilità dinamica dei thread è attivata, nella tua file di log worker:

Enabling thread vertical scaling feature in worker.

Per visualizzare i file di log dei worker, Esplora log, utilizza la Riquadro Query per filtrare i log in base a Nome log. Utilizza il seguente nome di log nel filtro:

projects/PROJECT_ID/logs/dataflow.googleapis.com%2Fharness

Puoi vedere il numero consigliato di thread nei file di log dei worker. La seguente messaggio include il numero consigliato di thread:

worker_thread_scaling_report_response { recommended_thread_count: NUMBER }

Se l'utilizzo delle risorse non è compreso nell'intervallo di scalabilità, equivale al numero di vCPU sul worker.

Puoi anche utilizzare la console Google Cloud per verificare se la scalabilità dinamica dei thread è in un bucket in cui è abilitato il controllo delle versioni. Una volta abilitato, nel riquadro Informazioni job di Dataflow, nella riga dataflowServiceOptions del Opzioni pipeline, viene visualizzata la dicitura enable_dynamic_thread_scaling.

Risoluzione dei problemi

Questa sezione fornisce istruzioni per la risoluzione di problemi comuni relativi a: la scalabilità dinamica dei thread.

Le prestazioni peggiorano con la scalabilità dinamica dei thread abilitata

L'aumento del numero di thread potrebbe causare problemi di prestazioni nei seguenti casi: casi:

  • Quando più processi tentano di utilizzare la stessa risorsa, processo è in grado di utilizzare la risorsa, mentre gli altri devono attendere. Questa situazione è noto come contesa delle risorse. Quando si verifica un conflitto tra le risorse, le prestazioni della pipeline potrebbero diminuire.
  • Quando si verificano errori di esaurimento della memoria, il ridimensionamento dinamico dei thread è disabilitato. Nel alcuni casi, gli errori di memoria insufficiente potrebbero causare un errore della pipeline.

Verifica se il numero di thread è aumentato. Per informazioni su come verificare il numero di thread consigliato, consulta Verifica che il ridimensionamento dei thread sia abilitato in questa pagina.

Se il ridimensionamento dei thread è abilitato, per risolvere il problema, quando esegui il pipeline, non includere l'opzione di servizio di scalabilità dei thread dinamici.

Worker unificato... abilitato e disabilitato

Dopo aver abilitato la scalabilità dinamica dei thread, il job potrebbe non riuscire con i seguenti errori errore:

The workflow could not be created. Causes: (ID): Unified worker misconfigured by user and was both enabled and disabled.

Questo errore si verifica quando Runner v2 viene disabilitato in modo esplicito.

Per risolvere il problema, abilitare Runner v2. Per ulteriori informazioni, consulta Abilita Dataflow Runner v2 in "Utilizza Dataflow Runner V2" .

Esegui l'upgrade dell'SDK

Dopo aver abilitato la scalabilità dinamica dei thread, il job potrebbe non riuscire con i seguenti errori errore:

Java

Dataflow Runner v2 requires the Apache Beam Java SDK version 2.29.0 or higher. Please upgrade your SDK and resubmit your job.

Python

Dataflow Runner v2 requires the Apache Beam SDK, version 2.21.0 or higher. Please upgrade your SDK and resubmit your job.

Questo errore si verifica quando non è possibile abilitare Runner v2 perché la versione SDK non lo supporta.

Per risolvere il problema, utilizza una versione dell'SDK che supporti Runner v2.

Impossibile abilitare la funzionalità di scalabilità verticale del thread

Dopo aver abilitato la scalabilità dinamica dei thread, il job potrebbe non riuscire con i seguenti errori errore:

The workflow could not be created. Causes: (ID): Thread vertical scaling feature can not be enabled while number_of_worker_harness_threads is specified.

Questo errore si verifica quando la pipeline imposta esplicitamente il numero di thread per worker utilizzando l'istruzione numberOfWorkerHarnessThreads number_of_worker_harness_threads l'opzione pipeline.

Per risolvere il problema, rimuovi numberOfWorkerHarnessThreads o Opzione number_of_worker_harness_threads della pipeline.