Puoi utilizzare Dataflow Insights 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 saperne di più sulla revisione degli approfondimenti in
Console, consulta
Consigli.
Panoramica
Dataflow Insights fornisce
approfondimenti su come migliorare le prestazioni 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 lavori con Dataflow Insights, tieni presente che alcuni 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.
- Abilita l'API Recommender.
Configurare l'autenticazione.
Select the tab for how you plan to use the samples on this page:
gcloud
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
REST
Per utilizzare gli esempi di API REST in questa pagina in un ambiente di sviluppo locale, devi utilizzare le credenziali che fornisci a gcloud CLI.
Installa Google Cloud CLI. Dopo l'installazione, inizializza Google Cloud CLI eseguendo il seguente comando:
gcloud init
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere alla gcloud CLI con la tua identità federata.
Per saperne di più, consulta Autenticarsi per l'utilizzo di REST nella documentazione sull'autenticazione di Google Cloud .
Assicurati che il tuo account disponga delle seguenti autorizzazioni:
recommender.dataflowDiagnosticsInsights.get
recommender.dataflowDiagnosticsInsights.list
recommender.dataflowDiagnosticsInsights.update
Puoi concedere queste autorizzazioni singolarmente oppure uno dei seguenti ruoli:
roles/recommender.dataflowDiagnosticsViewer
roles/recommender.dataflowDiagnosticsAdmin
roles/dataflow.viewer
roles/dataflow.developer
roles/dataflow.admin
Richiedere insight Dataflow
Puoi elencare gli approfondimenti di Dataflow come mostrato di seguito. Per altri tipi di interazioni con gli insight, consulta la guida agli insight per l'API Recommender.
Elenca gli 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 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 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 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 comando seguente:
curl -X GET \ -H "Authorization: Bearer "$(gcloud auth print-access-token) \ "https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/insightTypes/google.dataflow.diagnostics.Insight/insights"
Recuperare un singolo insight Dataflow
Per ottenere maggiori informazioni su un singolo approfondimento, inclusi descrizione, stato ed eventuali consigli associati, utilizza uno dei seguenti metodi:
gcloud
Utilizza il comando
gcloud recommender insights describe
con l'ID insight per visualizzare le informazioni su un singolo insight. Prima di eseguire il comando, sostituisci i seguenti valori:- INSIGHT_ID: l'ID dell'insight 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 in dettaglio l'approfondimento.
REST
Il metodo insights.get dell'API Recommender recupera un singolo insight. Prima di utilizzare i dati della richiesta, effettua 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'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 comando seguente:
curl -X GET \ -H "Authorization: Bearer "$(gcloud auth print-access-token) \ "https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/insightTypes/google.dataflow.diagnostics.Insight/insights/INSIGHT_ID"
Interpretare gli approfondimenti di Dataflow
Dopo aver ricevuto un approfondimento, puoi esaminarne i contenuti per comprendere il pattern di utilizzo delle risorse che mette in evidenza. Oltre agli attributi standard degli insight, Dataflow Insights fornisce i seguenti sottotipi:
AUTOSCALING_NOT_ENABLED
: Scalabilità automatica potrebbe essere abilitata. Il job ha un alto utilizzo di CPU e usa 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 alto utilizzo di 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 funzionare perché hanno esaurito la memoria, il che potrebbe rallentare il job o causarne l'interruzione.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à dello scalabilità automatica.ACTIVE_KEYS
(anteprima): Il numero totale di chiavi attive è inferiore al numero totale di core e lo scale up non è utile.LONG_WORK_ITEM
: L'elaborazione di un lavoro in una fase unita richiede troppo tempo, indicando un'operazione lenta o bloccata.
Per scoprire di più su come mitigare i problemi identificati da Dataflow Insights, consulta la sezione Insights.
Dataflow Insights fornisce anche un campo
content
speciale che contiene sottocampi con informazioni e metadati aggiuntivi su un insight. A seconda del tuo caso d'uso, potrebbero essere utili i seguenti campi secondaricontent
:jobName
: il nome del job Dataflow.description
: una descrizione dell'insight in inglese.title
: Il titolo dell'insight 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 rapporto elevato tra conteggio degli elementi di output e 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 determinato input sullo stesso worker, riducendo il parallelismo e rallentando le prestazioni.
Per risolvere il problema:
- Inserisci un
GroupByKey
e separa i gruppi dopo il primo ParDo. Il servizio Dataflow non unisce mai le operazioni ParDo in un'aggregazione. Per ulteriori informazioni, vedi Ottimizzazione di Fusion - Passa il PCollection intermedio come input aggiuntivo a un altro ParDo. Il servizio Dataflow materializza sempre gli input aggiuntivi.
- Inserisci un passaggio di riorganizzazione. Il rimescolamento impedisce la fusione, esegue il checkpoint dei dati e riconfigura la strategia di finestratura in modo che nessun dato venga eliminato. Il rimescolamento è supportato da Dataflow anche se è contrassegnato come ritirato nella documentazione di Apache Beam (tieni presente che il rimescolamento 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
(omax_num_workers
) e che il job potrebbe utilizzare più worker se questo massimo venisse aumentato, viene visualizzato il seguente messaggio:maximum number of workers could be increased
Ad esempio, questo consiglio viene visualizzato per un job batch o di streaming con
maxNumWorkers
impostato su 50 quando tutti i 50 worker vengono utilizzati con un utilizzo medio della CPU del worker superiore all'80%. Questo consiglio viene visualizzato anche per i job di streaming conmaxNumWorkers
impostato su 50 quando tutti i 50 worker vengono utilizzati con un utilizzo medio della CPU worker superiore al 50% e il job ha un tempo di elaborazione stimato superiore a 2 minuti.In genere, l'aumento di
maxNumWorkers
incrementa la velocità effettiva della pipeline. Una pipeline batch potrebbe essere completata in meno tempo e una pipeline di streaming potrebbe gestire picchi di dati più grandi ed elaborare più elementi al secondo. Tuttavia, questa operazione potrebbe comportare un aumento dei costi. Per ulteriori informazioni, consulta Prezzi delle risorse worker. 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
. Senza questa opzione, Dataflow utilizza i valori predefiniti elencati nella guida alla scalabilità automatica. - Se il rendimento della pipeline è adeguato, non è necessario fare nulla.
- Per le pipeline batch, verifica che il tempo di esecuzione totale soddisfi i tuoi requisiti.
- Per le pipeline di 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, 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 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 per il job non sono riusciti a funzionare correttamente perché hanno esaurito la memoria. Sebbene sia possibile che il job venga completato, è anche possibile che questi errori impediscano il completamento corretto del job o rallentino le prestazioni.
Prova i seguenti suggerimenti:
- Aumenta manualmente la quantità di memoria disponibile per i worker.
- Ridurre la quantità di memoria richiesta profilando l'utilizzo della memoria. Per saperne di più, vedi Risolvere gli errori di Dataflow per esaurimento della memoria.
Workflow predefinito 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 non viene utilizzato il flusso di lavoro di pre-creazione dell'immagine worker, la pipeline ha dipendenze che vengono installate ripetutamente in fase di runtime. Questa configurazione rallenta il tempo di avvio del worker, il che riduce il throughput del job e causa 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 saperne di più, consulta Precompilare le dipendenze Python.
Se è già in uso un container predefinito personalizzato, per evitare installazioni non necessarie, aggiungi l'opzione "--sdk_location=container" e rimuovi le seguenti opzioni:
- '--setup_file'
- '--requirements_file'
- '--extra_package(s)'
Le chiavi attive sono basse
Quando Dataflow rileva che un job è in ritardo perché il numero di chiavi attive è inferiore al numero totale di core e lo scale up 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 sovraccarichi mentre altri sono inattivi. Per risolvere il problema, aumenta il numero di chiavi, il che aumenta anche il numero di thread attivi.
Soluzioni potenziali 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 inIP + [user identifier]
, sono disponibili più chiavi, il che aumenta il parallelismo. - Per le pipeline che scrivono in BigQuery, dove i sink potrebbero potenzialmente essere il collo di bottiglia, consulta questo articolo. - Per altre origini/destinazioni, verifica se è presente un parametronumShards
e aumentalo. In generale, uno shard viene mappato a una chiave. - Per indicazioni più generali sul nostro modello di esecuzione, consulta questo articolo. - Fanout può essere utilizzato per prendere una singola chiave di input e aggiungervi un hash per produrre più chiavi di output. RiferimentoFase troppo lunga per l'attività
Quando Dataflow rileva che l'elaborazione di un'attività ha richiesto troppo tempo, viene visualizzato il seguente messaggio:
Stage spending too long on work
Dataflow invia il lavoro alle fasi unite in bundle di elementi da elaborare e ogni bundle viene 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 per i bundle di lavoro che richiedono meno di un minuto per essere elaborati completamente, pertanto tempi di elaborazione lunghi possono causare ulteriori problemi di rendimento 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 dell'utente, utilizza Cloud Profiler per esaminare le prestazioni delle trasformazioni dell'utente. Poi traccia il codice che causa il rallentamento e la sua frequenza. Per saperne di più, consulta la sezione Risoluzione dei problemi relativi agli errori comuni di Dataflow.
Se l'indagine rivela che i lunghi tempi di elaborazione non sono causati dalle trasformazioni dell'utente, ti consigliamo di contattare l'assistenza Cloud e descrivere i passaggi eseguiti per l'indagine.
Il job è bloccato sull'elemento di lavoro
Quando Dataflow rileva che una chiave è bloccata perché un singolo elemento di lavoro ha ripetutamente generato errori e poi è stato ritentato, 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 chiave specifica. Quando si verifica un errore durante l'elaborazione di un messaggio, viene eseguito un nuovo tentativo di elaborazione. È accettabile se un messaggio viene ritentato 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 su una chiave, gli altri messaggi della stessa chiave non possono avanzare. Se un messaggio non viene inviato 10 o più volte, il problema probabilmente non si risolverà da solo. Questo errore di messaggio può causare problemi alla pipeline, ad esempio:
- ritardare l'applicazione della filigrana
- accumulo di backlog
- impedire il completamento di un'operazione di scarico
Per eseguire il debug di questo problema, esamina la fase segnalata dal consiglio e controlla i log per identificare il codice problematico. Quindi, aggiorna il job con il nuovo codice della pipeline per sbloccarlo.
Streaming Engine non è abilitato
Quando Dataflow rileva che un job di streaming 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 offre vari potenziali vantaggi, tra cui una migliore scalabilità automatica orizzontale, una migliore assistenza e un utilizzo ridotto delle risorse di CPU, memoria e spazio di archiviazione sPersistent Diskte nelle VM worker. Streaming Engine supporta anche la fatturazione basata sulle risorse.
Salvo quando diversamente specificato, i contenuti di questa pagina sono concessi in base alla licenza Creative Commons Attribution 4.0, mentre gli esempi di codice sono concessi in base alla licenza Apache 2.0. Per ulteriori dettagli, consulta le norme del sito di Google Developers. Java è un marchio registrato di Oracle e/o delle sue consociate.
Ultimo aggiornamento 2025-08-18 UTC.