Monitorare e risolvere i problemi dei workload batch

Questo documento descrive gli strumenti e i file che puoi utilizzare per monitorare e risolvere i problemi dei workload batch di Managed Service for Apache Spark.

Risolvi i problemi dei workload dalla console Google Cloud

Quando un job batch non riesce o ha prestazioni scarse, un primo passaggio consigliato è aprire la pagina Dettagli job (Dettagli batch) facendo clic sull'ID job batch nella scheda Spark serverless della pagina Job nella console Google Cloud .

Utilizza la scheda Riepilogo: il tuo hub per la risoluzione dei problemi

La scheda Riepilogo, selezionata per impostazione predefinita quando si apre la pagina Dettagli job batch, mostra metriche critiche e log filtrati per aiutarti a eseguire una rapida valutazione iniziale dello stato del batch. Dopo questa valutazione iniziale, puoi eseguire un'analisi più approfondita utilizzando strumenti più specializzati disponibili nella pagina Dettagli job batch, come l'interfaccia utente di Spark, Esplora log e Gemini Cloud Assist.

Metriche in evidenza per i batch

Le schede Riepilogo e Monitoraggio nella pagina Dettagli job batch includono grafici che mostrano valori importanti delle metriche dei workload batch. I grafici delle metriche vengono compilati al termine dell'esecuzione e offrono un'indicazione visiva di potenziali problemi come conflitti di risorse, distorsione dei dati o pressione sulla memoria.

Dashboard delle metriche di Batch.

Tabella delle metriche

La tabella seguente elenca le metriche dei workload Spark visualizzate nella pagina Dettagli job batch nella console Google Cloud e descrive in che modo i valori delle metriche possono fornire informazioni sullo stato e sulle prestazioni del workload.

Metrica Cosa mostra?
Metriche a livello di esecutore
Rapporto tra tempo di GC della JVM e runtime Questa metrica mostra il rapporto tra il tempo di garbage collection (GC) della JVM e il runtime per esecutore. Rapporti elevati possono indicare perdite di memoria all'interno di attività in esecuzione su determinati esecutori o strutture di dati inefficienti, il che può portare a un elevato churn degli oggetti.
Byte del disco con overflow Questa metrica mostra il numero totale di byte su disco trasferiti tra diversi esecutori. Se un esecutore mostra un numero elevato di byte su disco trasferiti, ciò può indicare una distorsione dei dati. Se la metrica aumenta nel tempo, ciò può indicare che esistono fasi con pressione sulla memoria o perdite di memoria.
Byte letti e scritti Questa metrica mostra i byte scritti rispetto ai byte letti per esecutore. Grandi discrepanze nei byte letti o scritti possono indicare scenari in cui i join replicati portano all'amplificazione dei dati su esecutori specifici.
Record letti e scritti Questa metrica mostra i record letti e scritti per esecutore. Un numero elevato di record letti con un numero ridotto di record scritti può indicare un collo di bottiglia nella logica di elaborazione su esecutori specifici, con conseguente lettura dei record durante l'attesa. Gli esecutori che presentano costantemente ritardi nelle letture e nelle scritture possono indicare una contesa delle risorse su quei nodi o inefficienze del codice specifiche dell'esecutore.
Rapporto tra tempo di scrittura shuffling e tempo di esecuzione La metrica mostra la quantità di tempo impiegata dall'esecutore nel runtime di shuffle rispetto al runtime complessivo. Se questo valore è elevato per alcuni esecutori, può indicare una distorsione dei dati o una serializzazione dei dati inefficiente. Puoi identificare le fasi con tempi di scrittura di shuffle lunghi nell'interfaccia utente di Spark. Cerca attività anomale all'interno di queste fasi che richiedono più tempo della media per essere completate. Controlla se gli esecutori con tempi di scrittura di shuffle elevati mostrano anche un'attività di I/O del disco elevata. Una serializzazione più efficiente e passaggi di partizionamento aggiuntivi potrebbero essere utili. Un numero molto elevato di scritture di record rispetto alle letture di record può indicare una duplicazione involontaria dei dati dovuta a join inefficienti o trasformazioni errate.
Metriche a livello di applicazione
Progressione delle fasi Questa metrica mostra il numero di fasi in stato di errore, in attesa e in esecuzione. Un numero elevato di fasi non riuscite o in attesa può indicare una distorsione dei dati. Controlla le partizioni dei dati ed esegui il debug del motivo dell'errore della fase utilizzando la scheda Fasi nell'interfaccia utente di Spark.
Esecutori Spark batch Questa metrica mostra il numero di esecutori che potrebbero essere necessari rispetto al numero di esecutori in esecuzione. Una grande differenza tra gli esecutori richiesti e quelli in esecuzione può indicare problemi di scalabilità automatica.
Metriche a livello di VM
Memoria utilizzata Questa metrica mostra la percentuale di memoria della VM in uso. Se la percentuale del master è elevata, può indicare che il driver è sottoposto a pressione della memoria. Per altri nodi VM, una percentuale elevata può indicare che gli esecutori sono out of memory, il che può portare a un'elevata dispersione del disco e a un runtime del workload più lento. Utilizza la UI di Spark per analizzare gli esecutori e verificare la presenza di tempi di GC elevati e di errori delle attività. Inoltre, esegui il debug del codice Spark per la memorizzazione nella cache di set di dati di grandi dimensioni e la trasmissione non necessaria di variabili.

Log job

La pagina Dettagli job batch include una scheda Log job (e i punti salienti dei log) che elenca gli avvisi e gli errori filtrati dai log del job (workload batch). Questa funzionalità consente di identificare rapidamente i problemi critici senza dover analizzare manualmente file di log di grandi dimensioni. Puoi selezionare una Gravità del log (ad esempio Error) dal menu a discesa e aggiungere un Filtro di testo per restringere i risultati. Per eseguire un'analisi più approfondita, fai clic sull'icona Visualizza in Esplora log per aprire i log del batch selezionato in Esplora log.

Visualizza i log dei batch in Cloud Logging
Visualizza i log di Batch in Cloud Logging

Esempio: Esplora log si apre dopo aver scelto Errors dal selettore Gravità nella pagina Dettagli job batch nella console Google Cloud .

Esplora log di Batch.

UI Spark

L'interfaccia utente di Spark raccoglie i dettagli di esecuzione di Apache Spark dai workload batch di Managed Service for Apache Spark. Non è previsto alcun addebito per la funzionalità UI di Spark, che è abilitata per impostazione predefinita.

I dati raccolti dalla funzionalità UI di Spark vengono conservati per 90 giorni. Puoi utilizzare questa interfaccia web per monitorare ed eseguire il debug dei workload Spark senza dover creare un Persistent History Server.

Autorizzazioni e ruoli di Identity and Access Management richiesti

Per utilizzare la funzionalità UI di Spark con i workload batch sono necessarie le seguenti autorizzazioni.

  • Autorizzazione per la raccolta dei dati: dataproc.batches.sparkApplicationWrite. Questa autorizzazione deve essere concessa al account di servizio che esegue i workload batch. Questa autorizzazione è inclusa nel ruolo Managed Service for Apache Spark Worker, che viene concesso automaticamente al account di servizio predefinito di Compute Engine utilizzato da Managed Service for Apache Spark per impostazione predefinita (consulta Service account Managed Service for Apache Spark). Tuttavia, se specifichi un service account personalizzato per il tuo workload batch, devi aggiungere l'autorizzazione dataproc.batches.sparkApplicationWrite a quel account di servizio (in genere concedendo al account di servizio il ruolo Worker di Managed Service for Apache Spark).

  • Autorizzazione di accesso alla UI di Spark: dataproc.batches.sparkApplicationRead. Questa autorizzazione deve essere concessa a un utente per accedere alla UI di Spark nella consoleGoogle Cloud . Questa autorizzazione è inclusa nei ruoli Dataproc Viewer, Dataproc Editor e Dataproc Administrator. Per aprire la UI di Spark nella console Google Cloud , devi disporre di uno di questi ruoli o di un ruolo personalizzato che includa questa autorizzazione.

Apri la UI di Spark

La pagina della UI di Spark è disponibile nei workload batch della console Google Cloud .

  1. Nella console Google Cloud , vai alla pagina Job di Managed Service for Apache Spark.

    Vai ai job Managed Service for Apache Spark

  2. Seleziona la scheda Spark serverless e fai clic su un ID job batch per aprire la relativa pagina Dettagli job.

  3. Fai clic su Visualizza nella UI Spark (accanto a ID applicazione Spark) o su Visualizza UI Spark.

Il link Visualizza nella UI di Spark è disabilitato nei seguenti casi:

Log di Managed Service for Apache Spark

Il logging è abilitato per impostazione predefinita in Managed Service for Apache Spark e i log dei workload vengono conservati anche dopo il completamento di un workload. Managed Service for Apache Spark raccoglie i log dei workload in Cloud Logging. Puoi accedere ai log di Managed Service for Apache Spark nella risorsa Cloud Dataproc Batch in Esplora log.

Esegui query sui log di Managed Service for Apache Spark

Esplora log nella console Google Cloud fornisce un riquadro delle query per aiutarti a creare una query per esaminare i log dei workload batch. Ecco i passaggi che puoi seguire per creare una query per esaminare i log dei workload batch:

  1. Vai a Esplora log

  2. Il progetto corrente è selezionato. Puoi fare clic su Perfeziona ambito progetto per selezionare un altro progetto.
  3. Definisci una query sui log in batch.

    • Utilizza i menu dei filtri per filtrare un workload batch.

      1. In Tutte le risorse, seleziona la risorsa Cloud Managed Service for Apache Spark Batch.

        1. Nel riquadro Seleziona risorsa, seleziona la LOCALITÀ del batch, quindi l'ID BATCH. Questi parametri batch sono elencati nella scheda Spark serverless della pagina Job di Managed Service for Apache Spark nella console Google Cloud .

        2. Fai clic su Applica.

        3. In Seleziona i nomi dei log, inserisci dataproc.googleapis.com nella casella Cerca i nomi dei log per limitare i tipi di log su cui eseguire query. Seleziona uno o più nomi di file di log elencati.

    • Utilizza l'editor di query per filtrare i log specifici della VM.

      1. Specifica il tipo di risorsa e il nome della risorsa VM come mostrato nell'esempio seguente:

        resource.type="cloud_dataproc_batch"
        labels."dataproc.googleapis.com/resource_name"="VM_NAME_PREFIX-BATCH_UUID-VM_SUFFIX"
        
        Note:

        • VM_NAME_PREFIX: utilizza gdpic-rm per i workload batch eseguiti su Managed Service for Apache Spark 3.0 e versioni di runtime successive; utilizza gdpic-srvls-batch per i workload batch eseguiti su versioni di runtime precedenti.
        • BATCH_UUID: l'UUID del job batch è elencato nella pagina Dettagli job (Dettagli batch) batch nella console Google Cloud , che si apre quando fai clic sull'ID job batch nella scheda Spark serverless della pagina Job.

        I log del batch elencano anche l'UUID del batch nel nome della risorsa VM. Ecco un esempio di un file driver.log di un batch:

  4. Fai clic su Esegui query.

Tipi di log e query di esempio di Managed Service for Apache Spark

Il seguente elenco descrive i diversi tipi di log di Managed Service for Apache Spark e fornisce query di esempio di Esplora log per ogni tipo di log.

  1. dataproc.googleapis.com/output: questo file di log contiene l'output del workload batch. Managed Service for Apache Spark trasmette l'output batch allo spazio dei nomi output e imposta il nome file su JOB_ID.driver.log.

    Query di esempio di Esplora log per i log di output:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Foutput"
    

  2. dataproc.googleapis.com/spark: lo spazio dei nomi spark aggrega i log di Spark per i daemon e gli esecutori in esecuzione sulle VM master e worker del cluster Managed Service for Apache Spark. Ogni voce di log include un'etichetta del componente master, worker o executor per identificare l'origine del log, come segue:

    • executor: log degli esecutori del codice utente. In genere, si tratta di log distribuiti.
    • master: log del master del gestore delle risorse autonomo di Spark, simili ai log YARN di Managed Service for Apache Spark ResourceManager.
    • worker: log del worker del gestore delle risorse autonomo di Spark, simili ai log YARN NodeManager di Managed Service for Apache Spark.

    Query di esempio di Esplora log per tutti i log nello spazio dei nomi spark:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fspark"
    

    Query di esempio di Esplora log per i log dei componenti autonomi di Spark nello spazio dei nomi spark:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fspark"
    jsonPayload.component="COMPONENT"
    

  3. dataproc.googleapis.com/startup: lo spazio dei nomi startup include i log di avvio del batch (cluster). Sono inclusi anche i log degli script di inizializzazione. I componenti sono identificati da un'etichetta, ad esempio:

    startup-script[855]: ... activate-component-spark[3050]: ... enable spark-worker
    
    Query di esempio di Esplora log per i log di avvio su una VM specificata:
    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fstartup"
    labels."dataproc.googleapis.com/resource_name"="VM_NAME_PREFIX-BATCH_UUID-VM_SUFFIX"
    
  4. dataproc.googleapis.com/agent: lo spazio dei nomi agent aggrega i log agentici di Managed Service for Apache Spark. Ogni voce di log include l'etichetta del nome file che identifica l'origine del log.

    Query di esempio di Esplora log per i log dell'agente generati da una VM worker specificata:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fagent"
    labels."dataproc.googleapis.com/resource_name"="VM_NAME_PREFIX-BATCHUUID-wWORKER#"
    

  5. dataproc.googleapis.com/autoscaler: lo spazio dei nomi autoscaler aggrega i log del gestore della scalabilità automatica di Managed Service for Apache Spark.

    Query di esempio di Esplora log per i log del gestore della scalabilità automatica generati da una VM worker specificata:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fautoscaler"
    labels."dataproc.googleapis.com/resource_name"="VM_NAME_PREFIX-BATCHUUID-wWORKER#"
    

Per saperne di più, consulta Log di Managed Service for Apache Spark.

Per informazioni sugli audit log di Managed Service for Apache Spark, consulta Audit logging di Managed Service for Apache Spark.

Metriche di workload

Managed Service for Apache Spark fornisce metriche batch e Spark che puoi visualizzare da Esplora metriche o dalla pagina Dettagli job batch nella console Google Cloud .

Metriche batch

Le metriche delle risorse di Managed Service for Apache Spark batch forniscono insight sulle risorse batch, come il numero di esecutori batch. Le metriche batch hanno il prefisso dataproc.googleapis.com/batch.

Esempio di metrica batch in Metrics Explorer.

Metriche Spark

Per impostazione predefinita, Managed Service for Apache Spark abilita la raccolta delle metriche Spark disponibili, a meno che non utilizzi le proprietà di raccolta delle metriche Spark per disabilitare o sostituire la raccolta di una o più metriche Spark.

Le metriche Spark disponibili includono le metriche del driver e dell'esecutore Spark e le metriche di sistema. Le metriche Spark disponibili sono precedute dal prefisso custom.googleapis.com/.

Esempio di metrica Spark in Metrics Explorer.

Configura gli avvisi sulle metriche

Puoi creare avvisi relativi alle metriche di Managed Service for Apache Spark per ricevere notifiche sui problemi relativi ai workload.

Crea grafici

Puoi creare grafici che visualizzano le metriche del workload utilizzando Esplora metriche nella consoleGoogle Cloud . Ad esempio, puoi creare un grafico per visualizzare disk:bytes_used e poi filtrare per batch_id.

Cloud Monitoring

Il monitoraggio utilizza i metadati e le metriche dei workload per fornire insight sullo stato e sulle prestazioni dei workload di Managed Service for Apache Spark. Le metriche dei workload includono le metriche di Spark, le metriche dei batch e le metriche delle operazioni.

Puoi utilizzare Cloud Monitoring nella console Google Cloud per esplorare le metriche, aggiungere grafici, creare dashboard e creare avvisi.

Crea dashboard

Puoi creare una dashboard per monitorare i workload utilizzando le metriche di più progetti e di diversi prodotti Google Cloud . Per saperne di più, consulta Crea e gestisci dashboard personalizzate.

Server di cronologia permanente

Managed Service for Apache Spark crea le risorse di computing necessarie per eseguire un workload, esegue il workload su queste risorse e poi le elimina al termine del workload. Le metriche e gli eventi del workload non vengono conservati dopo il completamento di un workload. Tuttavia, puoi utilizzare un Persistent History Server (PHS) per conservare la cronologia delle applicazioni dei workload (log eventi) in Cloud Storage.

Per utilizzare un PHS con un workload batch, segui questi passaggi:

  1. Crea un server di cronologia permanente (PHS) di Managed Service for Apache Spark.

  2. Specifica il PHS quando invii un workload.

  3. Utilizza il gateway dei componenti per connetterti al PHS e visualizzare i dettagli dell'applicazione, le fasi dello scheduler, i dettagli a livello di attività e le informazioni sull'ambiente e sull'esecutore.

Ottimizzazione automatica

  • Attiva l'ottimizzazione automatica per Managed Service for Apache Spark: puoi attivare l'ottimizzazione automatica per Managed Service for Apache Spark quando invii ogni workload batch Spark ricorrente utilizzando la console Google Cloud , gcloud CLI o l'API Managed Service for Apache Spark.

Console

Per abilitare l'ottimizzazione automatica su ogni workload batch Spark ricorrente, segui questi passaggi:

  1. Nella console Google Cloud , vai alla pagina Job di Managed Service for Apache Spark.

    Vai ai job Managed Service for Apache Spark

  2. Per creare un workload batch, fai clic su Invia job per aprire la pagina Invia un job.

  3. In Seleziona il tipo di computing per il job, verifica che sia selezionato Spark serverless.

  4. Nella sezione Dettagli job serverless:

    1. Specifica un ID job o accetta l'ID predefinito.
    2. Seleziona un Profilo di runtime (o mantieni Configurazione del servizio predefinita per la tua regione), quindi fai clic su Configura nella scheda Riepilogo (o fai clic su Crea nuovo profilo nel menu Profilo di runtime) per aprire il riquadro di configurazione del profilo di runtime.
    3. Nel riquadro di configurazione del profilo di runtime, espandi Configurazione aggiuntiva, quindi fai clic su Modifica accanto ad Altre personalizzazioni.
    4. Nel riquadro Altre personalizzazioni, in Autotuning, fai clic sul pulsante di attivazione/disattivazione Abilita e compila il campo ID coorte, che identifica il batch come uno di una serie di workload ricorrenti. L'analisi assistita da Gemini viene applicata al secondo workload e a quelli successivi inviati con questo ID coorte. Ad esempio, specifica tpch-query1 come ID coorte per un workload pianificato che esegue una query TPC-H giornaliera.
    5. Fai clic su Salva nel riquadro Altre personalizzazioni, quindi fai clic su Usa configurazione (o Salva nuovo profilo) nel riquadro di configurazione del profilo di runtime.
  5. Compila le sezioni File e artefatti ed Esecuzione e proprietà del job nella pagina Invia un job in base alle tue esigenze, quindi fai clic su Invia. Per saperne di più, consulta Invia un workload batch.

gcloud

Esegui il seguente comando gcloud CLI gcloud dataproc batches submit localmente in una finestra del terminale o in Cloud Shell per abilitare l'ottimizzazione automatica su ogni workload Spark ricorrente:

gcloud dataproc batches submit COMMAND \
    --region=REGION \
    --cohort=COHORT \
    other arguments ...

Sostituisci quanto segue:

  • COMMAND: il tipo di workload Spark, ad esempio Spark, PySpark, Spark-Sql o Spark-R.
  • REGION: la regione in cui verrà eseguito il workload.
  • COHORT: il nome della coorte, che identifica il batch come uno di una serie di workload ricorrenti. L'analisi assistita da Gemini viene applicata al secondo workload e a quelli successivi inviati con questo nome di coorte. Ad esempio, specifica TPCH Query 1 come nome della coorte per un workload pianificato che esegue una query TPC-H giornaliera.

API

Includi il nome RuntimeConfig.cohort in una richiesta batches.create per attivare l'ottimizzazione automatica su ogni workload batch Spark ricorrente. L'ottimizzazione automatica viene applicata al secondo workload e a quelli successivi inviati con questo nome di gruppo. Ad esempio, specifica TPCH-Query1 come nome della coorte per un workload pianificato che esegue una query TPC-H giornaliera.

Esempio:

...
runtimeConfig:
  cohort: TPCH-Query1
...