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.

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.
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.

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 RolleManaged Service for Apache Spark Workerenthalten, 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 Berechtigungdataproc.batches.sparkApplicationWritehinzufügen (in der Regel, indem Sie dem Dienstkonto die Rolle „Managed Service for Apache Spark“Workerzuweisen).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 RollenDataproc Viewer,Dataproc EditorundDataproc Administratorenthalten. 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.
Rufen Sie die Seite Interaktive Sitzungen für Managed Service for Apache Spark auf.
Klicken Sie auf eine Batch-ID, um die Seite Batchdetails zu öffnen.
Klicken Sie im oberen Menü auf Spark-Benutzeroberfläche ansehen.
Der Button Spark-UI ansehen ist in den folgenden Fällen deaktiviert:
- Wenn eine erforderliche Berechtigung nicht erteilt wird
- Wenn Sie das Häkchen bei Spark-UI aktivieren auf der Seite Batchdetails entfernen,
- Wenn Sie das Attribut
spark.dataproc.appContext.enabledauffalsesetzen, wenn Sie eine Batcharbeitslast einreichen
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:
- Ihr aktuelles Projekt ist ausgewählt. Sie können auf Projektbereich eingrenzen klicken, um ein anderes Projekt auszuwählen.
Batch-Protokollanfrage definieren
Verwenden Sie die Filtermenüs, um nach einer Batcharbeitslast zu filtern.
Wählen Sie unter Alle Ressourcen die Ressource Cloud Managed Service for Apache Spark Batch aus.
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.
Klicken Sie auf Übernehmen.
Geben Sie unter Lognamen auswählen im Feld Lognamen suchen
dataproc.googleapis.comein, 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.
Geben Sie den Ressourcentyp und den VM-Ressourcennamen wie im folgenden Beispiel an:
Hinweise:resource.type="cloud_dataproc_batch" labels."dataproc.googleapis.com/resource_name"="VM_NAME_PREFIX-BATCH_UUID-VM_SUFFIX"
- VM_NAME_PREFIX::Verwenden Sie
gdpic-rmfür Batcharbeitslasten, die in Managed Service for Apache Spark3.0und späteren Laufzeitversionen ausgeführt werden, undgdpic-srvls-batchfü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“:
- VM_NAME_PREFIX::Verwenden Sie
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.
dataproc.googleapis.com/output: Diese Logdatei enthält die Ausgabe von Batch-Workloads. Managed Service for Apache Spark streamt die Batchausgabe in den Namespaceoutputund legt den Dateinamen aufJOB_ID.driver.logfest.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"
dataproc.googleapis.com/spark: ImsparkNamespace 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 Komponentenlabelmaster,workeroderexecutor, 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 denNodeManager-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"
dataproc.googleapis.com/startup: Der Namespacestartupenthält die Startlogs für den Batch (Cluster). Alle Initialisierungsskriptlogs sind enthalten. Komponenten werden durch Labels identifiziert, z. B.: Beispiel für eine Log-Explorer-Abfrage für Start-Logs auf einer bestimmten VM:startup-script[855]: ... activate-component-spark[3050]: ... enable spark-worker
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"
dataproc.googleapis.com/agent: Im Namespaceagentwerden 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#"
dataproc.googleapis.com/autoscaler: Im Namespaceautoscalerwerden 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.

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/.

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:
Erstellen Sie einen Persistent History Server (PHS) für Managed Service for Apache Spark.
Geben Sie Ihr PHS an, wenn Sie eine Arbeitslast einreichen.
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:
Rufen Sie in der Google Cloud Console die Seite Batches für Managed Service for Apache Spark auf.
Klicken Sie auf Erstellen, um einen Batch-Arbeitslast zu erstellen.
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-Query1als Kohortennamen für eine geplante Arbeitslast an, die eine tägliche TPC-H-Abfrage ausführt.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-SqloderSpark-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 1als 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
...