Auf dieser Seite finden Sie Tipps und Strategien zur Fehlerbehebung, die nützlich sein könnten, wenn Sie flexible Dataflow-Vorlagen verwenden. Standardmäßig beträgt das Zeitlimit für den Startvorgang der flexiblen Vorlage 12 Minuten. Dieser Startvorgang umfasst das Abrufen des Vorlagen-Container-Images und das Ausführen des Codes zum Erstellen des Jobgraphen. Wenn der Start nicht innerhalb dieses 12-minütigen Zeitfensters abgeschlossen wird, schlägt der Job mit dem Fehler „Timeout in polling result file“ fehl. Anhand dieser Informationen können Sie ein Zeitlimit für die Abfrage ermitteln, den Grund für das Zeitlimit ermitteln und das Problem beheben.
Fehler beim Laden der Vorlagenliste in der Google Cloud Console
Wenn Sie in der Google Cloud Console versuchen, die Liste der Vorlagen auf der Dataflow-Seite Job aus Vorlage erstellen aufzurufen, wird ein Fehler wie der folgende angezeigt:
Error retrieving templates. Custom templates can still be used.
Wenn Ihre Organisation PAB-Richtlinien (Principal Access Boundary) verwendet, können Hauptkonten (z. B. Nutzer oder Dienstkonten) möglicherweise keine von Google bereitgestellten Vorlagen ansehen und ausführen. Versuchen Sie, dieses Problem mit der Anleitung unter Mit Principal Access Boundary-Richtlinien auf von Google bereitgestellte Vorlagen zugreifen zu beheben.
Fehler bei Zeitüberschreitungen bei Abfragen
Ihr Job gibt möglicherweise eine der folgenden Fehlermeldungen zurück:
Timeout in polling result file: FILE_PATH. Possible causes are:
1. Your launch takes too long time to finish. Please check the logs on stackdriver.
2. Service account SERVICE_ACCOUNT may not have enough permissions to pull
container image IMAGE_PATH or create new objects in FILE_PATH.
3. Transient errors occurred, please try again.
Timeout in polling result file: FILE_PATH.
Service account: SERVICE_ACCOUNT
Image URL: IMAGE_PATH
Troubleshooting guide at https://cloud.google.com/dataflow/docs/guides/common-errors#timeout-polling
Dieser Fehler kann folgende Ursachen haben:
- Das Basis-Docker-Image wurde überschrieben.
- Das Dienstkonto, mit dem SERVICE_ACCOUNT gefüllt wird, hat nicht alle erforderlichen Berechtigungen.
- Externe IP-Adressen sind deaktiviert und VMs können keine Verbindung zu der Gruppe von externen IP-Adressen herstellen, die von Google APIs und Diensten verwendet werden.
- Die Launcher-VM kann gcr.io nicht auflösen oder darauf zugreifen.
- Großes Container-Image für flexible Vorlagen.
- Das Programm, das die Grafik erstellt, braucht zu lange.
- Der Code, der auf der Launcher-VM ausgeführt wird, braucht zu lange.
- Gelegentliche Netzwerk- oder Cloud Storage-Fehler.
- Pipelineoptionen werden überschrieben.
- Python-Nutzer: Das Installieren oder Staging von Abhängigkeiten dauert zu lange.
- Ein vorübergehender Fehler ist aufgetreten.
Prüfen Sie zur Behebung dieses Problems zuerst die Joblogs auf Fehler und versuchen Sie es noch einmal.
Folgen Sie der Anleitung im Abschnitt Probleme beim frühen Start, um das Logging für den seriellen Port zu aktivieren. Dadurch können zusätzliche Informationen angezeigt werden.
Wenn das Problem durch diese Schritte nicht behoben wird, führen Sie die folgenden Schritte zur Fehlerbehebung aus.
Optional: Vorlagen ausführen, um das Problem weiter zu diagnostizieren
Verwenden Sie die folgenden Strategien, um genauer zu ermitteln, welche der oben genannten Ursachen diesen Fehler verursacht:
Führen Sie die von Google bereitgestellte Vorlage WordCount aus. Geben Sie Parameter an, die für Ihren Anwendungsfall eindeutig sind, z. B. das Subnetzwerk aus einem freigegebene VPC-Projekt, die private IP-Adresse für Worker-VMs und das Dataflow-Worker-Dienstkonto, das Sie verwenden möchten. Weitere Informationen zur Angabe dieser Parameter finden Sie in der gcloud-Referenz und der API-Referenz.
Wenn Sie diesen Job erfolgreich abschließen können, sind Netzwerk, IAM-Berechtigungen und privater Google-Zugriff wahrscheinlich richtig konfiguriert.
Führen Sie die Kurzanleitung Pipeline mit dem Job-Builder ausführen aus, bei der der Job als flexible Vorlage ausgeführt wird. Wenn Ihr Job fehlschlägt, bevor die Worker-VM gestartet wird, greifen Sie auf die Launcher-VM zu und versuchen Sie, ein Docker-Beispiel-Image mit einem Befehl wie dem folgenden herunterzuladen:
docker run --entrypoint /bin/bash -it gcr.io/dataflow-templates/2025-03-11-00_rc02/yaml-templateWenn dieser Befehl fehlschlägt, liegt möglicherweise ein Netzwerkproblem beim Herunterladen von Images vor. Wenden Sie sich in diesem Fall an Ihr internes Netzwerkteam.
Führen Sie eine von Google bereitgestellte flexible Vorlage aus und prüfen Sie das Ergebnis. Wenn der von Google bereitgestellte Vorlagenjob erfolgreich abgeschlossen wird, liegt das Problem wahrscheinlich an Ihren benutzerdefinierten Vorlagencodedateien. In diesem Fall müssen Sie die Fehlerbehebung für Ihren spezifischen Code fortsetzen, um das Problem zu beheben.
Docker-Einstiegspunkt prüfen
Führen Sie diesen Schritt aus, wenn Sie eine Vorlage aus einem benutzerdefinierten Docker-Image ausführen, anstatt eine der bereitgestellten Vorlagen zu verwenden.
Suchen Sie mit dem folgenden Befehl nach dem Containereinstiegspunkt:
docker inspect $TEMPLATE_IMAGE
Die erwartete Ausgabe sieht so aus:
Java
/opt/google/dataflow/java_template_launcher
Python
/opt/google/dataflow/python_template_launcher
Wenn Sie eine andere Ausgabe erhalten, wird der Einstiegspunkt Ihres Docker-Containers überschrieben. Stellen Sie $TEMPLATE_IMAGE wieder auf die Standardeinstellung her.
Dienstkontoberechtigungen prüfen
Prüfen Sie, ob das in der Nachricht erwähnte Dienstkonto die folgenden Berechtigungen hat:
- Es muss den Cloud Storage-Pfad lesen und schreiben können, mit dem
${file_path}in der Nachricht gefüllt wird. - Es muss das Docker-Image lesen können, mit dem
${image_url}in der Nachricht gefüllt wird.
Privaten Google-Zugriff konfigurieren
Wenn externe IP-Adressen deaktiviert sind, müssen Sie Compute Engine-VMs erlauben, eine Verbindung zu der Gruppe von externen IP-Adressen herzustellen, die von Google APIs und Diensten verwendet werden. Aktivieren Sie den privaten Google-Zugriff in dem Subnetz, das von der Netzwerkschnittstelle der VM verwendet wird.
Weitere Konfigurationsdetails finden Sie unter Privaten Google-Zugriff konfigurieren.
Wenn einer Compute Engine-VM eine externe IP-Adresse fehlt, die der Netzwerkschnittstelle zugewiesen ist, kann sie standardmäßig nur Pakete an andere interne IP-Adressen senden.
GCR.io-Zugriffsprobleme
VMs zum Starten von flexiblen Vorlagen benötigen Zugriff auf gcr.io, um einen Logging-Agent-Container (gcr.io/dataflow-templates-base/template-launcher-logger-distroless) abzurufen. Dieser Agent ist für das Streamen von Launcher-Logs an Cloud Logging verantwortlich. Wenn die Launcher-VM gcr.io nicht auflösen oder keine Verbindung dazu herstellen kann, reagiert der Startvorgang möglicherweise nicht mehr, was zu einer Zeitüberschreitung bei der Abfrage führt.
Dieses Problem kann auch auftreten, wenn Ihr benutzerdefiniertes Vorlagen-Image in Artifact Registry gespeichert ist, da der Logging-Agent immer aus gcr.io abgerufen wird.
So diagnostizieren und beheben Sie dieses Problem:
Logging für seriellen Port aktivieren: Folgen Sie der Anleitung im Abschnitt Probleme beim frühen Start. Wenn Sie feststellen, dass der
cloud-init-Prozess hängen bleibt oder Fehler im Zusammenhang mitgcr-wait-online.serviceauftreten, liegt wahrscheinlich ein DNS- oder Netzwerkproblem vor.SSH-Verbindung zur Launcher-VM herstellen: Verwenden Sie den Befehl
gcloud compute ssh, um eine Verbindung zur Launcher-VM herzustellen, während sie noch ausgeführt wird:gcloud compute ssh launcher-JOB_ID --tunnel-through-iapErsetzen Sie
JOB_IDdurch die ID Ihres Dataflow-Jobs.DNS-Auflösung prüfen: Führen Sie die folgenden Befehle auf der Launcher-VM aus:
curl -I https://gcr.ioWenn der Befehl mit dem Fehler
"Could not resolve host"fehlschlägt, fehlt in Ihrer DNS-Konfiguration ein Eintrag fürgcr.io.Nach hängengebliebenen Startdiensten suchen: Prüfen Sie das Ausgabeprotokoll
cloud-init:sudo cat /var/log/cloud-init-output.logSuchen Sie nach Nachrichten, die darauf hinweisen, dass der Prozess auf das Netzwerk oder auf die Verfügbarkeit von
gcr.iowartet.
Achten Sie außerdem darauf, dass die DNS-Einstellungen Ihrer VPC die Auflösung von gcr.io zulassen. In einigen privaten Netzwerkkonfigurationen müssen Sie möglicherweise einen bestimmten DNS-A-Eintrag für gcr.io hinzufügen, der auf die IP-Bereiche der eingeschränkten Google APIs oder privaten Google APIs verweist.
Großes Container-Image
Wenn Ihr Container-Image für die flexible Vorlage groß ist, kann das Abrufen und Starten der Vorlage das Standardzeitlimit von 12 Minuten überschreiten, was zu einem Jobfehler führt.
Versuchen Sie Folgendes, um das Problem zu beheben:
- Optimieren Sie Ihr Image, um die Größe zu reduzieren und den Pull-Vorgang zu beschleunigen.
- Verwenden Sie das Flag
--launcher-machine-type, um einen Maschinentyp mit mehr CPU-Kernen auszuwählen. Dadurch wird das Image schneller abgerufen und der Start beschleunigt. - Sie können das Zeitlimit für den Start über das standardmäßige Limit von 12 Minuten (720 Sekunden) hinaus verlängern. Verwenden Sie dazu das Flag
--launcher-vm-timeout-secsin der gcloud CLI oder die Startoptionft_launch_timeout_secsin der REST API und im Managed Service for Apache Airflow. Beispiele finden Sie unter Zeitlimit für den Start der flexiblen Vorlage verlängern.
Prüfen, ob das Launcher-Programm nicht beendet werden kann
Das Programm, das die Pipeline erstellt, muss abgeschlossen sein, bevor die Pipeline gestartet werden kann. Der Abfragefehler könnte darauf hinweisen, dass es zu lange gedauert hat.
Sie können die Ursache im Code beispielsweise so ermitteln:
- Achten Sie darauf, dass das Beenden des Programms nicht von Threads blockiert wird. Einige Clients erstellen möglicherweise ihre eigenen Threads. Wenn diese Clients nicht heruntergefahren werden, wartet das Programm für immer, bis diese Threads verbunden werden.
- Verwenden Sie im Code, der Ihre Pipeline definiert, nicht
waitUntilFinish(für Java) oderwait_until_finish(für Python). Diese Funktionen verhindern, dass das Programm beendet wird, wodurch die flexible Vorlage die Pipeline nicht starten kann.
Pipelines, die direkt gestartet werden und keine Vorlage verwenden, haben diese Einschränkungen nicht. Wenn die Pipeline also direkt (nicht als Vorlage) funktionierte, könnte die Verwendung einer Vorlage die Ursache sein. Wenn Sie das Problem in der Vorlage finden und die Vorlage beheben, kann das Problem möglicherweise behoben werden.
Lang andauernder Code in der Launcher-VM
Wenn die Ausführung des Codes in Ihrem Hauptprogramm zu lange dauert, kann es zu einer Zeitüberschreitung der flexiblen Vorlage kommen, bevor die Pipeline gestartet wird. Das kann passieren, wenn der Code während der Initialisierung komplexe Berechnungen durchführt oder synchrone Aufrufe an externe Ressourcen sendet.
Um dieses Problem zu diagnostizieren, prüfen Sie die Joblogs auf Vorgänge, die lange dauern. Beispiele hierfür sind Anfragen für externe Ressourcen, große Datensuchen oder komplexe Initialisierungslogik, die Sie in die Pipeline-Ausführungsphase verschieben können. Wenn Ihre Pipeline nach der Optimierung der Initialisierung immer noch mehr als 12 Minuten zum Starten benötigt, lesen Sie den Abschnitt Zeitüberschreitung beim Start der flexiblen Vorlage verlängern.
Gelegentliche Netzwerk- oder Cloud Storage-Fehler
Aufgrund einer hohen Netzwerklatenz oder vorübergehender Probleme mit der Cloud Storage API können gelegentlich die Fehler „Timeout in polling result file“ oder „Failed to read the result file“ auftreten. Chronische Netzwerküberlastung in Ihrer VPC, insbesondere im Pfad für den privater Google-Zugriff, führt häufig zu Latenzen von 400–500 ms.
Ein „Timeout in polling result file“ ist in der Regel ein langsamer Fehler, während ein „Failed to read the result file“ ein schneller Fehler ist. Beide weisen jedoch oft auf dasselbe zugrunde liegende Verbindungsproblem hin.
So diagnostizieren Sie diese zeitweiligen Fehler:
- Netzwerklatenz prüfen: Überwachen Sie die Netzwerklatenz in Ihrer VPC. Eine anhaltend hohe Latenz kann zu Zeitüberschreitungen führen, wenn die Launcher-VM versucht, die Job-Ergebnisdatei in Cloud Storage zu schreiben oder daraus zu lesen.
Cloud Storage API-Messwerte überwachen:
Rufen Sie in der Google Cloud Console das Dashboard APIs und Dienste auf.
Filtern Sie nach der Cloud Storage API und wählen Sie sie aus.
Sehen Sie sich die Diagramme für Traffic (gesendete und empfangene Byte) und Fehlerrate an.
Suchen Sie nach Spitzen bei 5xx-Fehlern (z. B. 503-Fehlern), die genau mit dem Zeitpunkt der Jobfehler übereinstimmen.
Wenn Sie Spitzen bei Fehlern oder eine hohe Latenz feststellen, untersuchen Sie die Netzwerkleistung Ihrer VPC oder wenden Sie sich an Cloud Customer Care, um Unterstützung bei potenziellen Dienstunterbrechungen zu erhalten.
Prüfen, ob erforderliche Pipelineoptionen unterdrückt werden
Bei Verwendung von flexiblen Vorlagen haben Sie die Möglichkeit, einige, aber nicht alle Pipelineoptionen bei der Pipelineinitialisierung zu konfigurieren. Weitere Informationen finden Sie im Abschnitt Jobdatei konnte nicht gelesen werden in diesem Dokument.
Python-Nutzer: Abhängigkeitsverwaltung
Wenn Sie einen Python-Flex-Vorlagenjob ausführen, der zusätzliche Abhängigkeiten in einer requirements.txt-Datei bereitstellt, kann der Job möglicherweise nicht gestartet werden. Dieser Fehler tritt auf, wenn das Herunterladen oder Installieren der in der Anforderungsdatei angegebenen Abhängigkeiten länger dauert als die für das Starten der Flexible Vorlage vorgesehene Zeit.
Optimieren Sie die Leistung Ihres Jobs, indem Sie die Abhängigkeiten beim Erstellen der Vorlage vorab verpacken, damit sie beim Starten der Vorlage nicht heruntergeladen oder installiert werden müssen. Weitere Informationen finden Sie im Abschnitt Paketabhängigkeiten für Python unter „Flexible Vorlagen konfigurieren“. Wenn das Staging von Abhängigkeiten oder das Erstellen des Ausführungsgraphen immer noch das standardmäßige Zeitlimit von 12 Minuten für den Start überschreitet, lesen Sie den Abschnitt Zeitlimit für den Start der flexiblen Vorlage verlängern.
Zeitlimit für den Start der flexiblen Vorlage verlängern
Standardmäßig erzwingt Dataflow ein Zeitlimit von 720 Sekunden (12 Minuten) für die Startphase der flexiblen Vorlage. Wenn das Abrufen großer Container-Images, das Bereitstellen von Abhängigkeiten oder das Erstellen komplexer Ausführungsgraphen länger als 720 Sekunden dauert, können Sie dieses Zeitlimit erhöhen, indem Sie die Option für das Startzeitlimit für Ihre Startmethode konfigurieren.
gcloud-CLI
Wenn Sie das Zeitlimit für die Launcher-VM verlängern möchten, wenn Sie eine flexible Vorlage über die gcloud CLI ausführen, übergeben Sie das Flag --launcher-vm-timeout-secs an den Befehl gcloud dataflow flex-template run:
gcloud dataflow flex-template run JOB_NAME \
--template-file-gcs-location=TEMPLATE_GCS_PATH \
--region=REGION \
--launcher-vm-timeout-secs=TIMEOUT_SECONDS
Ersetzen Sie die folgenden Werte:
JOB_NAME: der Name Ihres Dataflow-Jobs.TEMPLATE_GCS_PATH: Der Cloud Storage-URI Ihrer Spezifikationsdatei für die flexible Vorlage, z. B.gs://my-bucket/templates/my-template.json.REGION: die Dataflow-Region, in der der Job ausgeführt wird.TIMEOUT_SECONDS: die Zeitüberschreitung der Launcher-VM in Sekunden. Geben Sie eine positive Ganzzahl ohne Einheitssuffix an. Das Standardzeitlimit beträgt720, also 12 Minuten. Wenn Sie das Zeitlimit verlängern möchten, geben Sie eine Ganzzahl größer als720und bis zu5400(90 Minuten) an, z. B.1200für 20 Minuten oder1800für 30 Minuten.
REST API
Wenn Sie eine flexible Vorlage durch Aufrufen des REST-Endpunkts projects.locations.flexTemplates.launch starten, legen Sie den Schlüssel ft_launch_timeout_secs in der Zuordnung launchParameter.launchOptions auf einen String fest, der die Zeitüberschreitungsdauer in Sekunden als Ganzzahl ohne Einheitssuffix enthält:
{
"launchParameter": {
"jobName": "JOB_NAME",
"containerSpecGcsPath": "TEMPLATE_GCS_PATH",
"launchOptions": {
"ft_launch_timeout_secs": "TIMEOUT_SECONDS"
}
}
}
Ersetzen Sie die folgenden Werte:
JOB_NAME: der Name Ihres Dataflow-Jobs.TEMPLATE_GCS_PATH: Der Cloud Storage-URI Ihrer Spezifikationsdatei für die flexible Vorlage, z. B.gs://my-bucket/templates/my-template.json.TIMEOUT_SECONDS: die Zeitüberschreitung der Launcher-VM in Sekunden. Geben Sie eine positive Ganzzahl als String ohne Einheitssuffix an. Das Standardzeitlimit ist"720", also 12 Minuten. Wenn Sie das Zeitlimit verlängern möchten, geben Sie eine Ganzzahl größer als720und bis zu5400(90 Minuten) an, z. B."1200"für 20 Minuten oder"1800"für 30 Minuten.
Managed Airflow
Wenn Sie Flexible Vorlagenjobs in Managed Airflow oder Apache Airflow mit dem Operator DataflowStartFlexTemplateOperator orchestrieren, fügen Sie den Schlüssel ft_launch_timeout_secs unter launchParameter.launchOptions im Wörterbuch body ein:
from airflow.providers.google.cloud.operators.dataflow import (
DataflowStartFlexTemplateOperator,
)
start_flex_template = DataflowStartFlexTemplateOperator(
task_id="start_flex_template",
project_id="PROJECT_ID",
location="REGION",
body={
"launchParameter": {
"jobName": "JOB_NAME",
"containerSpecGcsPath": "TEMPLATE_GCS_PATH",
"launchOptions": {
"ft_launch_timeout_secs": "TIMEOUT_SECONDS",
},
}
},
)
Ersetzen Sie die folgenden Werte:
PROJECT_ID: die ID Ihres Projekts in Google Cloud .REGION: die Dataflow-Region, in der der Job ausgeführt wird.JOB_NAME: der Name Ihres Dataflow-Jobs.TEMPLATE_GCS_PATH: Der Cloud Storage-URI Ihrer Spezifikationsdatei für die flexible Vorlage, z. B.gs://my-bucket/templates/my-template.json.TIMEOUT_SECONDS: die Zeitüberschreitung der Launcher-VM in Sekunden. Geben Sie eine positive Ganzzahl als String ohne Einheitssuffix an. Das Standardzeitlimit ist"720", also 12 Minuten. Wenn Sie das Zeitlimit verlängern möchten, geben Sie eine Ganzzahl größer als720und bis zu5400(90 Minuten) an, z. B."1200"für 20 Minuten oder"1800"für 30 Minuten.
Fehler beim Starten von Jobs
Der folgende Abschnitt enthält häufige Fehler beim Starten von Jobs sowie Schritte zur Behebung dieser Fehler.
Berechtigung beim Laden einer Vorlagendatei verweigert
Wenn Sie versuchen, eine von Google bereitgestellte Vorlage mit der gcloud CLI auszuführen, wird ein Fehler wie der folgende angezeigt:
ERROR: (gcloud.dataflow.flex-template.run) PERMISSION_DENIED: Template file
failed to load: TEMPLATE_PATH. Permissions denied.
USER does not have storage.objects.get access to the Google
Cloud Storage object. Operations on resource are denied due to an IAM
Principal Access Boundary Policy.
TEMPLATE_PATH ist ein Pfad zu einer Vorlage in einem Cloud Storage-Bucket, der die von Google bereitgestellten Vorlagen enthält, z. B. gs://dataflow-templates oder gs://dataflow-templates-REGION_NAME.
Wenn Ihre Organisation PAB-Richtlinien (Principal Access Boundary) verwendet, können Hauptkonten (z. B. Nutzer oder Dienstkonten) möglicherweise keine von Google bereitgestellten Vorlagen ansehen und ausführen. Versuchen Sie, dieses Problem mit der Anleitung unter Mit Principal Access Boundary-Richtlinien auf von Google bereitgestellte Vorlagen zugreifen zu beheben.
Probleme beim frühen Start
Wenn der Start der Vorlage in einem frühen Stadium fehlschlägt, sind möglicherweise keine regulären Flex-Vorlagenlogs verfügbar. Zum Untersuchen von Startproblemen aktivieren Sie das Logging für den seriellen Port für die Vorlagen-Launcher-VM.
Legen Sie für die Option enableLauncherVmSerialPortLogging den Wert true fest, um das Logging für Java-Vorlagen zu aktivieren. Zum Aktivieren des Loggings für Python- und Go-Vorlagen legen Sie für die Option enable_launcher_vm_serial_port_logging den Wert true fest. In der Google Cloud Console wird der Parameter unter Optionale Parameter als Logging des seriellen Ports für die Launcher-VM aktivieren aufgeführt.
Sie können die Logs für die Ausgabe des seriellen Ports der Vorlagen-Launcher-VM in Cloud Logging ansehen. Verwenden Sie die Abfrage resource.type="gce_instance" "launcher-number", um die Logs für eine bestimmte Launcher-VM zu ermitteln. Dabei beginnt number mit dem aktuellen Datum im Format YYYMMDD.
Ihre Organisationsrichtlinie lässt das Logging der Ausgabe des seriellen Ports möglicherweise nicht zu.
Jobdatei konnte nicht gelesen werden
Wenn Sie versuchen, einen Job aus einer flexiblen Vorlage auszuführen, schlägt der Job möglicherweise mit dem folgenden Fehler fehl:
Failed to read the job file : gs://dataflow-staging-REGION-PROJECT_ID/staging/template_launches/TIMESTAMP/job_object...
Dieser Fehler tritt auf, wenn die erforderlichen Pipeline-Initialisierungsoptionen überschrieben werden. Bei Verwendung von flexiblen Vorlagen können Sie einige, aber nicht alle Pipelineoptionen bei der Pipelineinitialisierung konfigurieren. Wenn die von der flexiblen Vorlage erforderlichen Befehlszeilenargumente überschrieben werden, kann es sein, dass der Job die vom Vorlagen-Launcher übergebenen Pipelineoptionen ignoriert, überschreibt oder verwirft. Der Job wird möglicherweise nicht gestartet, oder es wird ein Job gestartet, der die flexible Vorlage nicht verwendet.
Ändern Sie zur Vermeidung dieses Problems während der Pipelineinitialisierung die folgenden Pipelineoptionen im Nutzercode oder in der metadata.json-Datei nicht:
Java
runnerprojectjobNametemplateLocationregion
Python
runnerprojectjob_nametemplate_locationregion
Go
runnerprojectjob_nametemplate_locationregion
Ergebnisdatei konnte nicht gelesen werden
Wenn Sie versuchen, einen Job aus einer flexiblen Vorlage auszuführen, schlägt der Job möglicherweise mit dem folgenden Fehler fehl:
Failed to read the result file : gs://BUCKET_NAME...
Dieser Fehler tritt auf, wenn das Compute Engine-Standarddienstkonto nicht alle Berechtigungen hat, die zum Ausführen einer flexiblen Vorlage erforderlich sind.
Eine Liste der erforderlichen Berechtigungen finden Sie unter Berechtigungen zum Ausführen einer flexiblen Vorlage.
Dieser Fehler kann auch folgende Ursachen haben:
- Versuch, eine flexible Vorlage als Nutzer ohne Root-Berechtigung auszuführen, was im Allgemeinen nicht unterstützt wird. Weitere Informationen finden Sie unter Ausführung als Nicht-Root-Nutzer wird nicht unterstützt oder wenden Sie sich an Ihr Account-Management-Team.
- Vorübergehende Netzwerklatenz oder Probleme mit der Cloud Storage API. Weitere Informationen finden Sie unter Sporadische Netzwerk- oder Cloud Storage-Fehler.
Berechtigung für Ressource verweigert
Wenn Sie versuchen, einen Job aus einer flexiblen Vorlage auszuführen, schlägt der Job möglicherweise mit dem folgenden Fehler fehl:
Permission "MISSING_PERMISSION" denied on resource "projects/PROJECT_ID/locations/REGION/repositories/REPOSITORY_NAME" (or it may not exist).
Dieser Fehler tritt auf, wenn das verwendete Dienstkonto nicht berechtigt ist, auf erforderliche Ressourcen zum Ausführen einer flexiblen Vorlage zuzugreifen.
Prüfen Sie, ob das Dienstkonto die erforderlichen Berechtigungen hat, um dieses Problem zu vermeiden. Passen Sie die Dienstkontoberechtigungen nach Bedarf an.
Flag angegeben, aber nicht definiert
Wenn Sie versuchen, eine flexible Go-Vorlage mit der Pipelineoption worker_machine_type auszuführen, schlägt die Pipeline mit dem folgenden Fehler fehl:
flag provided but not defined: -machine_type
Dieser Fehler wird durch ein bekanntes Problem in den Apache Beam Go SDK-Versionen 2.47.0 und früher verursacht. Führen Sie zur Behebung dieses Problems ein Upgrade auf Apache Beam Go Version 2.48.0 oder höher durch.
JAR-Datei des Remote-Jobservers konnte nicht abgerufen werden
Wenn Sie versuchen, einen Job aus einer flexiblen Vorlage auszuführen, ohne mit dem Internet verbunden zu sein, schlägt der Job möglicherweise mit der folgenden Fehlermeldung fehl:
Unable to fetch remote job server jar at
https://repo.maven.apache.org/maven2/org/apache/beam/beam-sdks-java-io-expansion-service/VERSION/beam-sdks-java-io-expansion-service-VERSION.jar:
\u003curlopen error [Errno 101] Network is unreachable\u003e
Dieser Fehler tritt auf, weil die VM das Apache Beam-Java-Paket nicht aus dem Internet herunterladen kann. Dieses Paket ist erforderlich, wenn Sie einen mehrsprachigen Job mit einer flexiblen Vorlage ausführen.
Nehmen Sie eine der folgenden Änderungen vor, um dieses Problem zu beheben:
Internetverbindung herstellen Wenn eine Internetverbindung besteht, kann Ihr Job auf die erforderliche Datei zugreifen.
Fügen Sie das Apache Beam Java-Paket in Ihr lokales Verzeichnis ein, damit Ihr Job lokal darauf zugreifen kann. Erstellen Sie die Datei
/root/.apache_beam/cache/jars/im folgenden Verzeichnis: Beispiel:/root/.apache_beam/cache/jars/beam-sdks-java-io-expansion-service-SDK_VERSION.jar
Dateisystem konnte nicht über den angegebenen Pfad abgerufen werden
Wenn Sie versuchen, einen Job aus einer flexiblen Vorlage auszuführen, schlägt der Job möglicherweise mit dem folgenden Fehler fehl:
ValueError: Unable to get filesystem from specified path, please use
the correct path or ensure the required dependency is installed, e.g., pip
install apache-beam[gcp]. Path specified: PATH
Dieser Fehler tritt auf, wenn für den Job ein Container-Image der flexiblen Vorlage verwendet wird und das Container-Image keine Java-Installation enthält.
Fügen Sie Ihrem Dockerfile die folgende Zeile hinzu, um dieses Problem zu beheben:
sh
RUN apt-get update && apt-get install -y openjdk-17-jdk
Mit diesem Befehl wird Java in Ihrer Containerumgebung installiert.
Ressourcenerschöpfung der Launcher-VM
Wenn Sie versuchen, einen Job aus einer flexiblen Vorlage auszuführen, schlägt der Job möglicherweise mit dem folgenden Fehler fehl:
Failed to start the VM, launcher-ID, used for launching because of status code: INTERNAL, reason: Unknown error in operation 'OPERATION_ID': [ZONE_RESOURCE_POOL_EXHAUSTED_WITH_DETAILS] 'The zone 'projects/PROJECT_ID/zones/ZONE_ID' does not have enough resources available to fulfill the request.
Der VM-Name launcher-ID steht für den Namen der Launcher-VM. Die Launcher-VM ist für das Erfassen von Jobressourcen wie dem Vorlagencode und dem Image verantwortlich, bevor der Jobgraph erstellt und an den Dataflow-Dienst gesendet wird, um die Arbeit zu starten.
Wenn Sie den Parameter launcherMachineType nicht angeben, wählt Dataflow einen Standardmaschinentyp für die Launcher-VM aus, in der Regel e2-standard-2.
Diese Auswahl ist unabhängig vom Worker-machineType. Fehler aufgrund von Ressourcenerschöpfung können auftreten, wenn dieser Standardmaschinentyp in der Region oder Zone des Jobs nicht verfügbar ist. Wenn Sie einen bestimmten Maschinentyp verwenden möchten, legen Sie launcherMachineType fest.
Verwenden Sie eine der folgenden Strategien, um dieses Problem zu beheben:
- Aktualisieren Sie den Maschinentyp des Launchers auf einen anderen Maschinentyp und wiederholen Sie den Job.
- REST API: Legen Sie
launchParameter.environment.launcherMachineTypein der MethodeflexTemplates.launchfest. - gcloud CLI: Legen Sie das Flag
--launcher-machine-typeim Befehlgcloud dataflow flex-template runfest.
- REST API: Legen Sie
- Wenn Sie den Parameter
zonefestgelegt haben, entfernen Sie ihn, damit Dataflow die Launcher-VM in einer Zone mit Kapazität platzieren kann. - Starten Sie Ihre flexible Vorlage aus einer anderen Region.
Verzögerung beim Starten der flexiblen Vorlage
Wenn Sie einen Job mit einer flexiblen Vorlage senden, wird die Jobanfrage in eine Spanner-Warteschlange gestellt. Der Vorlagen-Launcher ruft den Job aus der Spanner-Warteschlange ab und führt dann die Vorlage aus. Falls Spanner einen Nachrichtenrückstand hat, kann es zwischen dem Senden und dem Start des Jobs zu einer erheblichen Verzögerung kommen.
Um dieses Problem zu umgehen, starten Sie Ihre flexible Vorlage in einer anderen Region.
Die Vorlagenparameter sind ungültig
Wenn Sie versuchen, mit der gcloud CLI einen Job auszuführen, der eine von Google bereitgestellte Vorlage verwendet, tritt der folgende Fehler auf:
ERROR: (gcloud.beta.dataflow.flex-template.run) INVALID_ARGUMENT: The template
parameters are invalid. Details: defaultSdkHarnessLogLevel: Unrecognized
parameter defaultWorkerLogLevel: Unrecognized parameter
Dieser Fehler tritt auf, weil einige von Google bereitgestellten Vorlagen die Optionen defaultSdkHarnessLog und defaultWorkerLog nicht unterstützen.
Verwenden Sie die entsprechende Methode für Ihren Vorlagentyp, um dieses Problem zu beheben.
Flexible Vorlagen
Verwenden Sie bei flexiblen Vorlagen das Flag --additional-pipeline-options, um die Pipelineoptionen als String zu übergeben. Beispiel mit dem Befehl gcloud dataflow
flex-template run:
gcloud dataflow flex-template run JOB_NAME \
--template-file-gcs-location=GCS_TEMPLATE_PATH \
--additional-pipeline-options=defaultSdkHarnessLogLevel=WARN,defaultWorkerLogLevel=WARN
Ersetzen Sie die folgenden Werte:
JOB_NAME: der Name Ihres Dataflow-JobsGCS_TEMPLATE_PATH: der Cloud Storage-Pfad zur Vorlagendatei
Klassische Vorlagen
Bei klassischen Vorlagen besteht die Problemumgehung darin, die Vorlagenspezifikationsdatei in einen Cloud Storage-Bucket zu kopieren und der Datei die folgenden zusätzlichen Parameter hinzuzufügen.
"metadata": {
...
"parameters": [
...,
{
"name": "defaultSdkHarnessLogLevel",
"isOptional": true,
"paramType": "TEXT"
},
{
"name": "defaultWorkerLogLevel",
"isOptional": true,
"paramType": "TEXT"
}
]
}
Nachdem Sie diese Änderung an der Vorlagendatei vorgenommen haben, verwenden Sie das folgende Flag, wenn Sie die Vorlage ausführen.
--gcs-location=gs://BUCKET_NAME/FILENAME
Ersetzen Sie die folgenden Werte:
BUCKET_NAME: der Name Ihres Cloud Storage-BucketsFILENAME: durch den Name Ihrer Vorlagenspezifikationsdatei
Flexible Vorlage-Launcher-Logs zeigen den falschen Schweregrad an
Wenn die Ausführung einer benutzerdefinierten flexiblen Vorlage fehlschlägt, wird in den Logdateien die folgende Meldung mit dem Schweregrad ERROR angezeigt:
ERROR: Error occurred in the launcher container: Template launch failed. See console logs.
Die Ursache für den Startfehler wird in der Regel vor dieser Meldung mit dem Schweregrad INFO in den Logs angezeigt. Obwohl diese Logebene möglicherweise falsch ist, ist sie zu erwarten, da mit dem Launcher für Flexible Vorlage keine Schweregraddetails aus den von der Apache Beam-Anwendung generierten Logeinträgen extrahiert werden können.
Wenn Sie den korrekten Schweregrad für jede Nachricht im Launcher-Log sehen möchten, konfigurieren Sie Ihre Vorlage so, dass Logs im JSON-Format statt im Nur-Text-Format generiert werden. Mit dieser Konfiguration kann der Vorlagen-Launcher den korrekten Schweregrad der Logeinträge extrahieren. Verwenden Sie die folgende Nachrichtenstruktur:
{
"message": "The original log message",
"severity": "DEBUG/INFO/WARN/ERROR"
}
In Java können Sie den Logback-Logger mit einer benutzerdefinierten JSON-Appender-Implementierung verwenden. Weitere Informationen finden Sie in der Logback-Beispielkonfiguration und im JSON-Appender-Beispielcode auf GitHub.
Dieses Problem betrifft nur die Logs, die vom Launcher der flexiblen Vorlage beim Starten der Pipeline generiert werden. Wenn der Start erfolgreich war und die Pipeline ausgeführt wird, haben die von Dataflow-Workern erstellten Logs den korrekten Schweregrad.
Von Google bereitgestellte Vorlagen zeigen beim Start des Jobs den richtigen Schweregrad an, da die von Google bereitgestellten Vorlagen diesen JSON-Logging-Ansatz verwenden.