Utilizzare gli insight 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 esaminare gli Approfondimenti nella Console Dataflow. Per ulteriori informazioni su come esaminare gli Approfondimenti nella Console, consulta la sezione Consigli.

Panoramica

Dataflow Insights fornisce approfondimenti per migliorare il rendimento dei job, ridurre i costi e risolvere gli errori. Dataflow Insights fa parte del servizio Recommender ed è disponibile tramite il tipo google.dataflow.diagnostics.Insight.

Quando utilizzi Dataflow Insights, tieni presente che alcuni consigli 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. Abilita 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 di insight di 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 cui vuoi elencare gli approfondimenti.
  • 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 approfondimenti di Dataflow per il tuo progetto nella regione specificata.

REST

Puoi utilizzare il metodo insights.list dell'API Recommender per elencare tutti gli approfondimenti di Dataflow per il tuo progetto in una 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 insight, inclusa la descrizione, lo stato e gli eventuali consigli associati, utilizza uno dei seguenti metodi:

gcloud

Utilizza il comando gcloud recommender insights describe con l'ID di un'intuizione per visualizzare le informazioni su una singola intuizione. 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'informazione nel dettaglio.

REST

Il metodo insights.get dell'API Recommender recupera un singolo insight. 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.
  • INSIGHT_ID: l'ID dell'informazione 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'intuizione, puoi esaminarne i contenuti per comprendere il pattern di utilizzo delle risorse evidenziato. Oltre agli attributi degli insight standard, Dataflow Insights fornisce i seguenti sottotipi:

  • AUTOSCALING_NOT_ENABLED: la scalabilità automatica potrebbe essere attivata. 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: un'interruzione fusion potrebbe essere inserita 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 pre-creazione dell'immagine worker per migliorare il tempo di avvio dei worker e l'affidabilità dell'autoscaling.
  • 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 ha una o più trasformazioni con un fan-out elevato, viene visualizzato il seguente messaggio:

High fan-out detected

Questo messaggio viene visualizzato quando un ParDo con un elevato rapporto tra il numero di elementi di output e di input viene unito a un ParDo successivo. In questa situazione, il secondo ParDo viene eseguito in sequenza con il primo, il che forza tutti gli elementi di output di un dato input sullo stesso worker e riduce il parallelismo, rallentando il rendimento.

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, consulta Ottimizzazione di Fusion
  • Passa la PCollection intermedia come input aggiuntivo a un altro ParDo. Il servizio Dataflow materializza sempre gli input aggiuntivi.
  • Inserisci un passaggio di rimescolamento. 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 il throughput 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 comportare un aumento dei costi. Per ulteriori informazioni, consulta Prezzi delle risorse di lavoro. Per informazioni dettagliate sul funzionamento dell'algoritmo di scalabilità automatica e su come configurarlo, consulta la 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.
  • Non devi fare nulla se il rendimento della pipeline è adeguato.
    • 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 più del 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-costruzione 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 dei worker, il che riduce il throughput del job e causa un comportamento inaffidabile della scalabilità automatica.

Per risolvere il problema, utilizza il flusso di lavoro di pre-creazione dell'immagine worker quando avvii la pipeline. Per ulteriori informazioni, consulta Dipendenze Python pre-build.

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 viene mappato a una chiave responsabile di un insieme 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, sono 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 essere potenzialmente il collo di bottiglia, consulta questo articolo. - Per altre origini/destinazioni, controlla se è presente 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 l'elaborazione di un lavoro richiede spesso troppo tempo, 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 in modalità flusso sono ottimizzate per i pacchetti di lavoro che richiedono meno di un minuto per l'elaborazione completa, pertanto tempi di elaborazione lunghi possono causare ulteriori problemi di prestazioni nelle pipeline.

Questo problema può essere causato da trasformazioni 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 dell'utente, utilizza Cloud Profiler per ispezionare il rendimento delle trasformazioni dell'utente. Quindi, individua il codice che causa il rallentamento e la relativa frequenza. Per ulteriori informazioni, consulta la sezione Risolvere gli errori comuni di Dataflow.

Se l'indagine rivela che i lunghi tempi di elaborazione non sono causati dalle trasformazioni degli utenti, ti consigliamo di contattare l'assistenza Cloud e di descrivere i passaggi eseguiti per effettuare accertamenti.

Job bloccato sull'elemento di lavoro

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

Job is stuck due to failed and retried work item

In Dataflow, tutti i messaggi di una pipeline vengono elaborati in base a una determinata chiave. Quando si verifica un errore durante l'elaborazione di un messaggio, viene eseguito 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 riesce 10 o più volte, probabilmente il problema non si risolverà da solo. Questo errore di messaggio può causare problemi di pipeline come:

  • ritardare l'applicazione della 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 vari potenziali vantaggi, tra cui una migliore scalabilità orizzontale, una maggiore supportabilità e un utilizzo ridotto delle risorse di archiviazione CPU, memoria e Persistent Disk sulle VM worker. Streaming Engine supporta inoltre la fatturazione basata sulle risorse.