Batcharbeitslasten überwachen und Fehler beheben

In diesem Dokument werden die Tools und Dateien beschrieben, mit denen Sie Batcharbeitslasten von Managed Service for Apache Spark überwachen und Fehler beheben können.

Fehlerbehebung bei Arbeitslasten über die Google Cloud Console

Wenn ein Batchjob fehlschlägt oder eine schlechte Leistung aufweist, sollten Sie als ersten Schritt die Seite Batchdetails über die Seite Batches in der Google Cloud Console öffnen.

Tab „Zusammenfassung“: Ihr Hub für die Fehlerbehebung

Auf dem Tab Zusammenfassung , der standardmäßig ausgewählt ist, wenn die Seite Batchdetails geöffnet wird, werden wichtige Messwerte und gefilterte Logs angezeigt, mit denen Sie schnell eine erste Bewertung des Batchzustands vornehmen können. Nach dieser ersten Bewertung können Sie eine detailliertere Analyse mit spezialisierteren Tools durchführen, die auf der Seite Batchdetails verfügbar sind, z. B. die Spark-UI, der Log-Explorer und Gemini Cloud Assist.

Wichtige Batchmesswerte

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

Dashboard mit Batchmesswerten

Tabelle mit Messwerten

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

Messwert Was wird angezeigt?
Messwerte auf Executor-Ebene
Verhältnis von JVM-GC-Zeit zu Laufzeit Dieser Messwert zeigt das Verhältnis von JVM-GC-Zeit (Garbage Collection) zur Laufzeit pro Executor. Hohe Verhältnisse können auf Speicherlecks in Aufgaben hinweisen, die auf bestimmten Executors ausgeführt werden, oder auf ineffiziente Datenstrukturen, die zu einem hohen Objektdurchsatz führen können.
An Laufwerk übergebene Byte Dieser Messwert zeigt die Gesamtzahl der an das Laufwerk übergebenen Byte für verschiedene Executors. Wenn ein Executor eine hohe Anzahl an an das Laufwerk übergebenen Byte aufweist, kann dies auf eine Datenverzerrung hindeuten. Wenn der Messwert im Laufe der Zeit steigt, kann dies darauf hindeuten, dass es Phasen mit Arbeitsspeicherdruck oder Speicherlecks gibt.
Gelesene und geschriebene Byte Dieser Messwert zeigt die geschriebenen und gelesenen Byte pro Executor. Große Abweichungen bei den gelesenen oder geschriebenen Byte können auf Szenarien hinweisen, in denen replizierte Joins zu einer Datenverstärkung auf bestimmten Executors führen.
Gelesene und geschriebene Einträge Dieser Messwert zeigt die gelesenen und geschriebenen Einträge pro Executor. Eine hohe Anzahl gelesener Einträge bei einer niedrigen Anzahl geschriebener Einträge kann auf einen Engpass in der Verarbeitungslogik auf bestimmten Executors hinweisen, was dazu führt, dass Einträge während des Wartens gelesen werden. Executors, die bei Lese- und Schreibvorgängen konstant hinterherhinken, können auf Ressourcenkonflikte auf diesen Knoten oder auf ineffizienten Executor-spezifischen Code hinweisen.
Verhältnis von Shuffle-Schreibzeit zu Laufzeit Der Messwert zeigt die Zeit, die 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 Datenverzerrung oder eine ineffiziente Datenserialisierung hindeuten. Sie können Phasen mit langen Shuffle-Schreibzeiten in der Spark-UI identifizieren. Suchen Sie nach Ausreißeraufgaben in diesen Phasen, deren Ausführung länger als die durchschnittliche Zeit dauert. Prüfen Sie, ob die Executors mit hohen Shuffle-Schreibzeiten auch eine hohe Laufwerks-E/A-Aktivität aufweisen. Eine effizientere Serialisierung und zusätzliche Partitionierungsschritte können hilfreich sein. Sehr große Schreibvorgänge im Vergleich zu Lesevorgängen können auf unbeabsichtigte Datenduplizierung aufgrund ineffizienter Joins oder falscher Transformationen hindeuten.
Messwerte auf Anwendungsebene
Phasenfortschritt Dieser Messwert zeigt die Anzahl der Phasen in den Status „Fehlgeschlagen“, „Warten“ und „Wird ausgeführt“. Eine große Anzahl fehlgeschlagener oder wartender Phasen kann auf eine Datenverzerrung hindeuten. Suchen Sie nach Datenpartitionen und beheben Sie den Grund für den Phasenausfall auf dem Tab Phasen in der Spark-UI.
Batch-Spark-Executors Dieser Messwert zeigt die Anzahl der Executors, die möglicherweise erforderlich sind, im Vergleich zur Anzahl der ausgeführten Executors. Eine große Differenz zwischen erforderlichen und ausgeführten Executors kann auf Probleme mit dem Autoscaling hindeuten.
Messwerte auf VM-Ebene
Verwendeter Arbeitsspeicher Dieser Messwert zeigt den Prozentsatz des verwendeten VM-Arbeitsspeichers. Wenn der Prozentsatz für den Master 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 Out of Memory sind, was zu einer hohen Anzahl an an das Laufwerk übergebenen Byte und einer langsameren Laufzeit der Arbeitslast führen kann. Analysieren Sie die Executors mit der Spark-UI, um nach einer hohen GC-Zeit und einer hohen Anzahl an Aufgabenfehlern zu suchen. Beheben Sie außerdem Fehler im Spark-Code für das Caching großer Datasets und die unnötige Übertragung von Variablen.

Jobprotokolle

Die Seite Batchdetails enthält den Abschnitt Jobprotokolle mit Warnungen und Fehlern, die aus den Jobprotokollen (Batcharbeitslast) gefiltert wurden. Mit dieser Funktion können Sie kritische Probleme schnell identifizieren, ohne umfangreiche Logdateien manuell analysieren zu müssen. Sie können im Drop-down-Menü einen Schweregrad für das Log auswählen (z. B. Error) und einen Filter hinzufügen, um die Ergebnisse einzugrenzen. Wenn Sie eine detailliertere Analyse durchführen möchten, klicken Sie auf das Symbol Im Log-Explorer ansehen , um die ausgewählten Batchprotokolle im Log-Explorer zu öffnen.

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

Beispiel: Der Log-Explorer wird geöffnet, nachdem Sie im Drop-down-Menü „Schweregrad“ die Option Errors ausgewählt haben. Google Cloud

Batch-Log-Explorer

Spark-UI

Die Spark-UI erfasst Details zur Apache Spark-Ausführung aus Batcharbeitslasten von Managed Service for Apache Spark. 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 Fehler beheben, ohne einen Persistent History Servererstellen zu müssen.

Erforderliche Berechtigungen und Rollen für Identity and Access Management

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

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

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

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 von Managed Service for Apache Spark auf.

    Zu Managed Service for Apache Spark-Batches

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

  3. Klicken Sie im Menü oben auf Spark-UI ansehen.

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

Managed Service for Apache Spark-Logs

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

Managed Service for Apache Spark-Logs abfragen

Der Log-Explorer in der Google Cloud Console bietet einen Abfragebereich , in dem Sie eine Abfrage erstellen können, um Batcharbeitslastprotokolle 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 Bereich verfeinern: Projekt klicken, um ein anderes Projekt auszuwählen.
  3. Definieren Sie eine Abfrage für Batchprotokolle.

    • Verwenden Sie 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 STANDORT des Batches und dann die BATCH-ID aus. Diese Batchparameter sind in der Google Cloud Console auf der Seite Batchesvon Managed Service for Apache Spark aufgeführt.

        2. Klicken Sie auf Übernehmen.

        3. Geben Sie unter Log-Namen auswählen im Feld Log-Namen suchen dataproc.googleapis.com ein, um die abzufragenden Logtypen zu beschrä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 unter Managed Service for Apache Spark 3.0 und höher ausgeführt werden, und gdpic-srvls-batch für Batcharbeitslasten, die unter früheren Versionen ausgeführt werden.
        • BATCH_UUID: Die Batch-UUID ist auf der Seite „Batchdetails“ in der Google Cloud Konsole aufgeführt, die geöffnet wird, wenn Sie auf der Seite Batches auf die Batch-ID klicken.

        In den Batchprotokollen ist die Batch-UUID auch im VM-Ressourcennamen aufgeführt. Hier ein Beispiel aus einem Batch-Treiberprotokoll:

  4. Klicken Sie auf Abfrage ausführen.

Managed Service for Apache Spark-Logtypen und Beispielabfragen

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

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

    Beispielabfrage für den Log-Explorer für Ausgabeprotokolle:

    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: Der spark Namespace aggregiert Spark Logs für Daemons und Executors, die auf den Clustermaster- und Worker-VMs des Managed Service for Apache Spark Clusters ausgeführt werden. Jeder Logeintrag enthält ein Label für die Komponente master, worker oder executor, um die Protokollquelle zu identifizieren:

    • executor: Logs von Executors mit Nutzercode. In der Regel sind das verteilte Logs.
    • master: Logs vom Spark-Master des eigenständigen Ressourcenmanagers, die den YARN-Logs ResourceManager von Managed Service for Apache Spark ähneln.
    • worker: Logs vom Spark-Worker des eigenständigen Ressourcenmanagers, die den YARN-Logs NodeManager von Managed Service for Apache Spark ähneln.

    Beispielabfrage für den Log-Explorer 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"
    

    Beispielabfrage für den Log-Explorer für Logs der eigenständigen Spark-Komponente 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 Startprotokolle für den Batch (Cluster). Alle Logs von Initialisierungsskripts sind enthalten. Komponenten werden durch Labels identifiziert, z. B.:

    startup-script[855]: ... activate-component-spark[3050]: ... enable spark-worker
    
    Beispielabfrage für den Log-Explorer für Startprotokolle 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: Der agent Namespace fasst die Agentenprotokolle von Managed Service for Apache Spark zusammen. Jeder Logeintrag enthält ein Label für den Dateinamen, das die Protokollquelle identifiziert.

    Beispielabfrage für den Log-Explorer für Agentenprotokolle, 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: Der autoscaler Namespace fasst die Autoscaler-Logs von Managed Service for Apache Spark zusammen.

    Beispielabfrage für den Log-Explorer für Autoscaler-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 Managed Service for Apache Spark-Logs.

Informationen zu Audit-Logs von 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 Messwerte für die batch-Ressource von Managed Service for Apache Spark geben Einblicke in Batchressourcen, z. B. 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, es sei denn, Sie verwenden Eigenschaften zur Erfassung von Spark-Messwerten 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 Messwertbenachrichtigungen für 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, indem Sie in der Google Cloud Console den Metrics Explorer verwenden. Sie können beispielsweise ein Diagramm erstellen, um disk:bytes_used anzuzeigen, und dann nach batch_id filtern.

Cloud Monitoring

Monitoring verwendet Metadaten und Messwerte von Arbeitslasten, 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 einzurichten.

Dashboards erstellen

Sie können ein Dashboard erstellen, um Arbeitslasten anhand 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 Compute-Ressourcen, 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 beendet ist. Arbeitslastmesswerte und -ereignisse bleiben nach Abschluss einer Arbeitslast nicht erhalten. Sie können jedoch einen Persistent History Server (PHS) verwenden, um den Anwendungsverlauf der Arbeitslast (Ereignisprotokolle) in Cloud Storage aufzubewahren.

So verwenden Sie einen PHS mit einer Batcharbeitslast:

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

  2. Geben Sie beim Senden einer Arbeitslast Ihren PHS an.

  3. Verwenden Sie das Component Gateway um eine Verbindung zum PHS herzustellen und Anwendungsdetails, Scheduler-Phasen, Details auf Aufgabenebene sowie Informationen zur Umgebung und zu Executors anzusehen.

Automatische Abstimmung

  • Automatische Abstimmung für Managed Service for Apache Spark aktivieren: Sie können die automatische Abstimmung 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 jede wiederkehrende Spark-Batcharbeitslast zu aktivieren:

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

    Zu Managed Service for Apache Spark-Batches

  2. Klicken Sie auf Erstellen, um eine Batcharbeitslast zu erstellen.

  3. Geben Sie im Abschnitt Container den Namen der Kohorte ein, der den Batch als Teil einer Reihe wiederkehrender Arbeitslasten identifiziert. Die Gemini-gestützte Analyse wird auf die zweite und alle nachfolgenden Arbeitslasten angewendet, die mit diesem Kohortennamen gesendet werden. Geben Sie beispielsweise TPCH-Query1 als Kohortennamen für eine geplante Arbeitslast an, die täglich eine TPC-H-Abfrage ausführt.

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

gcloud

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

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

Ersetzen Sie Folgendes:

  • COMMAND: Der Typ der Spark-Arbeitslast, z. B. Spark, PySpark, Spark-Sql, oder Spark-R.
  • REGION: die Region , in der Ihre Arbeitslast ausgeführt wird.
  • COHORT: Der Kohortenname, der identifiziert den Batch als Teil einer Reihe wiederkehrender Arbeitslasten. Die Gemini-gestützte Analyse wird auf die zweite und alle nachfolgenden Arbeitslasten angewendet, die mit diesem Kohortennamen gesendet 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 RuntimeConfig.cohort Namen in eine batches.create Anfrage ein, um die automatische Abstimmung für jede wiederkehrende Spark Batcharbeitslast zu aktivieren. Die automatische Abstimmung wird auf die zweite und alle nachfolgenden Arbeitslasten angewendet, die mit diesem Kohortennamen gesendet werden. Geben Sie beispielsweise TPCH-Query1 als Kohortennamen für eine geplante Arbeitslast an, die täglich eine TPC-H-Abfrage ausführt.

Beispiel:

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