In diesem Dokument finden Sie eine Anleitung zur Behebung häufiger Probleme, die verhindern, dass Google Cloud Serverless for Apache Spark-Batcharbeitslasten und interaktive Sitzungen gestartet werden.
Übersicht
Wenn ein Batch oder eine Sitzung nicht gestartet werden kann, wird in der Regel die folgende Fehlermeldung angezeigt:
Driver compute node failed to initialize for batch in 600 seconds
Diese Fehlermeldung gibt an, dass der Spark-Treiber nicht innerhalb des Standard-Timeouts von 600 Sekunden (10 Minuten) gestartet werden konnte. Häufige Ursachen sind Berechtigungen für Dienstkonten, Ressourcenverfügbarkeit, Netzwerkkonfiguration oder Spark-Eigenschaften.
Ursachen für Fehler beim Starten von Batches und Sitzungen und Schritte zur Fehlerbehebung
In den folgenden Abschnitten werden häufige Ursachen für Fehler beim Starten von Batches und Sitzungen mit Tipps zur Fehlerbehebung aufgeführt, die Ihnen bei der Lösung der Probleme helfen.
Unzureichende Berechtigungen für Dienstkonten
Das Dienstkonto, das von Ihrem Serverless for Apache Spark-Batch oder Ihrer Sitzung verwendet wird, erfordert bestimmte IAM-Rollen , die Berechtigungen für den Serverless for Apache Spark-Betrieb und den Zugriff auf Google Cloud Ressourcen enthalten. Wenn dem Dienstkonto die erforderlichen Rollen fehlen, kann die Initialisierung des Spark-Treibers für den Batch oder die Sitzung fehlschlagen.
- Erforderliche Worker-Rolle: Das Batch- oder Sitzungsdienstkonto muss die
Dataproc-Worker-Rolle (
roles/dataproc.worker) haben. Diese Rolle enthält die Mindestberechtigungen, die für Serverless for Apache Spark zum Bereitstellen und Verwalten von Compute-Ressourcen erforderlich sind. - Berechtigungen für den Datenzugriff: Wenn Ihre Spark-Anwendung Daten aus Cloud Storage oder
BigQuery liest oder in diese schreibt, benötigt das Dienst
konto Rollen für diese Dienste:
- Cloud Storage: Die Rolle
Storage Object Viewer(roles/storage.objectViewer) ist für das Lesen und die RolleStorage Object Creator(roles/storage.objectCreator) oder die RolleStorage Object Admin(roles/storage.admin) für das Schreiben erforderlich. - BigQuery: Die Rolle
BigQuery Data Viewer(roles/bigquery.dataViewer) ist für das Lesen und die RolleBigQuery Data Editor(roles/bigquery.dataEditor) ist für das Schreiben erforderlich.
- Cloud Storage: Die Rolle
- Logging-Berechtigungen: Das Dienstkonto benötigt eine Rolle mit
der Berechtigung, Logs in Cloud Logging zu schreiben. In der Regel reicht die
Logging WriterRolle (roles/logging.logWriter) aus.
Tipps zur Fehlerbehebung:
- Ermitteln Sie das Batch- oder Sitzungs Dienstkonto. Wenn es nicht angegeben ist, wird standardmäßig das Compute Engine-Standarddienstkonto verwendet.
- Rufen Sie in der Google Cloud Console die Seite IAM & Verwaltung > IAM auf, suchen Sie nach dem Batch- oder Sitzungsdienstkonto und prüfen Sie, ob es die für den Betrieb erforderlichen Rollen hat. Weisen Sie alle fehlenden Rollen zu.
Unzureichendes Kontingent
Das Überschreiten von projekt- oder regionsspezifischen Kontingenten für Google Cloud Serverless for Apache Spark oder andere Google Cloud Ressourcen kann verhindern, dass neue Batches oder Sitzungen gestartet werden.
Tipps zur Fehlerbehebung:
Auf der Seite Google Cloud Serverless for Apache Spark-Kontingente finden Sie Informationen zu den Limits für gleichzeitige Batches, DCUs und Shuffle-Speicher.
- Mit dem Befehl
gcloud compute quotas listkönnen Sie auch die aktuelle Nutzung und die Limits für Ihr Projekt und Ihre Region aufrufen:gcloud compute quotas list --project=PROJECT_ID --filter="service:dataproc.googleapis.com"
- Mit dem Befehl
Wenn Sie wiederholt Kontingentlimits erreichen, können Sie über die Google Cloud Console eine Kontingent erhöhung anfordern.
Probleme mit der Netzwerkkonfiguration
Falsche Netzwerkeinstellungen wie die VPC-Konfiguration, der private Google-Zugriff, oder Firewallregeln können verhindern, dass der Spark-Treiber initialisiert oder eine Verbindung zu erforderlichen Diensten herstellt.
Tipps zur Fehlerbehebung:
Prüfen Sie, ob das für Ihren Batch oder Ihre Sitzung angegebene VPC-Netzwerk und -Subnetz richtig konfiguriert sind und genügend IP-Adressen verfügbar sind.
Wenn Ihr Batch oder Ihre Sitzung auf Google APIs und -Dienste zugreifen muss, ohne das öffentliche Internet zu durchlaufen, prüfen Sie, ob der private Google-Zugriff für das Subnetz aktiviert ist.
Prüfen Sie Ihre VPC-Firewallregeln, um sicherzustellen, dass sie nicht versehentlich die interne Kommunikation oder den ausgehenden Traffic zu Google APIs oder externen Diensten blockieren, die für Ihre Spark-Anwendung erforderlich sind.
Probleme mit ungültigen Spark-Eigenschaften oder Anwendungscode
Falsch konfigurierte Spark-Eigenschaften, insbesondere solche, die sich auf Treiberressourcen beziehen, oder Probleme im Spark-Anwendungscode können zu Startfehlern führen.
Tipps zur Fehlerbehebung:
Prüfen Sie die Werte für
spark.driver.memoryundspark.driver.cores. Prüfen Sie, ob sie innerhalb angemessener Grenzen liegen und mit den verfügbaren DCUs übereinstimmen. Übermäßig große Werte für diese Eigenschaften können zu Ressourcen erschöpfung und Initialisierungsfehlern führen. Entfernen Sie alle unnötigen oder experimentellen Spark-Eigenschaften, um das Debuggen zu vereinfachen.Führen Sie eine „Hello World“-Spark-Anwendung aus, um festzustellen, ob das Problem an der Einrichtung Ihrer Umgebung oder an der Komplexität oder an Fehlern im Code liegt.
Prüfen Sie, ob sich alle für Ihren Batch oder Ihre Sitzung angegebenen JAR-Dateien, Python-Dateien, oder Abhängigkeiten der Anwendung korrekt in Cloud Storage befinden und vom Batch- oder Sitzungsdienstkonto aufgerufen werden können.
Logs prüfen
Ein wichtiger Schritt bei der Diagnose von Fehlern bei der Batcherstellung ist die Untersuchung der detaillierten Logs in Cloud Logging.
- Rufen Sie in der Google Cloud Console die Seite Cloud Logging auf.
- Filtern Sie nach Serverless for Apache Spark-Batches oder -Sitzungen:
- Wählen Sie im Drop-down-Menü Ressource die Option
Cloud Dataproc BatchoderCloud Dataproc Sessionaus. - Filtern Sie nach
batch_idodersession_idfür den fehlgeschlagenen Batch oder die fehlgeschlagene Sitzung. Sie können auch nachproject_idundlocation(Region) filtern.
- Wählen Sie im Drop-down-Menü Ressource die Option
- Suchen Sie nach Logeinträgen mit
jsonPayload.component="driver". Diese Logs enthalten oft spezifische Fehlermeldungen oder Stacktraces, die die Ursache für den Fehler bei der Treiberinitialisierung vor dem 600-Sekunden-Timeout aufzeigen können.