Server di cronologia permanente Dataproc

Panoramica

Il server di cronologia permanente (PHS) di Dataproc offre interfacce web per visualizzare la cronologia dei job per i job eseguiti su cluster Dataproc attivi o eliminati. È disponibile in Dataproc immagine versione 1.5 e successive ed è eseguito su uncluster Dataproc a nodo singolo. Fornisce interfacce web i seguenti file e dati:

  • File di cronologia dei job MapReduce e Spark

  • File di dati della sequenza temporale dell'applicazione creati da YARN Timeline Service v2 e archiviati in un'istanza Bigtable.

  • Log di aggregazione YARN

Il server di cronologia permanente accede e visualizza i file di cronologia dei job Spark e MapReduce e i file di log YARN scritti in Cloud Storage durante la durata dei cluster dei job di Dataproc.

Crea un cluster PHS

Puoi eseguire il comando gcloud dataproc clusters create seguente in un terminale locale o in Cloud Shell con i seguenti flag e proprietà del cluster per creare un cluster a nodo singolo di Dataproc Persistent History Server.

gcloud dataproc clusters create cluster-name \
    --region=region \
    --single-node \
    --enable-component-gateway \
    --properties=properties

Note:

  • --enable-component-gateway: necessario per abilitare le interfacce web di Gateway Gateway nel cluster PHS.
  • Aggiungi una o più delle seguenti proprietà del cluster per abilitare la visualizzazione permanente e la visualizzazione della cronologia dei job e di altri log utilizzando il server di cronologia permanente.

    Esempio:

    --properties=spark:spark.history.fs.logDirectory=gs://bucket-name/*/spark-job-history 
    --properties=mapred:mapreduce.jobhistory.read-only.dir-pattern=gs://bucket-name/*/mapreduce-job-history/done

    • yarn:yarn.nodemanager.remote-app-log-dir=gs://bucket-name/*/yarn-logs: Aggiungi questa proprietà per specificare la località di Cloud Storage in cui il PHS accederà ai log YARN scritti dai cluster di job (consulta la sezione Creare un cluster di job). Il valore mostrato utilizza un carattere jolly "*" per consentire al PHS di far corrispondere più directory nel bucket specificato, scritto da cluster di job diversi (vedi Considerazione dell'efficienza: utilizzo di caratteri jolly nel percorso medio).
    • spark:spark.history.fs.logDirectory=gs://bucket-name/*/spark-job-history: aggiungi questa proprietà per abilitare la cronologia dei job Spark permanente. Questa proprietà specifica la località in cui il PHS accederà ai log della cronologia dei job scritti dai cluster dei job (vedi Creazione di un cluster di job). Il valore mostrato utilizza un carattere jolly "*" per consentire al PHS di far corrispondere più directory nel bucket specificato, scritto da cluster di job diversi (vedi Considerazione dell'efficienza: utilizzo di caratteri jolly nel percorso medio).

      Nota: nei cluster Dataproc 2.0 e versioni successive, anche le seguenti proprietà devono essere impostate per abilitare i log della cronologia PHS Spark (vedi Opzioni di configurazione del server della cronologia Spark). Il valore spark.history.custom.executor.log.url è un valore letterale che contiene {{PLACEHOLDERS}} per le variabili che verranno impostate dal server di cronologia permanente. Queste variabili non sono impostate dagli utenti, trasmetti il valore della proprietà come mostrato.

      --properties=spark:spark.history.custom.executor.log.url.applyIncompleteApplication=false
      --properties=spark:spark.history.custom.executor.log.url={{YARN_LOG_SERVER_URL}}/{{NM_HOST}}:{{NM_PORT}}/{{CONTAINER_ID}}/{{CONTAINER_ID}}/{{USER}}/{{FILE_NAME}}
      
    • mapred:mapreduce.jobhistory.read-only.dir-pattern=gs://bucket-name/*/mapreduce-job-history/done: aggiungi questa proprietà per abilitare la cronologia dei job MapReduce permanente. Questa proprietà specifica la località di Cloud Storage in cui il sistema PHS accederà ai log della cronologia dei job MapReduce scritti dai cluster dei job (vedi Creazione di un cluster dei job). Il valore mostrato utilizza un carattere jolly "*" per consentire al PHS di far corrispondere più directory nel bucket specificato, scritto da cluster di job diversi (vedi Considerazione dell'efficienza: utilizzo di caratteri jolly nel percorso medio).

    • dataproc:yarn.atsv2.bigtable.instance=projects/project-id/instance_id/bigtable-instance-id: dopo aver configurato il servizio di sequenza temporale Yarn 2, aggiungi questa proprietà per utilizzare il cluster PHS per visualizzare i dati della sequenza temporale sulle interfacce web YARN Application Timeline Service V2 e Tez (vedi le interfacce web del componente gateway).

Creare un cluster di job Dataproc

Puoi eseguire il comando seguente in un terminale locale o in Cloud Shell per creare un cluster di job Dataproc che scrive i file della cronologia dei job in un server di cronologia permanente (PHS).

gcloud dataproc clusters create cluster-name \
    --region=region \
    --enable-component-gateway \
    --properties=properties
    other args ...

Note:

  • --enable-component-gateway: questo flag è necessario per abilitare le interfacce web di Component Gateway nel cluster del job.
  • Aggiungi una o più delle seguenti proprietà del cluster per impostare località Cloud Storage non predefinite relative a PHS e altre proprietà del cluster del job.

    Esempio:

    --properties=spark:spark.history.fs.logDirectory=gs://bucket-name/job-cluster-1/spark-job-history 
    --properties=mapred:mapreduce.jobhistory.read-only.dir-pattern=gs://bucket-name/job-cluster-1/mapreduce-job-history/done
    • yarn:yarn.nodemanager.remote-app-log-dir: Per impostazione predefinita, i log YARN aggregati sono abilitati sui cluster di job Dataproc e sono scritti nel bucket temporaneo del cluster. Aggiungi questa proprietà per specificare una località di Cloud Storage diversa in cui il cluster scriverà i log di aggregazione per l'accesso da parte del server di cronologia permanente.
      yarn:yarn.nodemanager.remote-app-log-dir=gs://bucket-name/directory-name/yarn-logs
      
    • spark:spark.history.fs.logDirectory e spark:spark.eventLog.dir: Per impostazione predefinita, i file di cronologia dei job di Spark vengono salvati nel cluster temp bucket nella directory /spark-job-history. Puoi aggiungere queste proprietà per specificare località di Cloud Storage diverse per i file. Se vengono utilizzate entrambe le proprietà, devono puntare a directory nello stesso bucket.
      spark:spark.history.fs.logDirectory=gs://bucket-name/directory-name/spark-job-history,
      spark:spark.eventLog.dir=gs://bucket-name/directory-name/spark-job-history
      
    • mapred:mapreduce.jobhistory.done-dir e mapred:mapreduce.jobhistory.intermediate-done-dir: Per impostazione predefinita, i file di cronologia dei job di MapReduce vengono salvati nel cluster temp bucket nelle directory /mapreduce-job-history/done e /mapreduce-job-history/intermediate-done. La località intermedia mapreduce.jobhistory.intermediate-done-dir è uno spazio di archiviazione temporaneo; i file intermedi vengono spostati nella posizione mapreduce.jobhistory.done-dir al completamento del job MapReduce. Puoi aggiungere queste proprietà per specificare località Cloud Storage diverse per questi file. Se vengono utilizzate entrambe, le proprietà devono indirizzare a directory nello stesso bucket.
      mapred:mapreduce.jobhistory.done-dir=gs://bucket-name/directory-name/mapreduce-job-history/done,
      mapred:mapreduce.jobhistory.intermediate-done-dir=gs://bucket-name/directory-name/mapreduce-job-history/intermediate-done
      
    • spark:spark.history.fs.gs.outputstream.type e spark:spark.history.fs.gs.outputstream.sync.min.interval.ms: aggiungi queste proprietà connettore Cloud Storage per modificare il comportamento predefinito del modo in cui il cluster del job invia i dati a Cloud Storage. L'impostazione predefinita per spark:spark.history.fs.gs.outputstream.type è BASIC, che invia i dati a Cloud Storage dopo il completamento del job. Puoi cambiare questa impostazione in FLUSHABLE_COMPOSITE per modificare il comportamento dello svuotamento in modo da copiare i dati in Cloud Storage a intervalli regolari mentre il job è in esecuzione.
      spark:spark.history.fs.gs.outputstream.type=FLUSHABLE_COMPOSITE
      
      L'elemento predefinito, spark:spark.history.fs.gs.outputstream.sync.min.interval.ms, che controlla la frequenza con cui i dati vengono trasferiti in Cloud Storage, è 5000ms e può essere modificato in un intervallo di tempo ms diverso:
      spark:spark.history.fs.gs.outputstream.sync.min.interval.ms=intervalms
      
      Nota: per impostare queste proprietà, la versione immagine del cluster del job Dataproc deve utilizzare la versione 2.2.0 o successiva del connettore Cloud Storage. Puoi verificare la versione del connettore installata sulle versioni dell'immagine dalla pagina Elenco delle versioni dell'immagine Proproc.
    • dataproc:yarn.atsv2.bigtable.instance: dopo aver configurato il servizio di sequenza temporale Yarn v2, aggiungi questa proprietà per scrivere i dati della sequenza temporale di YARN sull'istanza Bigtable per la visualizzazione sulle interfacce web SARN Application Timeline Service V2 e Tez. Nota: la creazione del cluster avrà esito negativo se l'istanza Bigtable non esiste.
      dataproc:yarn.atsv2.bigtable.instance=projects/project-id/instance_id/bigtable-instance-id
      

Utilizzo di PHS con carichi di lavoro in batch Spark

Per utilizzare il server di cronologia permanente con Dataproc Cloud per i carichi di lavoro batch di Spark:

  1. Crea un cluster PHS.

  2. Seleziona o specifica il cluster PHS quando invii un carico di lavoro batch Spark.

Utilizzare PHS con Dataproc su Google Kubernetes Engine

Per utilizzare il server di cronologia permanente con Dataproc su GKE:

  1. Crea un cluster PHS.

  2. Seleziona o specifica il cluster PHS quando crei un cluster virtuale di Dataproc su GKE.

Interfacce web del componente Gateway

Nella Google Cloud Console, dalla pagina Cluster di Dataproc, fai clic sul nome del cluster PHS per aprire la pagina Dettagli cluster. Nella scheda Interfacce web, seleziona i link Gateway dei componenti per aprire le interfacce web in esecuzione nel cluster PHS.

Interfaccia web di Spark History Server

Lo screenshot seguente mostra l'interfaccia web di Spark History Server che mostra i link ai job Spark eseguiti su job-cluster-1 e job-cluster-2 dopo aver configurato le località spark.history.fs.logDirectory dei cluster di job spark.history.fs.logDirectory e spark:spark.eventLog.dir e spark.history.fs.logDirectory del cluster PHS come segue:

job-cluster-1 gs://example-cloud-storage-bucket/job-cluster-1/spark-job-cronologia
job-cluster-2 gs://example-cloud-storage-bucket/job-cluster-2/spark-job-history
phs-cluster gs://example-cloud-storage-bucket/*/spark-job-cronologia

Puoi elencare i job per nome dell'app nell'interfaccia web di Spark History Server inserendo un nome per l'app nella casella di ricerca. Il nome dell'app può essere impostato in uno dei seguenti modi (elencati per priorità):

  1. Impostato all'interno del codice dell'applicazione durante la creazione del contesto Spark
  2. Impostata dalla proprietà spark.app.name quando viene inviato il job
  3. Impostata da Dataproc sul nome completo di risorsa REST per il job (projects/project-id/regions/region/jobs/job-id)

Gli utenti possono inserire un termine per il nome di un'app o di una risorsa nella casella Cerca per trovare ed elencare i job.

Log eventi

L'interfaccia web di Spark History Server offre un pulsante Event Log che ti consente di scaricare i log degli eventi Spark. Questi log sono utili per esaminare il ciclo di vita dell'applicazione Spark.

Offerte di lavoro Spark

Le applicazioni Spark sono suddivise in più job, che sono ulteriormente suddivisi in più fasi. Ogni fase può avere più attività, che vengono eseguite su nodi esecutori (lavoratori).

  • Fai clic su un ID app Spark nell'interfaccia web per aprire la pagina Spark Jobs, che fornisce una sequenza temporale dell'evento e un riepilogo dei job all'interno dell'applicazione.

  • Fai clic su un job per aprire una pagina Dettagli job con un grafico aciclico orientato (DAG) e un riepilogo delle fasi del job.

  • Fai clic su una fase o utilizza la scheda Fasi per selezionare una fase per aprire la pagina Dettagli fase.

    I dettagli della fase includono una visualizzazione DAG, una sequenza temporale di eventi e metriche per le attività all'interno della fase. Puoi utilizzare questa pagina per risolvere i problemi relativi a attività strangolate, ritardi dovuti allo scheduler ed errori di memoria insufficiente. Il visualizzatore DAG mostra la riga di codice da cui viene ricavata la fase, aiutandoti a tenere traccia dei problemi al codice.

  • Fai clic sulla scheda Esecutori per informazioni sui nodi driver ed esecutori di applicazioni Spark.

    Alcune informazioni importanti in questa pagina includono il numero di core e il numero di attività eseguite su ciascun esecutore.

Interfaccia web Tez

Tez è il motore di esecuzione predefinito per Hive e Pig su Dataproc. L'invio di un job Hive su un cluster di job Dataproc avvia un'applicazione Tez (vedi Utilizzo di Apache Hive su Dataproc).

Se hai configurato Yarn Timeline Service v2 e hai impostato la proprietà dataproc:yarn.atsv2.bigtable.instance quando hai creato i cluster dei job PHS e Dataproc, YARN scrive i dati della sequenza temporale dei job Hive e Pig nell'istanza Bigtable specificata per il recupero e la visualizzazione sull'interfaccia web Tez in esecuzione sul server PHS.

Interfaccia web di YARN Application Timeline V2

Se hai configurato Yarn Timeline Service v2 e hai impostato la proprietà dataproc:yarn.atsv2.bigtable.instance quando hai creato i cluster del job PHS e Dataproc, YARN scrive i dati della sequenza temporale del job generati nell'istanza Bigtable specificata per il recupero e la visualizzazione sull'interfaccia web del servizio applicazione YARN in esecuzione sul server PHS. I job Dataproc sono elencati nella scheda Attività di flusso nell'interfaccia web.

Configura servizio cronologia del filato v2

Per configurare Yarn Timeline Service v2, configura un'istanza Bigtable e, se necessario, controlla i ruoli dell'account di servizio nel seguente modo:

  1. Crea un'istanza Bigtable.

  2. Controlla i ruoli dell'account di servizio, se necessario. L'account di servizio VM predefinito utilizzato dalle VM del cluster Dataproc ha le autorizzazioni necessarie per creare e configurare l'istanza Bigtable per il servizio di cronologia YARN. Se crei il tuo job o il cluster PHS con un account VM Service gestito dall'utente, l'account deve avere il ruolo Bigtable Administrator o Bigtable User.

Schema tabella obbligatorio

Il supporto di Dataproc PHS per YARN Timeline Service v2 richiede uno schema specifico creato nell'istanza Bigtable. Dataproc crea lo schema richiesto quando viene creato un cluster di job o un cluster PHS con la proprietà dataproc:yarn.atsv2.bigtable.instance impostata in modo da puntare all'istanza Bigtable.

Di seguito è riportato lo schema di istanza Bigtable richiesto:

Tabelle Famiglie di colonne
prod.timelineservice.application c,i,m
produzione.timeline.app_flow m
prod.timelineservice.entity c,i,m
prod.timelineservice.flowactivity i
prod.timelineservice.flowrun i
prod.timelineservice.subapplication c,i,m

Raccolta di garbage Bigtable

Puoi configurare la funzionalità Bigtable Garbage Collection in base all'età per le tabelle ATSv2:

  • Installa cbt, inclusa la creazione di .cbrtc file.

  • Crea il criterio di garbage collection di ATSv2 basato sull'età:

export NUMBER_OF_DAYS = number \
cbt setgcpolicy prod.timelineservice.application c maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.application i maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.application m maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.app_flow m maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.entity c maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.entity i maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.entity m maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.flowactivity i maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.flowrun i maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.subapplication c maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.subapplication i maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.subapplication m maxage=${NUMBER_OF_DAYS}

Note:

NUMBER_OF_DAYS: il numero massimo di giorni è 30d.