Dieses Dokument enthält Anleitungen zur Behebung von Problemen, die bei der Verwendung benutzerdefinierter Container mit Dataflow auftreten können. Der Schwerpunkt liegt auf Problemen mit Containern oder Workern, die nicht gestartet werden. Wenn Ihre Worker in der Lage sind, zu starten und arbeiten, folgen Sie der allgemeinen Anleitung unter Pipelinefehler beheben.
Bevor Sie sich an den Support wenden, müssen Sie Probleme mit Ihrem Container-Image ausschließen:
- Führen Sie die Schritte zum lokalen Testen des Container-Images aus.
- Suchen Sie in den Joblogs oder in Workerlogs nach Fehlern und vergleichen Sie alle Fehler mit den Hinweisen zu gängigen Fehlern.
- Achten Sie darauf, dass die Apache Beam SDK-Version und die Sprachversion, die Sie zum Starten der Pipeline verwenden, mit der SDK-Version in Ihrem benutzerdefinierten Container-Image übereinstimmen.
- Achten Sie bei Verwendung von Java darauf, dass die Java-Hauptversion, die Sie zum Starten der Pipeline verwenden, mit der in Ihrem Container-Image installierten Version übereinstimmt.
- Achten Sie bei Verwendung von Python darauf, dass die Haupt-Nebenversion von Python, die Sie zum Starten der Pipeline verwenden, der in Ihrem Container-Image installierten Version entspricht und dass das Image keine Abhängigkeiten aufweist. Sie können
pip check
zur Bestätigung ausführen.
Workerlogs zu benutzerdefinierten Containern suchen
Die Dataflow-Worker-Logs für Fehlermeldungen in Bezug auf Container finden Sie mit dem Log-Explorer:
Wählen Sie den Lognamen aus. Fehler beim Starten benutzerdefinierter Container treten wahrscheinlich in einer der folgenden Situationen auf:
dataflow.googleapis.com/kubelet
dataflow.googleapis.com/docker
dataflow.googleapis.com/worker-startup
dataflow.googleapis.com/harness-startup
Wählen Sie die Ressource
Dataflow Step
aus und geben Siejob_id
an.
Wenn Error Syncing pod...
-Logmeldungen angezeigt werden, sollten Sie den Hinweisen zu gängigen Fehlern folgen.
Sie können diese Lognachrichten in Dataflow-Worker-Logs mit dem Log-Explorer mit der folgenden Abfrage abfragen:
resource.type="dataflow_step" AND jsonPayload.message:("IMAGE_URI") AND severity="ERROR"
Allgemeine Probleme
Im Folgenden sind einige häufige Probleme bei der Verwendung benutzerdefinierter Container aufgeführt.
Der Job ist fehlerhaft oder fehlgeschlagen, weil das Container-Image nicht abgerufen werden kann
Dataflow-Worker müssen auf benutzerdefinierte Container-Images zugreifen können. Wenn der Worker das Image aufgrund ungültiger URLs, falsch konfigurierter Anmeldedaten oder fehlendem Netzwerkzugriff nicht abrufen kann, schlägt der Worker fehl.
Bei Batchjobs, bei denen keine Arbeit begonnen hat und mehrere Worker nicht nacheinander gestartet werden können, schlägt Dataflow den Job fehl. Andernfalls protokolliert Dataflow Fehler, unternimmt jedoch keine weiteren Maßnahmen, um das Löschen von Jobs mit langer Ausführungszeit zu vermeiden.
Informationen zum Beheben dieses Problems finden Sie auf der Seite "Dataflow-Fehler beheben" unter Image-Pull-Anfrage ist mit einem Fehler fehlgeschlagen.
Worker starten nicht oder die Arbeit geht nicht weiter
Wenn der SDK-Container aufgrund eines Fehlers nicht gestartet wird, kann Dataflow nicht feststellen, ob der Fehler dauerhaft oder schwerwiegend ist. Dataflow versucht dann kontinuierlich, den Worker neu zu starten.
Wenn keine offensichtlichen Fehler auftreten, Sie aber [topologymanager] RemoveContainer
-Logs auf INFO
-Ebene in dataflow.googleapis.com/kubelet
sehen, weisen diese Logs darauf hin, dass das benutzerdefinierte Container-Image vorzeitig beendet wurde und dass der lang andauernde Worker-SDK-Vorgang nicht gestartet wurde.
Wenn Worker erfolgreich gestartet wurden, aber keine Arbeit stattfindet, verhindert möglicherweise ein Fehler, dass der SDK-Container gestartet wird. In diesem Fall wird der folgende Fehler in den Diagnoseempfehlungen angezeigt:
Failed to start container
Darüber hinaus enthalten die Worker-Logs keine Zeilen wie die folgenden:
Executing: python -m apache_beam.runners.worker.sdk_worker_main or Executing: java ... FnHarness
Informationen zu bestimmten Fehlern finden Sie in worker-logs und Informationen zu häufigen Fehlern.
Das kann folgende Gründe haben:
- Probleme mit der Paketinstallation, z. B.
pip
-Installationsfehler aufgrund von Abhängigkeitsproblemen. Siehe Fehler beim Synchronisieren des Pods ... „StartContainer“ konnte nicht ausgeführt werden. - Wenn der verwendete Container nicht mit der CPU-Architektur der Worker-VM kompatibel ist, werden Ihnen möglicherweise Fehler wie
exec format error
angezeigt. Weitere Informationen finden Sie unter Fehler beim Synchronisieren des Pods ... „StartContainer“ konnte nicht ausgeführt werden. - Fehler mit den benutzerdefinierten Befehlsargumenten oder mit dem im Dockerfile festgelegten
ENTRYPOINT
. Zum Beispiel startet ein benutzerdefinierterENTRYPOINT
nicht das Standard-Bootlaufwerk/opt/apache/beam/boot
oder übergibt Argumente nicht ordnungsgemäß an dieses Skript. Weitere Informationen finden Sie unter Container-Einstiegspunkt ändern. - Fehler, wenn die Version des Apache Beam SDK zwischen der Startumgebung und der Laufzeitumgebung nicht übereinstimmt. In einem Fehlermodus werden die in den Pipelineoptionen des Apache Beam SDK festgelegten Standardwerte möglicherweise nicht erkannt.
In den Worker-Logs werden möglicherweise Fehler wie
sdk_worker_main.py: error: argument --flink_version: invalid choice: '1.16' (choose from '1.12', '1.13', '1.14', '1.15')
angezeigt. Zur Behebung dieses Problems installieren Sie dieselbe Version des Apache Beam SDK im Container-Image, die Sie auch zum Starten der Pipeline verwenden. Weitere Informationen finden Sie unter Startumgebung mit der Laufzeitumgebung kompatibel machen.