Batcharbeitslasten überwachen und Fehler beheben

In diesem Dokument werden die Tools und Dateien beschrieben, die Sie zum Überwachen und Beheben von Fehlern bei Batcharbeitslasten von Managed Service for Apache Spark verwenden können.

Fehlerbehebung bei Arbeitslasten über die Google Cloud Console

Wenn ein Batchjob fehlschlägt oder eine schlechte Leistung aufweist, sollten Sie als Erstes die Seite Batchdetails aufrufen. Sie finden sie in der Google Cloud Console auf der Seite Batches.

Tab „Zusammenfassung“: Ihre zentrale Anlaufstelle für die Fehlerbehebung

Auf dem Tab Zusammenfassung, der standardmäßig geöffnet wird, wenn die Seite Batchdetails aufgerufen wird, sehen Sie wichtige Messwerte und gefilterte Logs, mit denen Sie den Batchstatus schnell einschätzen können. Nach dieser ersten Bewertung können Sie mit spezialisierteren Tools, die auf der Seite Batchdetails verfügbar sind, eine detailliertere Analyse durchführen, z. B. mit der Spark-Benutzeroberfläche, dem Log-Explorer und Gemini Cloud Assist.

Highlights von Batchmesswerten

Der Tab Zusammenfassung auf der Seite Batchdetails enthält Diagramme mit wichtigen Messwertwerten für Batcharbeitslasten. Die Messwertdiagramme werden nach Abschluss des Vorgangs gefüllt und bieten eine visuelle Darstellung potenzieller Probleme wie Ressourcenkonflikte, Datenverzerrung oder Speicherauslastung.

Dashboard mit Batchmesswerten

Messwerttabelle

In der folgenden Tabelle sind die Messwerte für Spark-Arbeitslasten aufgeführt, die auf der Seite Batchdetails in der Google Cloud Console angezeigt werden. Außerdem wird beschrieben, wie Messwertwerte Aufschluss über den Status und die Leistung von Arbeitslasten geben können.

Messwert Was wird angezeigt?
Messwerte auf Executor-Ebene
Verhältnis von JVM-GC-Zeit zur Laufzeit Dieser Messwert gibt das Verhältnis der JVM-GC-Zeit (Garbage Collection) zur Laufzeit pro Executor an. Hohe Raten können auf Speicherlecks in Aufgaben hinweisen, die auf bestimmten Executors ausgeführt werden, oder auf ineffiziente Datenstrukturen, die zu einem hohen Objekt-Churn führen können.
An Laufwerk übergebene Byte Dieser Messwert gibt die Gesamtzahl der auf die Festplatte ausgelagerten Bytes für verschiedene Executors an. Wenn für einen Executor eine hohe Anzahl von auf die Festplatte ausgelagerten Byte angezeigt wird, kann dies auf eine Datenabweichung hindeuten. Wenn der Messwert im Laufe der Zeit steigt, kann dies auf Phasen mit Arbeitsspeicherdruck oder Arbeitsspeicherlecks hindeuten.
Gelesene und geschriebene Byte Dieser Messwert zeigt die geschriebenen im Vergleich zu den gelesenen Bytes pro Executor. Große Abweichungen bei den gelesenen oder geschriebenen Bytes können auf Szenarien hinweisen, in denen replizierte Joins zu einer Datenverstärkung auf bestimmten Executors führen.
Gelesene und geschriebene Datensätze Dieser Messwert zeigt die Anzahl der gelesenen und geschriebenen Datensätze pro Executor. Eine große Anzahl gelesener Datensätze bei einer geringen Anzahl geschriebener Datensätze kann auf einen Engpass in der Verarbeitungslogik bestimmter Executors hinweisen, der dazu führt, dass Datensätze gelesen werden, während gewartet wird. Executors, die bei Lese- und Schreibvorgängen immer wieder zurückbleiben, können auf Ressourcenkonflikte auf diesen Knoten oder auf ineffizienten Executor-spezifischen Code hinweisen.
Verhältnis von Shuffle-Schreibzeit zu Laufzeit Der Messwert gibt an, wie viel Zeit der Executor im Vergleich zur Gesamtlaufzeit in der Shuffle-Laufzeit verbracht hat. Wenn dieser Wert für einige Executors hoch ist, kann dies auf eine Datenabweichung oder eine ineffiziente Datenserialisierung hinweisen. In der Spark-Benutzeroberfläche können Sie Phasen mit langen Shuffle-Schreibzeiten identifizieren. Suchen Sie in diesen Phasen nach Ausreißeraufgaben, deren Ausführung länger als die durchschnittliche Zeit dauert. Prüfen Sie, ob bei den Executors mit hohen Shuffle-Schreibzeiten auch eine hohe Laufwerks-E/A-Aktivität zu beobachten ist. Eine effizientere Serialisierung und zusätzliche Partitionierungsschritte können helfen. Sehr große Schreibvorgänge im Vergleich zu Lesevorgängen können auf eine unbeabsichtigte Datenduplizierung aufgrund ineffizienter Joins oder falscher Transformationen hinweisen.
Messwerte auf Anwendungsebene
Phasenfortschritt Dieser Messwert gibt die Anzahl der Phasen in fehlgeschlagenen, wartenden und laufenden Phasen an. Eine große Anzahl fehlgeschlagener oder ausstehender Phasen kann auf Datenverzerrung hinweisen. Suchen Sie nach Datenpartitionen und beheben Sie den Grund für den Fehler der Phase auf dem Tab Stages (Phasen) in der Spark-Benutzeroberfläche.
Batch-Spark-Executors Dieser Messwert gibt die Anzahl der Executors an, die möglicherweise erforderlich sind, im Vergleich zur Anzahl der ausgeführten Executors. Ein großer Unterschied zwischen erforderlichen und aktiven Executors kann auf Probleme mit dem Autoscaling hinweisen.
Messwerte auf VM-Ebene
Verwendeter Arbeitsspeicher Dieser Messwert gibt den Prozentsatz des verwendeten VM-Arbeitsspeichers an. Wenn der Master-Prozentsatz hoch ist, kann dies darauf hindeuten, dass der Treiber unter Arbeitsspeicherdruck steht. Bei anderen VM-Knoten kann ein hoher Prozentsatz darauf hindeuten, dass die Executors nicht mehr genügend Arbeitsspeicher haben, was zu einem hohen Disk-Spillage und einer langsameren Ausführung der Arbeitslast führen kann. Mit der Spark-Benutzeroberfläche können Sie Executors analysieren, um nach einer hohen GC-Zeit und einer hohen Anzahl von Taskfehlern zu suchen. Außerdem können Sie Spark-Code für das Caching großer Datasets und das unnötige Broadcasten von Variablen debuggen.

Jobprotokolle

Die Seite Batchdetails enthält den Bereich Joblogs, in dem Warnungen und Fehler aus den Joblogs (Batcharbeitslast) aufgeführt sind. Mit dieser Funktion lassen sich kritische Probleme schnell erkennen, ohne dass umfangreiche Logdateien manuell analysiert werden müssen. Sie können im Drop-down-Menü einen Schweregrad für das Log auswählen (z. B. Error) und einen Textfilter hinzufügen, um die Ergebnisse einzugrenzen. Für eine detailliertere Analyse klicken Sie auf das Symbol Im Log-Explorer ansehen, um die ausgewählten Batchlogs im Log-Explorer zu öffnen.

Batch-Logs in Cloud Logging ansehen
Batch-Logs in Cloud Logging ansehen

Beispiel: Der Log-Explorer wird geöffnet, nachdem Sie in der Google Cloud Console auf der Seite Batchdetails im Schweregrad-Selektor Errors ausgewählt haben.

Batch-Log-Explorer

Spark-UI

In der Spark-UI werden Ausführungsdetails zu Apache Spark aus Batcharbeitslasten von Managed Service for Apache Spark erfasst. Für die Spark-UI-Funktion, die standardmäßig aktiviert ist, fallen keine Gebühren an.

Von der Spark UI-Funktion erfasste Daten werden 90 Tage lang aufbewahrt. Mit dieser Weboberfläche können Sie Spark-Arbeitslasten überwachen und debuggen, ohne einen Persistent History Server erstellen zu müssen.

Erforderliche IAM-Berechtigungen und -Rollen (Identity and Access Management)

Die folgenden Berechtigungen sind erforderlich, um die Spark-UI-Funktion mit Batcharbeitslasten zu verwenden.

  • Berechtigung zur Datenerhebung: dataproc.batches.sparkApplicationWrite. Diese Berechtigung muss dem Dienstkonto gewährt werden, mit dem Batcharbeitslasten ausgeführt werden. Diese Berechtigung ist in der Rolle Managed Service for Apache Spark Worker enthalten, die dem standardmäßigen Compute Engine-Dienstkonto, das standardmäßig von Managed Service for Apache Spark verwendet wird, automatisch gewährt wird (siehe Dienstkonto für Managed Service for Apache Spark). Wenn Sie jedoch ein benutzerdefiniertes Dienstkonto für Ihren Batch-Arbeitslast angeben, müssen Sie diesem Dienstkonto die Berechtigung dataproc.batches.sparkApplicationWrite hinzufügen (in der Regel, indem Sie dem Dienstkonto die Rolle „Managed Service for Apache Spark“ Worker zuweisen).

  • Berechtigung für den Zugriff auf die Spark-UI: dataproc.batches.sparkApplicationRead. Diese Berechtigung muss einem Nutzer gewährt werden, damit er in derGoogle Cloud -Konsole auf die Spark-UI zugreifen kann. Diese Berechtigung ist in den Rollen Dataproc Viewer, Dataproc Editor und Dataproc Administrator enthalten. Wenn Sie die Spark-UI in der Google Cloud -Konsole öffnen möchten, benötigen Sie eine dieser Rollen oder eine benutzerdefinierte Rolle mit dieser Berechtigung.

Spark-UI öffnen

Die Seite „Spark UI“ ist in der Google Cloud Console für Batcharbeitslasten verfügbar.

  1. Rufen Sie die Seite Interaktive Sitzungen für Managed Service for Apache Spark auf.

    Zu Managed Service for Apache Spark-Batches wechseln

  2. Klicken Sie auf eine Batch-ID, um die Seite Batchdetails zu öffnen.

  3. Klicken Sie im oberen Menü auf Spark-Benutzeroberfläche ansehen.

Der Button Spark-UI ansehen ist in den folgenden Fällen deaktiviert:

Logs für Managed Service for Apache Spark

Logging ist in Managed Service for Apache Spark standardmäßig aktiviert und Arbeitslastlogs bleiben nach Abschluss einer Arbeitslast erhalten. Managed Service for Apache Spark erfasst Arbeitslastlogs in Cloud Logging. Sie können über die Ressource Cloud Dataproc Batch im Log-Explorer auf Managed Service for Apache Spark-Logs zugreifen.

Logs für Managed Service for Apache Spark abfragen

Der Log-Explorer in der Google Cloud Console bietet einen Abfragebereich, mit dem Sie eine Abfrage erstellen können, um Batcharbeitslast-Logs zu untersuchen. So erstellen Sie eine Abfrage, um Batcharbeitslastprotokolle zu untersuchen:

  1. Zum Log-Explorer

  2. Ihr aktuelles Projekt ist ausgewählt. Sie können auf Projektbereich eingrenzen klicken, um ein anderes Projekt auszuwählen.
  3. Batch-Protokollanfrage definieren

    • Verwenden Sie die Filtermenüs, um nach einer Batcharbeitslast zu filtern.

      1. Wählen Sie unter Alle Ressourcen die Ressource Cloud Managed Service for Apache Spark Batch aus.

        1. Wählen Sie im Bereich Ressource auswählen den Batch LOCATION und dann die BATCH ID aus. Diese Batchparameter werden in der Google Cloud Console auf der Seite „Managed Service for Apache Spark“ → Batches aufgeführt.

        2. Klicken Sie auf Übernehmen.

        3. Geben Sie unter Lognamen auswählen im Feld Lognamen suchen dataproc.googleapis.com ein, um die abzufragenden Logtypen einzuschränken. Wählen Sie einen oder mehrere der aufgeführten Logdateinamen aus.

    • Verwenden Sie den Abfrageeditor, um nach VM-spezifischen Logs zu filtern.

      1. Geben Sie den Ressourcentyp und den VM-Ressourcennamen wie im folgenden Beispiel an:

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

        • VM_NAME_PREFIX::Verwenden Sie gdpic-rm für Batcharbeitslasten, die in Managed Service for Apache Spark 3.0 und späteren Laufzeitversionen ausgeführt werden, und gdpic-srvls-batch für Batcharbeitslasten, die in früheren Laufzeitversionen ausgeführt werden.
        • BATCH_UUID:Die Batch-UUID wird auf der Seite „Batchdetails“ in der Google Cloud Console aufgeführt. Diese Seite wird geöffnet, wenn Sie auf der Seite Batches auf die Batch-ID klicken.

        In den Batchlogs wird die Batch-UUID auch im VM-Ressourcennamen aufgeführt. Hier ein Beispiel aus einer Batch-Datei „driver.log“:

  4. Klicken Sie auf Abfrage ausführen.

Logtypen und Beispielabfragen für Managed Service for Apache Spark

In der folgenden Liste werden verschiedene Logtypen für Managed Service for Apache Spark beschrieben und für jeden Logtyp werden Beispielabfragen für den Log-Explorer bereitgestellt.

  1. dataproc.googleapis.com/output: Diese Logdatei enthält die Ausgabe von Batch-Workloads. Managed Service for Apache Spark streamt die Batchausgabe in den Namespace output und legt den Dateinamen auf JOB_ID.driver.log fest.

    Beispiel für eine Log-Explorer-Abfrage für Ausgabelogs:

    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: Im spark Namespace werden Spark-Logs für Daemons und Executors zusammengefasst, die auf Clustermaster- und Worker-VMs von Managed Service for Apache Spark-Clustern ausgeführt werden. Jeder Logeintrag enthält das Komponentenlabel master, worker oder executor, um die Protokollquelle zu identifizieren:

    • executor: Protokolle von Ausführern von Nutzercode. In der Regel handelt es sich um verteilte Logs.
    • master: Logs vom Spark-Master des eigenständigen Ressourcenmanagers, die den YARN-ResourceManager-Logs von Managed Service for Apache Spark ähneln.
    • worker: Logs vom Spark-Standalone-Ressourcenmanager-Worker, die den NodeManager-Logs von Managed Service for Apache Spark YARN ähneln.

    Beispiel für eine Logs-Explorer-Abfrage für alle Logs im Namespace 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"
    

    Beispiel für eine Log-Explorer-Abfrage für Spark-Standalone-Komponentenlogs im Namespace 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: Der Namespace startup enthält die Startlogs für den Batch (Cluster). Alle Initialisierungsskriptlogs sind enthalten. Komponenten werden durch Labels identifiziert, z. B.:

    startup-script[855]: ... activate-component-spark[3050]: ... enable spark-worker
    
    Beispiel für eine Log-Explorer-Abfrage für Start-Logs auf einer bestimmten VM:
    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: Im Namespace agent werden Agent-Logs für Managed Service for Apache Spark zusammengefasst. Jeder Logeintrag enthält ein Dateinamenlabel, das die Protokollquelle angibt.

    Beispiel für eine Log-Explorer-Abfrage für Agent-Logs, die von einer bestimmten Worker-VM generiert wurden:

    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: Im Namespace autoscaler werden Autoscaler-Logs für Managed Service for Apache Spark zusammengefasst.

    Beispiel für eine Log-Explorer-Abfrage für Autoscaling-Logs, die von einer bestimmten Worker-VM generiert wurden:

    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#"
    

Weitere Informationen finden Sie unter Logs für Managed Service for Apache Spark.

Informationen zu Audit-Logs für Managed Service for Apache Spark finden Sie unter Audit-Logging für Managed Service for Apache Spark.

Arbeitslastmesswerte

Managed Service for Apache Spark bietet Batch- und Spark-Messwerte, die Sie in der Google Cloud Console im Metrics Explorer oder auf der Seite Batchdetails ansehen können.

Batchmesswerte

Die Ressourcenmesswerte für Managed Service for Apache Spark batch geben Aufschluss über Batchressourcen wie die Anzahl der Batch-Executors. Batchmesswerte haben das Präfix dataproc.googleapis.com/batch.

Beispiel für Batch-Messwerte im Metrics Explorer

Spark-Messwerte

Standardmäßig aktiviert Managed Service for Apache Spark die Erfassung von verfügbaren Spark-Messwerten, sofern Sie nicht Eigenschaften für die Erfassung von Spark-Messwerten verwenden, um die Erfassung eines oder mehrerer Spark-Messwerte zu deaktivieren oder zu überschreiben.

Verfügbare Spark-Messwerte umfassen Spark-Treiber- und ‑Executor-Messwerte sowie Systemmesswerte. Verfügbare Spark-Messwerte haben das Präfix custom.googleapis.com/.

Beispiel für einen Spark-Messwert im Metrics Explorer

Messwertbenachrichtigungen einrichten

Sie können Benachrichtigungen für Messwerte von Managed Service for Apache Spark erstellen, um über Probleme mit Arbeitslasten informiert zu werden.

Diagramme erstellen

Sie können Diagramme erstellen, in denen Arbeitslastmesswerte visualisiert werden. Verwenden Sie dazu den Metrics Explorer in derGoogle Cloud Console. Sie können beispielsweise ein Diagramm erstellen, in dem disk:bytes_used angezeigt wird, und dann nach batch_id filtern.

Cloud Monitoring

Monitoring verwendet Arbeitslastmetadaten und -messwerte, um Einblicke in den Zustand und die Leistung von Managed Service for Apache Spark-Arbeitslasten zu geben. Zu den Arbeitslastmesswerten gehören Spark-Messwerte, Batchmesswerte und Vorgangsmesswerte.

Sie können Cloud Monitoring in der Google Cloud -Console verwenden, um Messwerte zu untersuchen, Diagramme hinzuzufügen, Dashboards zu erstellen und Benachrichtigungen zu erstellen.

Dashboards erstellen

Sie können ein Dashboard erstellen, um Arbeitslasten mithilfe von Messwerten aus mehreren Projekten und verschiedenen Google Cloud -Produkten zu überwachen. Weitere Informationen finden Sie unter Benutzerdefinierte Dashboards erstellen und verwalten.

Persistent History Server

Managed Service for Apache Spark erstellt die Rechenressourcen, die zum Ausführen einer Arbeitslast erforderlich sind, führt die Arbeitslast auf diesen Ressourcen aus und löscht die Ressourcen dann, wenn die Arbeitslast abgeschlossen ist. Arbeitslastmesswerte und ‑ereignisse bleiben nach Abschluss einer Arbeitslast nicht erhalten. Sie können jedoch einen Persistent History Server (PHS) verwenden, um den Anwendungsverlauf von Arbeitslasten (Ereignisprotokolle) in Cloud Storage beizubehalten.

So verwenden Sie ein PHS mit einer Batch-Arbeitslast:

  1. Erstellen Sie einen Persistent History Server (PHS) für Managed Service for Apache Spark.

  2. Geben Sie Ihr PHS an, wenn Sie eine Arbeitslast einreichen.

  3. Verwenden Sie das Component Gateway, um eine Verbindung zum PHS herzustellen und Anwendungsdetails, Planungsphasen, Details auf Aufgabenebene sowie Informationen zur Umgebung und zum Executor aufzurufen.

Automatische Abstimmung

  • Autotuning für Managed Service for Apache Spark aktivieren:Sie können Autotuning für Managed Service for Apache Spark aktivieren, wenn Sie jede wiederkehrende Spark-Batcharbeitslast über die Google Cloud Console, die gcloud CLI oder die Managed Service for Apache Spark API senden.

Console

Führen Sie die folgenden Schritte aus, um die automatische Abstimmung für jeden wiederkehrenden Spark-Batch-Arbeitslast zu aktivieren:

  1. Rufen Sie in der Google Cloud Console die Seite Batches für Managed Service for Apache Spark auf.

    Zu Managed Service for Apache Spark-Batches wechseln

  2. Klicken Sie auf Erstellen, um einen Batch-Arbeitslast zu erstellen.

  3. Geben Sie im Bereich Container den Namen der Kohorte ein. Damit wird der Batch als eine von mehreren wiederkehrenden Arbeitslasten identifiziert. Die Gemini-basierte Analyse wird auf die zweite und nachfolgende Arbeitslast angewendet, die mit diesem Kohortennamen eingereicht werden. Geben Sie beispielsweise TPCH-Query1 als Kohortennamen für eine geplante Arbeitslast an, die eine tägliche TPC-H-Abfrage ausführt.

  4. Füllen Sie nach Bedarf die anderen Abschnitte der Seite Batch erstellen aus und klicken Sie dann auf Senden. Weitere Informationen finden Sie unter Batch-Arbeitslast einreichen.

gcloud

Führen Sie den folgenden gcloud CLI-Befehl gcloud dataproc batches submit lokal in einem Terminalfenster oder in Cloud Shell aus, um die automatische Optimierung für jede wiederkehrende Spark-Batcharbeitslast zu aktivieren:

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

Ersetzen Sie Folgendes:

  • COMMAND: der Spark-Arbeitslasttyp, z. B. Spark, PySpark, Spark-Sql oder Spark-R.
  • REGION: die Region, in der Ihre Arbeitslast ausgeführt wird.
  • COHORT: Der Kohortennamen, der den Batch als eine von mehreren wiederkehrenden Arbeitslasten identifiziert. Die Gemini-basierte Analyse wird auf die zweite und die nachfolgenden Arbeitslasten angewendet, die mit diesem Kohortennamen eingereicht werden. Geben Sie beispielsweise TPCH Query 1 als Kohortennamen für eine geplante Arbeitslast an, die täglich eine TPC-H-Abfrage ausführt.

API

Fügen Sie den Namen RuntimeConfig.cohort in eine batches.create-Anfrage ein, um die automatische Optimierung für jede wiederkehrende Spark-Batcharbeitslast zu aktivieren. Die automatische Optimierung wird auf die zweite und nachfolgende Arbeitslasten angewendet, die mit diesem Kohortennamen eingereicht werden. Geben Sie beispielsweise TPCH-Query1 als Kohortennamen für eine geplante Arbeitslast an, die eine tägliche TPC-H-Abfrage ausführt.

Beispiel:

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