Dataproc Persistent History Server

Übersicht

Nachdem Dataproc-Cluster gelöscht wurden, möchten Nutzer möglicherweise Jobverlaufsdateien zu Diagnose- oder anderen Zwecken aufrufen. Der Dataproc Persistent History Server (PHS) bietet eine Benutzeroberfläche, um den Jobverlauf für Jobs aufzurufen, die in aktiven oder gelöschten Dataproc-Clustern ausgeführt werden.

Der Persistent History Server wird in einem Dataproc-Cluster mit einzelnem Knoten ausgeführt und speichert Dateien mit Jobverlauf in Cloud Storage. Außerdem unterstützt er MapReduce-, Spark- und Pig-Jobs. Dieses Feature ist in der Dataproc-Image-Version 1.4-debian10 und höher verfügbar.

Dataproc-Jobcluster einrichten

Sie geben das folgende Flag und die Clusterattribute an, wenn Sie einen Dataproc-Cluster erstellen, der Jobs ausführt und Joblogs speichert, auf die ein Persistent History Server-Cluster zugreifen und diesen anzeigen kann.

  • --enable-component-gateway: Erforderliches Flag. Dieses Flag muss verwendet werden, um das Component Gateway zu aktivieren.
  • dataproc:job.history.to-gcs.enabled: Erforderliches Clusterattribut. Dieses Attribut muss auf „true“ gesetzt sein, um den Jobverlaufsspeicher in Cloud Storage zu aktivieren.
  • spark:spark.history.fs.logDirectory und spark:spark.eventLog.dir Optionale Clusterattribute: Diese Flags geben den Speicherort an, um den Spark-Jobverlauf bzw. die Ereignislogs zu schreiben. Wenn sie verwendet werden, müssen beide Flags festgelegt sein und auf Verzeichnisse im selben Bucket verweisen.
    Beispielattribute:
    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.intermediate-done-dir und mapred:mapreduce.jobhistory.done-dir: Optionale Clusterattribute. Diese Flags geben den Cloud Storage-Speicherort an, um jeweils Zwischen- und endgültige MapReduce-Jobverlaufsdateien zu schreiben. Wenn sie verwendet werden, müssen beide Flags festgelegt sein und auf Verzeichnisse im selben Bucket verweisen. Der Zwischenspeicherort mapreduce.jobhistory.intermediate-done-dir ist ein temporärer Speicher. Die Zwischendateien werden bei Abschluss des MapReduce-Jobs an den Speicherort mapreduce.jobhistory.done-dir verschoben.
    Beispielattribute:
    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
    
  • Die folgenden Attribute steuern das Cloud Storage-Flush-Verhalten für Ereignislogs für Images ab 1.4. Hinweis: Die Standardkonfiguration dieser Attribute ermöglicht die Anzeige von laufenden Jobs in der Spark History Server-UI für Cluster, die Cloud Storage zum Speichern von Spark-Ereignislogs verwenden.
    spark:spark.history.fs.gs.outputstream.type(default:BASIC)
    spark:spark.history.fs.gs.outputstream.sync.min.interval.ms (default: 5000ms).
    
  1. Führen Sie den Befehl gcloud dataproc clusters create aus, um einen Jobcluster zu erstellen. Der Cluster muss mit Image 1.4-debian10 oder höher erstellt werden. Hinweis: Zur besseren Lesbarkeit werden die Flag-Werte --property unten in separaten Zeilen angezeigt. Wenn Sie den Befehl ausführen, müssen alle kommagetrennten --property-Flag-Werte in einer Zeile angegeben werden.
    gcloud dataproc clusters create cluster-name \
        --region=region \
        --image-version=1.4-debian10 \
        --enable-component-gateway \
        --properties='dataproc:job.history.to-gcs.enabled=true,
    spark:spark.history.fs.logDirectory=gs://bucket-name/directory-name/spark-job-history,
    spark:spark.eventLog.dir=gs://bucket-name/directory/spark-job-history,
    mapred:mapreduce.jobhistory.done-dir=gs://bucket-name/directory/mapreduce-job-history/done,
    mapred:mapreduce.jobhistory.intermediate-done-dir=gs://bucket-name/directory-name/mapreduce-job-history/intermediate-done'
    

Sie können den folgenden vereinfachten Befehl ausführen, damit Dataproc die Cloud Storage-Speicherorte für Jobverlaufsdateien einrichtet.

gcloud dataproc clusters create cluster-name \
    --region=region \
    --image-version=1.4-debian10 \
    --enable-component-gateway \
    --properties='dataproc:job.history.to-gcs.enabled=true'

Wenn Sie den oben vereinfachten Befehl verwenden, werden Jobverlaufsdateien im Dataproc-Temp-Bucket in den Standardverzeichnissen gespeichert: /spark-job-history, /mapreduce-job-history/done, und /mapreduce-job-history/intermediate-done. Der temporäre Cloud Storage-Speicherort wird in der Ausgabe des Befehls gcloud dataproc clusters describe cluster-name --region=region aufgeführt. Der Cloud Storage-Speicherort der Jobverlaufsdateien wird auch in den Dateien /etc/spark/conf/spark-defaults.conf und /etc/hadoop/conf/mapred-site.xml des Clusters aufgeführt.

Beispiele nach SSH-Verbindung herstellen zu dem Masterknoten des Jobclusters:

cat /etc/spark/conf/spark-defaults.conf
...
spark.history.fs.logDirectory=gs://temp-bucket/spark-job-history
spark.eventLog.dir=gs://temp-bucket/spark-job-history
cat /etc/hadoop/conf/mapred-site.xml
...
<property>
  <name>mapreduce.jobhistory.done-dir</name>
  <value>gs://temp-bucket/mapreduce-job-history/done</value>
</property>
<property>
  <name>mapreduce.jobhistory.intermediate-done-dir</name>
  <value>gs://temp-bucket/mapreduce-job-history/done_intermediate</value>
</property>

Persistent History Server einrichten

Geben Sie beim Erstellen eines PHS-Einzel-Knoten-Clusters die folgenden Flag- und Clusterattribute an:

  • --enable-component-gateway: Erforderliches Flag. Dieses Flag muss verwendet werden, um das Component Gateway zu aktivieren.
  • spark:spark.history.fs.logDirectory: Erforderliches Clusterattribut, um den nichtflüchtigen Spark-Jobverlauf zu aktivieren. Dieses Attribut gibt den Cloud Storage-Bucket und die Verzeichnisse an, in denen der PHS auf Spark-Jobverlaufslogs zugreift, die von Jobclustern geschrieben wurden (siehe Dataproc-Jobcluster einrichten). Verwenden Sie Sternchen nicht als Platzhalter (z. B. gs://bucket-name/*/spark-job-history), um bestimmte Bucket-Verzeichnisse anzugeben, damit der PHS-Server mehrere Verzeichnisse im angegebenen Bucket abgleichen kann, in die verschiedene Jobcluster geschrieben wurden. Siehe Hinweis zur Effizienz: Mid-Path-Platzhalter verwenden.
  • mapred:mapreduce.jobhistory.read-only.dir-pattern: Erforderliches Clusterattribut, um den nichtflüchtigen MapReduce-Jobverlauf zu aktivieren. Dieses Attribut gibt die Cloud Storage-Bucket-Verzeichnisse an, in denen die PHS auf MapReduce-Jobverlaufslogs zugreifen, die von Jobclustern geschrieben wurden (siehe Jobcluster einrichten). Statt bestimmte Bucket-Verzeichnisse anzugeben, verwenden Sie Sternchen als Platzhalter (z. B. gs://bucket-name/*/mapreduce-job-history/done), damit der PHS-Server mehrere Verzeichnisse im angegebenen Bucket abzugleichen, die mit verschiedenen Jobclustern geschrieben werden (siehe Hinweis zur Effizienz: Mid-Path-Platzhalter verwenden)
  1. Führen Sie den Befehl gcloud dataproc clusters create aus, um einen Dataproc-PHS-Cluster mit einem einzelnen Knoten zu erstellen.
    gcloud dataproc clusters create cluster-name \
        --single-node \
        --region=region \
        --image-version=1.4-debian10 \
        --enable-component-gateway \
        --properties='spark:spark.history.fs.logDirectory=gs://bucket-name/*/spark-job-history,mapred:mapreduce.jobhistory.read-only.dir-pattern=gs://bucket-name/*/mapreduce-job-history/done'
    

Rufen Sie in der Cloud Console die Seite Clusterdetails des PHS-Einzelknotenclusters auf und klicken Sie dann auf den Tab Weboberflächen. Klicken Sie unter Component Gateway auf "MapReduce-Jobverlauf" oder "Spark-History Server", um die UIs für MapReduce und Spark-Jobverlauf aufzurufen.

Benutzeroberfläche des Spark-Verlaufsservers

Der folgende Screenshot zeigt die UI des Spark-History Servers mit Links zu Spark-Jobs, die auf job-cluster-1 und job-cluster-2 ausgeführt werden, nachdem die spark.history.fs.logDirectory und spark:spark.eventLog.dir der Jobcluster und die spark.history.fs.logDirectory-Speicherorte des PHS-Clusters folgendermaßen erstellt wurden:

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

Sie können Jobs nach Anwendungsname in der Benutzeroberfläche des Spark-Verlaufsservers auflisten, indem Sie den Namen in das Suchfeld eingeben. App-Namen können auf eine der folgenden Arten festgelegt werden (nach Priorität aufgelistet):

  1. Wird im Anwendungscode beim Erstellen des Spark-Kontexts festgelegt
  2. Wird vom Attribut spark.app.name festgelegt, wenn der Job gesendet wird
  3. Setzen Sie von Dataproc den vollständigen REST-Ressourcennamen für den Job (projects/project-id/regions/region/jobs/job-id).

Ereignisprotokolle

Die Spark History Server-UI bietet eine Schaltfläche Ereignislog, auf die Sie klicken können, um Spark-Ereignislogs herunterzuladen. Diese Logs sind nützlich, um den Lebenszyklus der Spark-Anwendung zu untersuchen.

Spark-Jobs

Spark-Anwendungen sind in mehrere Jobs unterteilt, die weiter in mehrere Phasen unterteilt werden. Jede Phase kann mehrere Aufgaben enthalten, die auf Executor-Knoten (Workern) ausgeführt werden.

  • Klicken Sie in der UI auf eine Spark-Anwendungs-ID, um die Seite "Spark-Jobs" zu öffnen, die eine Ereigniszeitachse und eine Zusammenfassung der Jobs innerhalb der Anwendung enthält.

  • Klicken Sie auf einen Job, um die Seite "Jobdetails" mit einem gerichteten azyklischen Graphen (Directed Acyclic Graph, DAG) und einer Zusammenfassung der Jobphasen zu öffnen.

  • Klicken Sie auf eine Phase oder verwenden Sie den Tab "Phasen", um eine Phase auszuwählen, um die Seite "Phasendetails" zu öffnen.

    Stage Details umfassen eine DAG-Visualisierung, eine Ereigniszeitachse und Messwerte für die Aufgaben innerhalb der Phase. Auf dieser Seite können Sie Probleme mit strangulierten Aufgaben, Planerverzögerungen und Speichermangel beheben. Der DAG-Visualisierer zeigt die Codezeile, aus der die Phase abgeleitet ist, sodass Sie Probleme wieder im Code verfolgen können.

  • Klicken Sie auf den Tab Executors für Informationen über die Treiber- und Executor-Knoten der Spark-Anwendung.

    Wichtige Informationen auf dieser Seite umfassen die Anzahl der Kerne und die Anzahl der Aufgaben, die auf jedem Executor ausgeführt wurden.