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 relativi ai workload batch di Serverless per Apache Spark .

Risolvere i problemi relativi ai workload dalla Google Cloud console

Quando un job batch non riesce o ha un rendimento scadente, un primo passo consigliato è aprire la pagina Dettagli batch dalla pagina Batch della Google Cloud console.

Utilizzare la scheda Riepilogo: il centro di risoluzione dei problemi

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

Metriche batch in evidenza

La scheda Riepilogo della pagina Dettagli batch include grafici che mostrano i valori delle metriche importanti dei workload batch. I grafici delle metriche vengono compilati al termine del batch e offrono un'indicazione visiva di potenziali problemi come la contesa delle risorse, l'asimmetria dei dati o la pressione della memoria.

Dashboard delle metriche batch.

Tabella delle metriche

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

Metrica Che cosa mostra?
Metriche a livello di esecutore
Rapporto tra tempo di GC JVM e runtime Questa metrica mostra il rapporto tra il tempo di GC (garbage collection) della JVM e il runtime per esecutore. Rapporti elevati possono indicare perdite di memoria all'interno delle attività in esecuzione su determinati esecutori o strutture di dati inefficienti, che possono portare a un'elevata rotazione degli oggetti.
Byte con overflow su disco Questa metrica mostra il numero totale di byte con overflow su disco tra i diversi esecutori. Se un esecutore mostra un numero elevato di byte con overflow su disco, ciò può indicare un'asimmetria dei dati. Se la metrica aumenta nel tempo, ciò può indicare che sono presenti fasi con pressione della 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 rimangono costantemente indietro nelle letture e nelle scritture possono indicare una contesa delle risorse su questi nodi o inefficienze del codice specifico dell'esecutore.
Rapporto tra tempo di scrittura shuffling e runtime La metrica mostra la quantità di tempo che l'esecutore ha trascorso nel runtime di shuffling rispetto al runtime complessivo. Se questo valore è elevato per alcuni esecutori, può indicare un'asimmetria dei dati o una serializzazione dei dati inefficiente. Puoi identificare le fasi con tempi di scrittura shuffling lunghi nella UI di Spark. Cerca le attività anomale all'interno di queste fasi che richiedono più tempo della media per essere completate. Verifica se gli esecutori con tempi di scrittura shuffling elevati mostrano anche un'attività di I/O del disco elevata. Una serializzazione più efficiente e passaggi di partizionamento aggiuntivi potrebbero essere utili. Scritture di record molto grandi rispetto alle letture di record possono indicare una duplicazione non intenzionale dei dati dovuta a join inefficienti o trasformazioni errate.
Metriche a livello di applicazione
Avanzamento delle fasi Questa metrica mostra il numero di fasi in stato di errore, in attesa e in esecuzione. Un numero elevato di fasi in stato di errore o in attesa può indicare un'asimmetria dei dati. Controlla le partizioni dei dati ed esegui il debug del motivo dell'errore della fase utilizzando la scheda Fasi nella UI di Spark.
Esecutori batch Spark 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 è sotto pressione della memoria. Per gli altri nodi VM, una percentuale elevata può indicare che gli esecutori stanno esaurendo la memoria, il che può portare a un elevato overflow su disco e a un runtime dei workload più lento. Utilizza la UI di Spark per analizzare gli esecutori e verificare se il tempo di GC è elevato e se si verificano molti errori delle attività. Esegui anche 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 batch include una sezione Log job che elenca gli avvisi e gli errori filtrati dai log dei job (workload batch). Questa funzionalità consente di identificare rapidamente i problemi critici senza dover analizzare manualmente file di log estesi. 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 batch selezionati in Esplora log.

Visualizza i log batch in Cloud Logging
Visualizza i log batch in Cloud Logging

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

Esplora log batch.

UI Spark

La UI di Spark raccoglie i dettagli di esecuzione di Apache Spark dai workload batch di Serverless per Apache Spark. Non è previsto alcun costo 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 server di cronologia permanente.

Ruoli e autorizzazioni IAM (Identity and Access Management) obbligatori

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

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

  • 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 Google Cloud console. Questa autorizzazione è inclusa nei Dataproc Viewer, Dataproc Editor e Dataproc Administrator ruoli. Per aprire la UI di Spark nella Google Cloud console, devi disporre di uno di questi ruoli o di un ruolo personalizzato che includa questa autorizzazione.

Aprire la UI di Spark

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

  1. Vai alla pagina Sessioni interattive di Serverless per Apache Spark.

    Vai alla pagina Batch di Dataproc

  2. Fai clic su un ID batch per aprire la pagina Dettagli batch.

  3. Fai clic su Visualizza UI Spark nel menu in alto.

Il pulsante Visualizza UI Spark è disattivato nei seguenti casi:

  • Se non viene concessa un'autorizzazione obbligatoria
  • Se deselezioni la casella di controllo Abilita UI Spark nella pagina Dettagli batch
  • Se imposti la proprietà spark.dataproc.appContext.enabled su false quando invii un workload batch

Log di Serverless per Apache Spark

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

Eseguire query sui log di Serverless per Apache Spark

Esplora log nella Google Cloud console fornisce un riquadro di 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 attuale è selezionato. Puoi fare clic su Perfeziona ambito Progetto per selezionare un altro progetto.
  3. Definisci una query per i log batch.

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

      1. In Tutte le risorse, seleziona la risorsa Cloud Dataproc Batch.

        1. Nel riquadro Seleziona risorsa, seleziona la LOCALITÀ del batch, quindi l' ID BATCH. Questi parametri batch sono elencati nella pagina **Batch** di Dataproc nella Google Cloud console.

        2. Fai clic su Applica.

        3. In Seleziona nomi log , inserisci dataproc.googleapis.com nella casella Cerca nomi 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"="gdpic-srvls-batch-BATCH_UUID-VM_SUFFIX"
        
        Note:

        • BATCH_UUID: l'UUID del batch è elencato nella pagina Dettagli batch della Google Cloud console, che si apre quando fai clic sull' ID batch nella pagina Batch.

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

  4. Fai clic su Esegui query.

Tipi di log di Serverless per Apache Spark e query di esempio

Il seguente elenco descrive i diversi tipi di log di Serverless per 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. Serverless per 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 Dataproc. 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 di Spark standalone Resource Manager, simili ai log di Dataproc su Compute Engine YARN ResourceManager.
    • worker: log del worker di Spark standalone Resource Manager, simili ai log NodeManager di Dataproc su Compute Engine YARN.

    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 standalone 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 tutti i log degli script di inizializzazione. I componenti sono identificati dall'etichetta, ad esempio:

    startup-script[855]: ... activate-component-spark[3050]: ... enable spark-worker
    
    Query di esempio di Esplora log per i log di avvio dei log 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"="gdpic-srvls-batch-BATCH_UUID-VM_SUFFIX"
    
  4. dataproc.googleapis.com/agent: lo spazio dei nomi agent aggrega i log degli agent Dataproc. 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 degli agent 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"="gdpic-srvls-batch-BATCHUUID-wWORKER#"
    

  5. dataproc.googleapis.com/autoscaler: lo spazio dei nomi autoscaler aggrega i log di scalabilità automatica di Serverless per Apache Spark.

    Query di esempio di Esplora log per i log degli agent 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"="gdpic-srvls-batch-BATCHUUID-wWORKER#"
    

Per ulteriori informazioni, consulta Log di Dataproc.

Per informazioni sui log di audit di Serverless per Apache Spark, consulta Logging di audit di Dataproc.

Metriche di workload

Serverless per Apache Spark fornisce metriche batch e Spark che puoi visualizzare da Esplora metriche o dalla pagina Dettagli batch della Google Cloud console.

Metriche batch

Le metriche delle risorse batch di Dataproc forniscono informazioni sulle risorse batch, ad esempio il numero di esecutori batch. Le metriche batch hanno il prefisso dataproc.googleapis.com/batch.

Esempio di metrica batch in Esplora metriche.

Metriche Spark

Per impostazione predefinita, Serverless per Apache Spark abilita la raccolta delle metriche Spark disponibili, a meno che tu 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 hanno il prefisso con custom.googleapis.com/.

Esempio di metrica spark in Esplora metriche.

Configurare gli avvisi relativi alle metriche

Puoi creare avvisi relativi alle metriche di Dataproc per ricevere una notifica dei problemi relativi ai workload.

Creare grafici

Puoi creare grafici che visualizzano le metriche dei workload utilizzando lo Metrics Explorer nella Google Cloud console. Ad esempio, puoi creare un grafico per visualizzare disk:bytes_used, quindi filtrare in base a batch_id.

Cloud Monitoring

Monitoring utilizza i metadati e le metriche dei workload per fornire informazioni sullo stato e sul rendimento dei workload di Serverless per Apache Spark. Le metriche dei workload includono le metriche Spark, le metriche batch e le metriche delle operazioni.

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

Creare dashboard

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

Server di cronologia permanente

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

Per utilizzare un PHS con un workload batch:

  1. Crea un server di cronologia permanente (PHS) di Dataproc.

  2. Specifica il PHS quando invii un workload.

  3. Utilizza il gateway dei componenti per connetterti al PHS per 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

  • Abilitare l'ottimizzazione automatica per Serverless per Apache Spark: puoi abilitare l'ottimizzazione automatica per Serverless per Apache Spark quando invii ogni workload batch Spark ricorrente utilizzando la Google Cloud console, l'interfaccia a riga di comando gcloud o l'API Dataproc.

Console

Segui questi passaggi per abilitare l'ottimizzazione automatica su ogni workload batch Spark ricorrente:

  1. Nella Google Cloud console, vai alla pagina Batch di Dataproc.

    Vai alla pagina Batch di Dataproc

  2. Per creare un workload batch, fai clic su Crea.

  3. Nella sezione Container, compila il nome Coorte, che identifica il batch come uno di una serie di workload ricorrenti. L'analisi assistita da Gemini viene applicata al secondo e ai successivi workload inviati con questo nome di coorte. Ad esempio, specifica TPCH-Query1 come nome della coorte per un workload pianificato che esegue una query TPC-H giornaliera.

  4. Compila le altre sezioni della pagina Crea batch in base alle esigenze, quindi fai clic Invia. Per ulteriori informazioni, consulta Inviare un workload batch.

gcloud

Esegui il seguente comando gcloud dataproc batches submit dell'interfaccia a riga di comando gcloud localmente in una finestra del terminale o in Cloud Shell per abilitare l'ottimizzazione automatica su ogni workload batch 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 e ai successivi workload 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 RuntimeConfig.cohort nome in una batches.create per abilitare l'ottimizzazione automatica su ogni workload batch Spark ricorrente. L'ottimizzazione automatica viene applicata al secondo e ai successivi workload inviati con questo nome di coorte. 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
...