Utilizzo degli insight Dataflow

Puoi utilizzare gli insight di Dataflow per ottimizzare le prestazioni dei job. Questo argomento mostra come interagire con gli insight di Dataflow utilizzando gcloud o l'API REST. Puoi anche esaminare gli insight nella console Dataflow. Per maggiori informazioni sulla revisione degli insight nella console, consulta la sezione Consigli.

Panoramica

Dataflow Insights fornisce insight sul miglioramento delle prestazioni dei job, sulla riduzione dei costi e sulla risoluzione degli errori. Dataflow Insights fa parte del servizio Motore per suggerimenti ed è disponibile tramite il tipo google.dataflow.diagnostics.Insight.

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

Prima di iniziare

Prima di poter iniziare a utilizzare gli insight di Dataflow, 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 oppure puoi concedere uno dei seguenti ruoli:

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

Richiedi insight Dataflow

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

Elenco insight Dataflow

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

gcloud

Puoi utilizzare il comando gcloud recommendationser insight list per visualizzare tutti gli insight 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 sono in esecuzione 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 tuo progetto nella regione specificata.

REST

Puoi utilizzare il metodo insights.list dell'API Recommender per elencare tutti gli insight Dataflow per il tuo progetto in una regione specificata.

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

  • PROJECT_ID: l'ID del progetto per il quale vuoi elencare gli insight.
  • REGION: la regione in cui sono in esecuzione 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 questo 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"

Ottieni un singolo insight di Dataflow

Per ottenere maggiori informazioni su un singolo insight, tra cui la descrizione, lo stato e gli eventuali suggerimenti associati, utilizza uno dei seguenti metodi:

gcloud

Utilizza il comando gcloud learner insight describe con il tuo ID insight per visualizzare le informazioni su un singolo insight. Prima di eseguire il comando, sostituisci i seguenti valori:

  • INSIGHT_ID: l'ID dell'approfondimento che vuoi visualizzare.
  • PROJECT_ID: l'ID del progetto per il quale vuoi elencare gli insight.
  • REGION: la regione in cui sono in esecuzione 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 riceve un singolo insight. Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT_ID: l'ID del progetto per il quale vuoi elencare gli insight.
  • REGION: la regione in cui sono in esecuzione i job Dataflow. Ad esempio: us-west1.
  • INSIGHT_ID: l'ID dell'approfondimento 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 questo 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 insight di Dataflow

Dopo aver ottenuto un insight, puoi esaminarne i contenuti per comprendere il modello di utilizzo delle risorse evidenziato. Oltre agli attributi standard di insight, Dataflow Insights fornisce i seguenti sottotipi:

  • AUTOSCALING_NOT_ENABLED: è possibile attivare la scalabilità automatica. Il job ha un utilizzo elevato della CPU e sta utilizzando il numero massimo di worker impostati. L'attivazione della scalabilità automatica potrebbe migliorare le prestazioni.
  • HIGH_FAN_OUT: potrebbe essere inserita un'interruzione di fusion dopo una o più trasformazioni per aumentare il parallelismo.
  • MAX_NUM_WORKERS: Scalabilità automatica: è possibile aumentare il numero massimo di worker. Il job utilizza la scalabilità automatica, ha un utilizzo elevato di CPU e utilizza 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 dell'esaurimento della memoria, il che potrebbe rallentare il job o causarne l'errore.
  • PREBUILD_NOT_UTILIZED: usa il flusso di lavoro di pre-creazione dell'immagine worker per migliorare i tempi di avvio dei worker e l'affidabilità della scalabilità automatica.
  • ACTIVE_KEYS (anteprima): il numero totale di chiavi attive è inferiore al numero totale di core e lo scale up non risolve il problema.
  • LONG_WORK_ITEM: l'elaborazione del lavoro in una fase fusa richiede troppo tempo, il che indica un'operazione lenta o bloccata.

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

Gli insight di Dataflow fornisce anche un campo content speciale contenente campi secondari con informazioni e metadati aggiuntivi su un insight. A seconda del tuo caso d'uso, i seguenti content sottocampi potrebbero essere utili:

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

Insight

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 rapporto elevato di numero di elementi di output-input viene fuso con 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 determinato input sullo stesso worker, riduce il parallelismo e rallenta le prestazioni.

Per risolvere il problema:

  • Inserisci un GroupByKey e separa il tuo gruppo dopo il primo ParDo. Il servizio Dataflow non fonde mai le operazioni ParDo in un'aggregazione. Per ulteriori informazioni, consulta Ottimizzazione della fusione
  • Passa la PCollection intermedia come input secondario a un altro ParDo. Il servizio Dataflow materializza sempre gli input collaterali.
  • Inserisci un passaggio per il riordinamento casuale. Il riordinamento impedisce la fusione, verifica i dati e riconfigura la strategia di windowing in modo che non vengano eliminati dati. Il riordinamento è supportato da Dataflow anche se è contrassegnato come deprecato nella documentazione di Apache Beam (tieni presente che il riordinamento dei dati può aumentare il costo dell'esecuzione della pipeline).

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

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

maximum number of workers could be increased

Ad esempio, questo suggerimento si applica a un job batch o flusso con maxNumWorkers impostato su 50 quando tutti i 50 worker vengono utilizzati con un utilizzo medio della CPU dei worker superiore all'80%. Questo suggerimento si applica anche ai job di inserimento di flussi per cui maxNumWorkers è impostato su 50 quando vengono utilizzati tutti i 50 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 modalità flusso potrebbe gestire picchi di dati maggiori ed elaborare più elementi al secondo. Tuttavia, ciò potrebbe avere un costo maggiore. Per ulteriori informazioni, consulta i prezzi delle risorse worker. Per informazioni dettagliate sul funzionamento e sulla configurazione dell'algoritmo di scalabilità automatica, consulta la guida alla scalabilità automatica.

Per risolvere il problema:

  • Aumenta o rimuovi l'opzione della pipeline maxNumWorkers. Senza l'opzione, Dataflow utilizza i valori predefiniti elencati nella guida alla scalabilità automatica.
  • Non fare nulla se le prestazioni della pipeline sono adeguate.
    • Per le pipeline in modalità batch, verifica che il tempo di esecuzione totale soddisfi i tuoi requisiti.
    • Per le pipeline in modalità flusso, controlla il grafico Aggiornamento dei dati nella scheda Metriche dei job della pagina del job. Verifica che i valori nel grafico non siano in continuo aumento e che rientrino nei 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, l'impostazione del numero iniziale di worker sul valore consigliato potrebbe migliorare le prestazioni del job riducendo il tempo di esecuzione per i job batch o impedendo l'aumento del backlog durante l'aggiornamento di un job di inserimento di flussi.

I worker stanno avendo problemi con errori di esaurimento della memoria

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

Some workers are out of memory

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

Prova i seguenti suggerimenti:

Flusso di lavoro di pre-compilazione 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 installate ripetutamente in fase di runtime. Questa configurazione rallenta il tempo di avvio del worker, riducendo la velocità effettiva del job e causando un comportamento di scalabilità automatica inaffidabile.

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

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

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

Le chiavi attive sono in esaurimento

Quando Dataflow rileva che un job non è disponibile perché il numero di chiavi attive è inferiore al numero totale di core e lo scale up non risolve il problema, 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 dell'elaborazione di un set di dati e una chiave può essere eseguita solo su un singolo 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, in modo da aumentare 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], saranno disponibili più chiavi, con un conseguente aumento del parallelismo. - Per le pipeline che scrivono in BigQuery in cui i sink potrebbero essere il collo di bottiglia, fai riferimento a questo articolo. - Per altre sorgenti/sink, controlla se hanno un parametro numShards e aumentalo. In generale, uno shard mappa a una chiave. - Per indicazioni più generali sul nostro modello di esecuzione, fai riferimento a questo articolo. - Il fanout può essere usato per prendere una singola chiave di input e aggiungere un hash per produrre più chiavi di output. Riferimento

Fase troppo lunga per l'attività

Quando Dataflow rileva che il completamento dell'elaborazione del lavoro richiede spesso troppo tempo, viene visualizzato il seguente messaggio:

Stage spending too long on work

Dataflow invia il lavoro alle fasi fusi in bundle di elementi da elaborare e ogni bundle è considerato completo una volta che tutti gli elementi e i relativi output sono stati elaborati per la fase. Le pipeline in modalità flusso sono ottimizzate in base a pacchetti di lavoro la cui elaborazione completa richiede meno di un minuto, per cui tempi di elaborazione lunghi 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 questo problema è causato da una trasformazione dell'utente, utilizza Cloud Profiler per ispezionare le prestazioni delle trasformazioni degli utenti. Quindi, individua il codice che causa il rallentamento e la relativa frequenza. Per ulteriori informazioni, consulta Risoluzione dei problemi comuni di Dataflow.

Se dall'analisi risulta che i lunghi tempi di elaborazione non sono causati dalle trasformazioni dell'utente, ti consigliamo di contattare l'assistenza Cloud e descrivere i passaggi compiuti per l'indagine.

Job bloccato sull'elemento di lavoro

Quando Dataflow rileva che una chiave è bloccata perché l'errore ripetuto di un singolo elemento di lavoro è stato ripetuto, 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 una chiave specifica. Quando si verifica un errore durante l'elaborazione di un messaggio, questo viene riprovato. È accettabile se un messaggio viene ripetuto due o tre volte. Tuttavia, se gli errori si ripetono più volte, ad esempio dieci volte di fila, di solito indicano un problema fondamentale con il codice della pipeline. Quando si esegue un nuovo tentativo per un determinato messaggio su una chiave, gli altri messaggi associati alla stessa chiave non possono proseguire. Se un messaggio non riesce a rispondere 10 o più volte, probabilmente non si risolverà da solo. L'errore di questo messaggio può causare problemi di pipeline come:

  • il ritardo della filigrana
  • accumulazione del backlog
  • impedire il completamento di un'operazione di svuotamento

Per eseguire il debug di questo problema, esamina la fase segnalata dal suggerimento ed esamina i log per identificare il codice problematico. Poi, aggiorna il job con il nuovo codice della pipeline per sbloccarlo.

Streaming Engine non abilitato

Quando Dataflow rileva che un job di inserimento di flussi non ha Streaming Engine abilitato, 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 presenta vari potenziali vantaggi, tra cui una migliore scalabilità automatica orizzontale, una maggiore supportabilità e la riduzione dell'utilizzo di CPU, memoria e risorse di archiviazione su Persistent Disk sulle VM worker. Streaming Engine supporta anche la fatturazione basata sulle risorse.