Fehlerbehebung bei benutzerdefinierten Containern in Dataflow

Dieses Dokument enthält Anleitungen zur Behebung von Problemen, die bei der Verwendung von benutzerdefinierten Containern 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, prüfen Sie, ob diese Probleme mit Ihrem Container-Image behoben wurden:

  • 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 auf 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 Feinabstimmung der Dataflow-Worker-Logs für Fehlermeldungen in Bezug auf Container kann mit Log Explorer erfolgen:

  1. 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
  2. Wählen Sie die Ressource Dataflow Step aus und geben Sie job_id an.

Wenn Error Syncing pod...-Logmeldungen angezeigt werden, folgen Sie der allgemeinen Fehleranleitung. 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 gängige Probleme bei der Verwendung von benutzerdefinierten Containern 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 manchmal 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 benutzerdefinierter ENTRYPOINT 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 Apache Beam SDK-Pipelineoptionen festgelegten Standardwerte möglicherweise nicht erkannt. In den Worker-Logs werden beispielsweise 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.