Utilizzare gli Approfondimenti di Dataflow

Puoi utilizzare gli Approfondimenti di Dataflow per ottimizzare il rendimento dei job. Questo argomento mostra come interagire con Dataflow Insights utilizzando gcloud o l'API REST. Puoi anche consultare gli Approfondimenti nel Console Dataflow. Per ulteriori informazioni sulla revisione degli approfondimenti in alla console, vedi Consigli.

Panoramica

Dataflow Insights offre approfondimenti su come migliorare il lavoro delle prestazioni, la riduzione dei costi e la risoluzione degli errori. Dataflow Insights fa parte del servizio Recommender ed è disponibile tramite il tipo google.dataflow.diagnostics.Insight.

Quando lavori con Dataflow Insights, tieni presente che alcuni i suggerimenti potrebbero non essere pertinenti per il tuo caso d'uso.

Prima di iniziare

Prima di poter iniziare a utilizzare Dataflow Insights, devi completare i seguenti passaggi.

  1. Abilitare l'API Recommender.
  2. Assicurati che il tuo account disponga delle seguenti autorizzazioni:

    • recommender.dataflowDiagnosticsInsights.get
    • recommender.dataflowDiagnosticsInsights.list
    • recommender.dataflowDiagnosticsInsights.update

    Puoi concedere queste autorizzazioni singolarmente o uno dei seguenti ruoli:

    • roles/recommender.dataflowDiagnosticsViewer
    • roles/recommender.dataflowDiagnosticsAdmin
    • roles/dataflow.viewer
    • roles/dataflow.developer
    • roles/dataflow.admin

Richiedere insight di Dataflow

Puoi elencare gli approfondimenti di Dataflow come mostrato di seguito. Per altri tipi di interazioni con gli approfondimenti, consulta la guida agli approfondimenti per l'API Recommender.

Elenco insight Dataflow

Per elencare tutti gli approfondimenti di Dataflow per il tuo progetto in una determinata regione, utilizza uno dei seguenti metodi:

gcloud

Puoi utilizzare il comando gcloud recommender insights list per visualizzare tutti gli approfondimenti di Dataflow per il tuo progetto in una regione specificata.

Prima di eseguire il comando, sostituisci i seguenti valori:

  • PROJECT_ID: l'ID del progetto per il quale vuoi elencare gli insight.
  • REGION: la regione in cui vengono eseguiti i job Dataflow. Ad esempio: us-west1.
gcloud recommender insights list --insight-type=google.dataflow.diagnostics.Insight \
  --project=PROJECT_ID \
  --location=REGION

L'output elenca tutti gli insight di Dataflow per il progetto nella regione specificata.

REST

Puoi usare l'API Recommender insights.list per elencare tutti gli insight Dataflow per il progetto in un regione specificata.

Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

  • PROJECT_ID: l'ID del progetto per cui vuoi elencare gli approfondimenti.
  • REGION: la regione in cui vengono eseguiti i job Dataflow. Ad esempio: us-west1.

Metodo HTTP e URL:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/insightTypes/google.dataflow.diagnostics.Insight/insights

Per inviare la richiesta utilizzando curl (Linux, macOS o Cloud Shell), esegui il seguente comando:

curl -X GET \
  -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
  "https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/insightTypes/google.dataflow.diagnostics.Insight/insights"

Ottenere un singolo insight di Dataflow

Per ottenere maggiori informazioni su un singolo approfondimento, tra cui descrizione, stato ed eventuali consigli associati, utilizza uno dei seguenti metodi:

gcloud

Utilizza il comando gcloud recommender insights describe con l'ID di un singolo insight per visualizzare le informazioni relative a un singolo insight. Prima di eseguire il comando, sostituisci i seguenti valori:

  • INSIGHT_ID: l'ID dell'informazione che vuoi visualizzare.
  • PROJECT_ID: l'ID del progetto per cui vuoi elencare gli approfondimenti.
  • REGION: la regione in cui vengono eseguiti i job Dataflow. Ad esempio: us-west1.
gcloud recommender insights describe INSIGHT_ID \
  --insight-type=google.dataflow.diagnostics.Insight \
  --project=PROJECT_ID \
  --location=REGION

L'output mostra l'insight in dettaglio.

REST

Il metodo insights.get dell'API Recommender recupera un singolo insight. Prima di utilizzare i dati della richiesta, effettua la le seguenti sostituzioni:

  • PROJECT_ID: l'ID del progetto per cui vuoi elencare gli approfondimenti.
  • REGION: la regione in cui sono in esecuzione i job Dataflow. Ad esempio: us-west1.
  • INSIGHT_ID: l'ID dell'insight che vuoi visualizzare.

Metodo HTTP e URL:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/insightTypes/google.dataflow.diagnostics.Insight/insights/INSIGHT_ID

Per inviare la richiesta utilizzando curl (Linux, macOS o Cloud Shell), esegui il seguente comando:

curl -X GET \
  -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
  "https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/insightTypes/google.dataflow.diagnostics.Insight/insights/INSIGHT_ID"

Interpreta gli approfondimenti di Dataflow

Dopo aver ottenuto un approfondimento, puoi esaminarne i contenuti per comprendere il pattern di utilizzo delle risorse sottolineato. Oltre alla sezione attributi di insight standard, Dataflow Insights fornisce i seguenti sottotipi:

  • AUTOSCALING_NOT_ENABLED: La scalabilità automatica può essere in un bucket in cui è abilitato il controllo delle versioni. Il job ha un elevato utilizzo della CPU e utilizza il numero massimo di worker impostati. L'attivazione della scalabilità automatica potrebbe migliorare le prestazioni.
  • HIGH_FAN_OUT: A pausa fusion potrebbe essere inserito dopo una o più trasformazioni per aumentare il parallelismo.
  • MAX_NUM_WORKERS: Scalabilità automatica: Il numero massimo di worker potrebbe essere aumentato. Il job utilizza la scalabilità automatica, ha un elevato utilizzo della CPU e usa il numero massimo di worker impostati. L'aumento del numero massimo di worker potrebbe migliorare le prestazioni.
  • WORKER_OUT_OF_MEMORY: alcuni worker del job non sono riusciti a causa di esaurimento della memoria, il che potrebbe rallentare il job o causarne il fallimento.
  • PREBUILD_NOT_UTILIZED: utilizza il flusso di lavoro di precreazione dell'immagine worker per migliorare il tempo di avvio e l'affidabilità della scalabilità automatica.
  • ACTIVE_KEYS (anteprima): Il numero totale di chiavi attive è inferiore al numero totale di core e l'aumento della scalabilità non è utile.
  • LONG_WORK_ITEM: l'elaborazione del lavoro in una fase unita richiede troppo tempo, indicando un'operazione lenta o bloccata.

Per scoprire di più su come ridurre i problemi identificati da Dataflow Insights, consulta Approfondimenti.

Approfondimenti sul flusso di dati fornisce anche un campo content speciale che contiene subcampi con informazioni e metadati aggiuntivi su un approfondimento. A seconda del caso d'uso, i seguenti campi secondari content potrebbero essere utili:

  • jobName: il nome del job Dataflow.
  • description: una descrizione dell'approfondimento in inglese.
  • title: il titolo dell'approfondimento in inglese.

Approfondimenti

Rilevato fan-out elevato

Quando Dataflow rileva che un job presenta una o più trasformazioni con un fan-out elevato, appare il seguente messaggio:

High fan-out detected

Questo messaggio viene visualizzato quando un ParDo con un elevato rapporto di conteggio degli elementi tra output e input con un ParDo successivo. In questo caso, il secondo ParDo esegue in sequenza con il primo, che forza tutti gli elementi di output di un sullo stesso worker, riducendo il parallelismo e rallentando le prestazioni.

Per risolvere il problema:

  • Inserisci un GroupByKey e annulla il raggruppamento dopo il primo ParDo. Il servizio Dataflow non unisce mai le operazioni ParDo in un'aggregazione. Per ulteriori informazioni, vedi Ottimizzazione della fusione
  • Passa la PCollection intermedia come input aggiuntivo a un altro ParDo. Il servizio Dataflow materializza sempre gli input aggiuntivi.
  • Inserisci un passaggio di Riproduzione casuale. La riorganizzazione impedisce la fusione, esegue il controllo dei dati e riconfigura la strategia di definizione delle finestre in modo che non vengano persi dati. La riorganizzazione è supportata da Dataflow anche se è contrassegnata come deprecata nella documentazione di Apache Beam (tieni presente che la riorganizzazione dei dati può aumentare il costo di esecuzione della pipeline).

Scalabilità automatica: il numero massimo di worker potrebbe essere aumentato

Quando Dataflow rileva che un job utilizza il numero massimo di worker consentiti, maxNumWorkers (o max_num_workers), e che il job potrebbe utilizzare più worker se questo valore massimo fosse aumentato, viene visualizzato il seguente messaggio:

maximum number of workers could be increased

Ad esempio, questo consiglio si verifica per un job batch o di streaming in cui maxNumWorkers è impostato su 50 quando vengono utilizzati tutti i 50 worker con un utilizzo medio della CPU dei worker superiore all'80%. Questo consiglio si applica anche ai job di streaming per i quali maxNumWorkers è impostato su 50 quando vengono utilizzati tutti e 50 i worker con un utilizzo medio della CPU dei worker superiore al 50% e il job ha un tempo di elaborazione stimato superiore a 2 minuti.

In genere, l'aumento di maxNumWorkers aumenta la velocità effettiva della pipeline. Una pipeline batch potrebbe essere completata in meno tempo e una pipeline in streaming potrebbe gestire picchi di dati più elevati ed elaborare più elementi al secondo. Tuttavia, ciò potrebbe avere un costo maggiore. Per ulteriori informazioni, vedi Prezzi delle risorse worker. Per maggiori dettagli sul funzionamento dell'algoritmo di scalabilità automatica e su come configurarlo, consulta le Guida alla scalabilità automatica.

Per risolvere il problema:

  • Aumenta o rimuovi l'opzione della pipeline maxNumWorkers. In assenza dell'opzione, Dataflow utilizza i valori predefiniti elencati nella guida alla scalabilità automatica.
  • Se le prestazioni della pipeline sono adeguate, non è possibile fare nulla.
    • Per le pipeline batch, verifica che il tempo di esecuzione totale soddisfi i tuoi requisiti.
    • Per le pipeline in streaming, controlla il grafico Aggiornamento dei dati nella scheda Metriche job della pagina del job. Verifica che i valori nel grafico non aumentino continuamente e che rientrino in limiti accettabili.

Scalabilità automatica: l'impostazione del numero iniziale di worker potrebbe migliorare le prestazioni del job

Quando Dataflow rileva che un job utilizza un determinato numero di worker per oltre il 50% del tempo di esecuzione, impostare il numero iniziale di worker sul valore consigliato potrebbe migliorare le prestazioni del job riducendo il tempo di esecuzione dei job batch o impedendo l'aumento dell'elenco di attesa durante l'aggiornamento di un job in streaming.

I worker non funzionano correttamente a causa di errori OutOfMemory

Quando Dataflow rileva che i worker di un job non funzionano correttamente a causa di errori di esaurimento della memoria, viene visualizzato il seguente messaggio:

Some workers are out of memory

Alcuni worker del job non sono riusciti a causa di esaurimento della memoria. Sebbene sia possibile che il job venga completato, è anche possibile che questi errori ne impediscano il completamento o rallentino le prestazioni.

Prova i seguenti suggerimenti:

Flusso di lavoro di pre-creazione non utilizzato

Quando Dataflow rileva una pipeline in cui non viene utilizzato il flusso di lavoro di pre-creazione dell'immagine worker, viene visualizzato il seguente messaggio:

pre-build workflow not utilized

Quando il flusso di lavoro di pre-creazione dell'immagine worker non viene utilizzato, la pipeline ha dipendenze che vengono installate ripetutamente in fase di esecuzione. Questa configurazione rallenta il tempo di avvio del worker, con una conseguente riduzione della velocità effettiva del job e un comportamento di scalabilità automatica inaffidabile.

Per risolvere il problema, usa il flusso di lavoro di pre-creazione dell'immagine worker quando avvii la pipeline. Per maggiori informazioni, consulta Precompilare le dipendenze Python.

Se è già in uso un container predefinito personalizzato, per evitare installazioni non necessarie, aggiungere l'opzione "--sdk_location=container" e rimuovere le seguenti opzioni:

  • '--setup_file'
  • '--requirements_file'
  • '--extra_package(s)'

Il numero di chiavi attive è ridotto

Quando Dataflow rileva che un job sta subendo un ritardo perché il numero di chiavi attive è inferiore al numero totale di core e l'aumento della scalabilità non è utile, viene visualizzato il seguente messaggio:

Active keys can be increased

Per eseguire il codice utente nei job, Dataflow utilizza i worker. Ogni thread è mappato a una chiave responsabile di un set di dati da elaborare e una chiave può essere eseguita su un solo core alla volta per motivi di correttezza.

In alcuni casi, alcuni core sono sovraccaricati mentre altri sono inattivi. Per risolvere il problema, aumenta il numero di chiavi, aumentando anche il numero di thread attivi.

Potenziali soluzioni per aumentare le chiavi: - Puoi aumentare il numero di chiavi utilizzando un tipo di chiave più specifico. Ad esempio, se il tipo di chiave è IP address, saranno disponibili meno chiavi. Tuttavia, se modifichi il tipo di chiave in IP + [user identifier], sono disponibili più chiavi, il che aumenta il parallelismo. - Per le pipeline che scrivono in BigQuery, dove i sink potrebbero rappresentare un collo di bottiglia, consulta questo articolo. - Per altre origini/sink, controlla se ha un parametro numShards e aumentalo. In genere, uno shard viene mappato a una chiave. - Per indicazioni più generali sul nostro modello di esecuzione, consulta questo articolo. - La distribuzione può essere utilizzata per prendere una singola chiave di input e aggiungervi un hash per produrre più chiavi di output. Riferimento

Fase troppo lunga per l'attività

Quando Dataflow rileva che il lavoro ha spesso richiesto troppo tempo termina l'elaborazione, viene visualizzato il seguente messaggio:

Stage spending too long on work

Dataflow invia il lavoro alle fasi fuse in pacchetti di elementi da elaborare e ogni pacchetto è considerato completo una volta elaborati tutti gli elementi e le relative uscite per la fase. Le pipeline di flusso sono ottimizzate che richiedono meno di un minuto per l'elaborazione completa, quindi possono causare ulteriori problemi di prestazioni nelle pipeline.

Questo problema può essere causato da trasformazioni dell'utente bloccate o lente. Queste trasformazioni possono essere identificate dagli avvisi emessi in Cloud Logging e nella relativa scheda Diagnostica, con le frasi chiave "Operazione in corso" o "Elaborazione bloccata". Per diagnosticare se il problema è causato da una trasformazione di un utente, utilizza Cloud Profiler per ispezionare le prestazioni delle trasformazioni degli utenti. Poi individua il codice che causa il rallentamento e la relativa frequenza. Per ulteriori informazioni, consulta la sezione Risolvere gli errori comuni di Dataflow.

Se le indagini rivelano che i lunghi tempi di elaborazione non sono dovuti all'utente di trasformazione, ti consigliamo di contattare l'assistenza Cloud per descrivere i passaggi per indagare.

Job bloccato sull'elemento di lavoro

Quando Dataflow rileva che una chiave è bloccata perché un singolo elemento di lavoro ha avuto ripetutamente errori e poi è stato riprovato, viene visualizzato il seguente messaggio:

Job is stuck due to failed and retried work item

In Dataflow, tutti i messaggi in una pipeline vengono elaborati in chiave specifica. Quando si verifica un errore durante l'elaborazione di un messaggio, un nuovo tentativo. È accettabile se viene tentato di inviare nuovamente un messaggio due o tre volte. Tuttavia, se gli errori si verificano ripetutamente, ad esempio dieci volte di seguito, di solito indicano un problema fondamentale con il codice della pipeline. Quando viene eseguito un nuovo tentativo per un determinato messaggio di una chiave, gli altri messaggi sotto la stessa chiave non possono avanzare. Se un messaggio non va a buon fine per 10 o più volte, probabilmente il problema non si risolverà da solo. L'errore di questo messaggio può causare problemi della pipeline come:

  • ritardare la filigrana
  • backlog crescente
  • impedendo il completamento di un'operazione di svuotamento

Per eseguire il debug di questo problema, esamina la fase segnalata dal consiglio e controlla i log per identificare il codice problematico. Aggiorna quindi il job con il nuovo codice della pipeline per sbloccarlo.

Streaming Engine non abilitato

Quando Dataflow rileva che in un job di streaming non è attivo Streaming Engine, viene visualizzato il seguente messaggio:

This job isn't using Streaming Engine. It might benefit from having Streaming Engine enabled.

L'utilizzo di Streaming Engine offre diversi potenziali vantaggi, tra cui una migliore scalabilità automatica orizzontale, utilizzo ridotto delle risorse di CPU, memoria e spazio di archiviazione su Persistent Disk sulle VM worker. Streaming Engine supporta inoltre la fatturazione basata sulle risorse.