Auf dieser Seite finden Sie Tipps und Strategien zur Fehlerbehebung, die für Sie nützlich sein könnten, wenn Sie Probleme beim Erstellen oder Ausführen einer Dataflow-Pipeline haben. Diese Informationen können Ihnen dabei helfen, einen Pipelinefehler zu erkennen und den Grund einer fehlgeschlagenen Ausführung der Pipeline zu bestimmen. Darüber hinaus erhalten Sie einige Vorschläge zur Behebung des Problems.
Dataflow liefert in Echtzeit Feedback zu Ihrem Job und es gibt eine Reihe von grundlegenden Schritten, die Sie bei der Prüfung von Fehlermeldungen, Logs und anderen Gegebenheiten, wie einem stockenden Fortschritt des Jobs, verwenden können.
Hilfe bei gängigen Fehlern, die beim Ausführen eines Dataflow-Jobs auftreten können, erhalten Sie auf der Seite Hinweise zu gängigen Fehlern.
Status einer Pipeline prüfen
Sie können mithilfe der Dataflow-Monitoring-Oberfläche jegliche Fehler in der Ausführung Ihrer Pipeline erkennen.
- Gehen Sie zur Google Cloud Console.
- Wählen Sie Ihr Google Cloud-Projekt aus der Projektliste aus.
- Klicken Sie auf das Menü in der oberen linken Ecke.
- Gehen Sie zum Abschnitt Big Data und klicken Sie auf Dataflow. Daraufhin wird im rechten Bereich eine Liste der laufenden Jobs angezeigt.
- Wählen Sie den Pipelinejob, den Sie anzeigen lassen möchten. Den Status des Jobs sehen Sie auf einen Blick im Feld Status: "Wird ausgeführt", "Erfolgreich" oder "Fehler".

Grundlegender Workflow zur Fehlerbehebung
Falls ein Pipelinejob fehlgeschlagen ist, können Sie den Job auswählen, um weitere Details zu Fehlern und Ausführungsergebnissen aufzurufen. Wenn Sie einen Job auswählen, können Sie wichtige Diagramme für Ihre Pipeline, die Ausführungsgrafik, das Feld Jobdetails sowie ein Feld für Joblogs, Worker-Logs und Job Error Reporting aufrufen.
Fehlermeldungen zu Jobs prüfen
Klicken Sie auf keyboard_capslock, um die vom Pipelinecode und vom Dataflow-Dienst generierten Joblogs zu erweitern.
Sie können die in Joblogs angezeigten Nachrichten durch Klicken auf Alle Log-Ebenen arrow_drop_down filtern. Wenn Sie nur Fehlermeldungen anzeigen lassen möchten, klicken Sie auf Filter filter_list und wählen Sie Fehler aus.
Wenn Sie eine Fehlermeldung erweitern möchten, klicken Sie auf den erweiterbaren Bereich arrow_right.
Alternativ können Sie auf das Feld Job Error Reporting klicken. Dieses Feld zeigt, wo Fehler auf der ausgewählten Zeitachse aufgetreten sind sowie die Anzahl aller protokollierten Fehler.
Schrittlogs für den Job ansehen
Wenn Sie einen Schritt in Ihrer Pipelinegrafik auswählen, wechselt das Logsteuerfeld von der Anzeige der Joblogs, die von dem Dataflow-Dienst generiert werden, zu der Anzeige der Logs der Compute Engine-Instanzen, die Ihren Pipelineschritt ausführen.
Cloud Logging fasst alle gesammelten Logs aus den Compute Engine-Instanzen Ihres Projekts an einem Ort zusammen. Weitere Informationen zur Verwendung der verschiedenen Logging-Möglichkeiten von Dataflow finden Sie unter Logging von Pipelinenachrichten.
Umgang mit automatisierter Pipelineablehnung
In einigen Fällen erkennt der Dataflow-Dienst, dass Ihre Pipeline bekannte SDK-Probleme auslösen könnte. Damit Pipelines, die wahrscheinlich Probleme verursachen, nicht gesendet werden, lehnt Dataflow diese Pipelines automatisch ab und zeigt folgende Meldung an:
The workflow was automatically rejected by the service because it may trigger an identified bug in the SDK (details below). If you think this identification is in error, and would like to override this automated rejection, please re-submit this workflow with the following override flag: [OVERRIDE FLAG]. Bug details: [BUG DETAILS]. Contact Google Cloud Support for further help. Please use this identifier in your communication: [BUG ID].
Wenn Sie nach Lesen der Hinweise in den verlinkten Fehlerdetails die Pipeline trotzdem ausführen möchten, können Sie die automatische Ablehnung überschreiben. Fügen Sie das Flag --experiments=<override-flag>
hinzu und senden Sie die Pipeline noch einmal.
Ursache eines Pipelinefehlers ermitteln
In der Regel kann eine fehlgeschlagene Apache Beam-Pipelineausführung eine der folgenden Ursachen haben:
- Fehler bei der Erstellung der Grafik oder Pipeline: Diese Fehler treten auf, wenn Dataflow beim Erstellen der Grafik mit den Schritten, aus denen Ihre Pipeline besteht (wie von Ihrer Apache Beam-Pipeline beschrieben), ein Problem hat.
- Fehler bei der Jobvalidierung: Der Dataflow-Dienst prüft jeden Pipelinejob, den Sie starten. Fehler im Validierungsprozess können verhindern, dass der Job erfolgreich erstellt oder ausgeführt wird. Validierungsfehler können Probleme mit dem Cloud Storage-Bucket des Google Cloud-Projekts oder mit den Berechtigungen des Projekts umfassen.
- Ausnahmen im Worker-Code: Diese Fehler treten auf, wenn der vom Nutzer bereitgestellte Code, der von Dataflow auf parallele Worker wie die
DoFn
-Instanzen einerParDo
-Transformation verteilt wird, fehlerhaft ist. - Langsame Pipelines oder fehlende Ausgabe: Wenn eine Pipeline langsam oder über einen längeren Zeitraum ausgeführt wird, ohne dass Ergebnisse gemeldet werden, sollten Sie Ihre Kontingente für das Streaming von Datenquellen und -senken wie Pub/Sub prüfen. Es gibt auch bestimmte Transformationen, die besser für Streamingpipelines mit großem Volumen geeignet sind als andere.
- Fehler aufgrund vorübergehender Ausfälle in anderen Google Cloud-Diensten. Ihre Pipeline kann aufgrund eines vorübergehenden Ausfalls oder eines anderen Problems in den Google Cloud-Diensten, auf die Dataflow angewiesen ist, z. B. Compute Engine oder Cloud Storage, fehlschlagen.
Fehler bei der Erstellung der Grafik oder Pipeline erkennen
Ein Fehler bei der Erstellung einer Grafik kann auftreten, wenn Dataflow die Ausführungsgrafik für Ihre Pipeline aus dem Code in Ihrem Dataflow-Programm erstellt. Dataflow prüft die Grafik während der Erstellung auf ungültige Vorgänge.
Falls Dataflow einen Fehler bei der Erstellung von Grafiken erkennt, wird im Dataflow-Dienst kein Job erstellt. Daher wird in diesem Fall in der Dataflow-Monitoring-Oberfläche kein Feedback angezeigt. Stattdessen erhalten Sie im Console- oder Terminalfenster, in dem die Apache Beam-Pipeline ausgeführt wurde, eine Fehlermeldung ähnlich der folgenden:
Java: SDK 2.x
Wenn die Pipeline beispielsweise versucht, eine Gruppierung wie GroupByKey
auf eine unbegrenzte PCollection
mit globalem Fenstermodus und ohne Trigger anzuwenden, erhalten Sie eine Fehlermeldung ähnlich der folgenden:
... ... Exception in thread "main" java.lang.IllegalStateException: ... GroupByKey cannot be applied to non-bounded PCollection in the GlobalWindow without a trigger. ... Use a Window.into or Window.triggering transform prior to GroupByKey ...
Python
Wenn Ihre Pipeline zum Beispiel Type Hints verwendet und ein Parametertyp in einer der Transformationen nicht wie erwartet ist, erhalten Sie eine Fehlermeldung ähnlich der folgenden:
... in <module> run() ... in run | beam.Map('count', lambda (word, ones): (word, sum(ones)))) ... in __or__ return self.pipeline.apply(ptransform, self) ... in apply transform.type_check_inputs(pvalueish) ... in type_check_inputs self.type_check_inputs_or_outputs(pvalueish, 'input') ... in type_check_inputs_or_outputs pvalue_.element_type)) google.cloud.dataflow.typehints.decorators.TypeCheckError: Input type hint violation at group: expected Tuple[TypeVariable[K], TypeVariable[V]], got <type 'str'>
Java: SDK 1.x
Sollte ein solcher Fehler auftreten, prüfen Sie den Pipelinecode darauf, ob die Pipelinevorgänge zulässig sind.
Fehler bei der Cloud Dataflow-Jobvalidierung erkennen
Sobald der Dataflow-Dienst die Grafik Ihrer Pipeline erhalten hat, versucht der Dienst, Ihren Job zu validieren. Dies umfasst Folgendes:
- Es wird geprüft, ob der Dienst auf die mit dem Job verknüpften Cloud Storage-Buckets für das Staging von Dateien und die temporäre Ausgabe zugreifen kann.
- Es wird geprüft, ob die erforderlichen Berechtigungen in Ihrem Google Cloud-Projekt vorliegen.
- Es wird geprüft, ob der Dienst auf Eingabe- und Ausgabequellen wie Dateien zugreifen kann.
Wenn der Validierungsprozess Ihres Jobs fehlschlägt, wird Ihnen eine Fehlermeldung in der Dataflow-Monitoring-Oberfläche sowie Ihrem Console- oder dem Terminalfenster angezeigt, wenn Sie die Blocking-Ausführung verwenden. Die Fehlermeldung sieht etwa so aus:
Java: SDK 2.x
INFO: To access the Dataflow monitoring console, please navigate to https://console.developers.google.com/project/google.com%3Aclouddfe/dataflow/job/2016-03-08_18_59_25-16868399470801620798 Submitted job: 2016-03-08_18_59_25-16868399470801620798 ... ... Starting 3 workers... ... Executing operation BigQuery-Read+AnonymousParDo+BigQuery-Write ... Executing BigQuery import job "dataflow_job_16868399470801619475". ... Stopping worker pool... ... Workflow failed. Causes: ...BigQuery-Read+AnonymousParDo+BigQuery-Write failed. Causes: ... BigQuery getting table "non_existent_table" from dataset "cws_demo" in project "my_project" failed. Message: Not found: Table x:cws_demo.non_existent_table HTTP Code: 404 ... Worker pool stopped. ... com.google.cloud.dataflow.sdk.runners.BlockingDataflowPipelineRunner run INFO: Job finished with status FAILED Exception in thread "main" com.google.cloud.dataflow.sdk.runners.DataflowJobExecutionException: Job 2016-03-08_18_59_25-16868399470801620798 failed with status FAILED at com.google.cloud.dataflow.sdk.runners.DataflowRunner.run(DataflowRunner.java:155) at com.google.cloud.dataflow.sdk.runners.DataflowRunner.run(DataflowRunner.java:56) at com.google.cloud.dataflow.sdk.Pipeline.run(Pipeline.java:180) at com.google.cloud.dataflow.integration.BigQueryCopyTableExample.main(BigQueryCopyTableExample.java:74)
Python
INFO:root:Created job with id: [2016-03-08_14_12_01-2117248033993412477] ... Checking required Cloud APIs are enabled. ... Job 2016-03-08_14_12_01-2117248033993412477 is in state JOB_STATE_RUNNING. ... Combiner lifting skipped for step group: GroupByKey not followed by a combiner. ... Expanding GroupByKey operations into optimizable parts. ... Lifting ValueCombiningMappingFns into MergeBucketsMappingFns ... Annotating graph with Autotuner information. ... Fusing adjacent ParDo, Read, Write, and Flatten operations ... Fusing consumer split into read ... ... Starting 1 workers... ... ... Executing operation read+split+pair_with_one+group/Reify+group/Write ... Executing failure step failure14 ... Workflow failed. Causes: ... read+split+pair_with_one+group/Reify+group/Write failed. Causes: ... Unable to view metadata for files: gs://dataflow-samples/shakespeare/missing.txt. ... Cleaning up. ... Tearing down pending resources... INFO:root:Job 2016-03-08_14_12_01-2117248033993412477 is in state JOB_STATE_FAILED.
Java: SDK 1.x
Ausnahme im Worker-Code erkennen
Beim Ausführen eines Jobs können im Worker-Code Fehler oder Ausnahmen auftreten. Diese bedeuten im Allgemeinen, dass die DoFn
-Objekte im Pipelinecode unbearbeitete Ausnahmen erzeugt haben, die dazu führen, dass Aufgaben im Dataflow-Job fehlschlagen.
Ausnahmen im Nutzercode, zum Beispiel in Ihren DoFn
-Instanzen, werden in der Dataflow-Monitoring-Oberfläche angezeigt.
Wenn Sie eine Pipeline mit Blocking ausführen, werden Fehlermeldungen auch im Console- bzw. Terminalfenster ausgegeben. Diese sehen ungefähr so aus:
Java: SDK 2.x
INFO: To access the Dataflow monitoring console, please navigate to https://console.developers.google.com/project/example_project/dataflow/job/2017-05-23_14_02_46-1117850763061203461 Submitted job: 2017-05-23_14_02_46-1117850763061203461 ... ... To cancel the job using the 'gcloud' tool, run: gcloud beta dataflow jobs --project=example_project cancel 2017-05-23_14_02_46-1117850763061203461 ... Autoscaling is enabled for job 2017-05-23_14_02_46-1117850763061203461. ... The number of workers will be between 1 and 15. ... Autoscaling was automatically enabled for job 2017-05-23_14_02_46-1117850763061203461. ... ... Executing operation BigQueryIO.Write/BatchLoads/Create/Read(CreateSource)+BigQueryIO.Write/BatchLoads/GetTempFilePrefix+BigQueryIO.Write/BatchLoads/TempFilePrefixView/BatchViewOverrides.GroupByWindowHashAsKeyAndWindowAsSortKey/ParDo(UseWindowHashAsKeyAndWindowAsSortKey)+BigQueryIO.Write/BatchLoads/TempFilePrefixView/Combine.GloballyAsSingletonView/Combine.globally(Singleton)/WithKeys/AddKeys/Map/ParMultiDo(Anonymous)+BigQueryIO.Write/BatchLoads/TempFilePrefixView/Combine.GloballyAsSingletonView/Combine.globally(Singleton)/Combine.perKey(Singleton)/GroupByKey/Reify+BigQueryIO.Write/BatchLoads/TempFilePrefixView/Combine.GloballyAsSingletonView/Combine.globally(Singleton)/Combine.perKey(Singleton)/GroupByKey/Write+BigQueryIO.Write/BatchLoads/TempFilePrefixView/BatchViewOverrides.GroupByWindowHashAsKeyAndWindowAsSortKey/BatchViewOverrides.GroupByKeyAndSortValuesOnly/Write ... Workers have started successfully. ... ... org.apache.beam.runners.dataflow.util.MonitoringUtil$LoggingHandler process SEVERE: 2017-05-23T21:06:33.711Z: (c14bab21d699a182): java.lang.RuntimeException: org.apache.beam.sdk.util.UserCodeException: java.lang.ArithmeticException: / by zero at com.google.cloud.dataflow.worker.runners.worker.GroupAlsoByWindowsParDoFn$1.output(GroupAlsoByWindowsParDoFn.java:146) at com.google.cloud.dataflow.worker.runners.worker.GroupAlsoByWindowFnRunner$1.outputWindowedValue(GroupAlsoByWindowFnRunner.java:104) at com.google.cloud.dataflow.worker.util.BatchGroupAlsoByWindowAndCombineFn.closeWindow(BatchGroupAlsoByWindowAndCombineFn.java:191) ... ... Cleaning up. ... Stopping worker pool... ... Worker pool stopped.
Hinweis: Der Dataflow-Dienst versucht fehlgeschlagene Aufgaben bis zu 4-mal im Batch-Modus und unbegrenzt im Streaming-Modus noch einmal auszuführen. Im Batch-Modus wird Ihr Job fehlschlagen; im Streaming-Modus kann er auf unbestimmte Zeit zum Stillstand kommen.
Python
INFO:root:Job 2016-03-08_14_21_32-8974754969325215880 is in state JOB_STATE_RUNNING. ... INFO:root:... Expanding GroupByKey operations into optimizable parts. INFO:root:... Lifting ValueCombiningMappingFns into MergeBucketsMappingFns INFO:root:... Annotating graph with Autotuner information. INFO:root:... Fusing adjacent ParDo, Read, Write, and Flatten operations ... INFO:root:...: Starting 1 workers... INFO:root:...: Executing operation group/Create INFO:root:...: Value "group/Session" materialized. INFO:root:...: Executing operation read+split+pair_with_one+group/Reify+group/Write INFO:root:Job 2016-03-08_14_21_32-8974754969325215880 is in state JOB_STATE_RUNNING. INFO:root:...: ...: Workers have started successfully. INFO:root:Job 2016-03-08_14_21_32-8974754969325215880 is in state JOB_STATE_RUNNING. INFO:root:...: Traceback (most recent call last): File ".../dataflow_worker/batchworker.py", line 384, in do_work self.current_executor.execute(work_item.map_task) ... File ".../apache_beam/examples/wordcount.runfiles/py/apache_beam/examples/wordcount.py", line 73, in <lambda> ValueError: invalid literal for int() with base 10: 'www'
Hinweis: Der Dataflow-Dienst versucht fehlgeschlagene Aufgaben im Batchmodus bis zu viermal und im Streamingmodus unbegrenzt zu wiederholen. Im Batchmodus schlägt Ihr Job fehl. Im Streamingmodus kann er auf unbestimmte Zeit verzögert werden.
Java: SDK 1.x
Fügen Sie Ihrem Code ggf. einen Ausnahme-Handler hinzu, um Fehler zu vermeiden. Wenn Sie beispielsweise Elemente auslassen möchten, die einige benutzerdefinierte Eingabevalidierungen in ParDo
fehlschlagen lassen, verarbeiten Sie die Ausnahme innerhalb Ihres DoFn
-Objekts und lassen Sie das Element weg.
Sie können fehlschlagende Elemente auch auf mehrere Arten verfolgen:
- Sie können die zu einem Fehlschlag führenden Elemente loggen und die Ausgabe mithilfe von Cloud Logging prüfen.
- Sie können die Dataflow-Worker- und Worker-Startlogs auf Warnungen oder Fehler prüfen, indem Sie der Anleitung unter Logs ansehen folgen.
- Sie können festlegen, dass
ParDo
die zu einem Fehlschlag führenden Elemente zur späteren Prüfung in eine zusätzliche Ausgabe schreibt.
Wenn Sie die Attribute einer ausgeführten Pipeline verfolgen möchten, verwenden Sie die Klasse Metrics
wie im folgenden Beispiel gezeigt:
Java: SDK 2.x
final Counter counter = Metrics.counter("stats", "even-items"); PCollection<Integer> input = pipeline.apply(...); ... input.apply(ParDo.of(new DoFn<Integer, Integer>() { @ProcessElement public void processElement(ProcessContext c) { if (c.element() % 2 == 0) { counter.inc(); } });
Python
class FilterTextFn(beam.DoFn): """A DoFn that filters for a specific key based on a regex.""" def __init__(self, pattern): self.pattern = pattern # A custom metric can track values in your pipeline as it runs. Create # custom metrics to count unmatched words, and know the distribution of # word lengths in the input PCollection. self.word_len_dist = Metrics.distribution(self.__class__, 'word_len_dist') self.unmatched_words = Metrics.counter(self.__class__, 'unmatched_words') def process(self, element): word = element self.word_len_dist.update(len(word)) if re.match(self.pattern, word): yield element else: self.unmatched_words.inc() filtered_words = ( words | 'FilterText' >> beam.ParDo(FilterTextFn('s.*')))
Java: SDK 1.x
Fehlerbehebung bei langsam laufenden Pipelines oder fehlender Ausgabe
Java: SDK 2.x
Wenn Sie eine Streamingpipeline mit hohem Volumen haben, die langsam läuft oder sich verzögert, gibt es einige Dinge, die Sie überprüfen können:
Pub/Sub-Kontingente
Wenn Ihre Pipeline Eingaben aus Pub/Sub liest, reicht das Pub/Sub-Kontingent für Ihr Google Cloud-Projekt eventuell nicht aus. Ein Indiz dafür ist, dass der Job eine hohe Anzahl von Fehlern wie 429 (Rate Limit Exceeded)
generiert. Mit den folgenden Schritten können Sie solche Fehler überprüfen:
- Gehen Sie zur Google Cloud Console.
- Klicken Sie im linken Navigationsbereich auf APIs & Dienste.
- Suchen Sie im Suchfeld nach Pub/Sub.
- Klicken Sie auf den Tab Nutzung.
- Prüfen Sie die Antwortcodes und suchen Sie nach Clientfehlercodes vom Typ
(4xx)
.
.withFanout
in kombinierten Transformationen verwenden
Wenn Ihre Pipeline ein hohes Volumen an unbegrenzten PCollection
s verarbeitet, empfehlen wir Folgendes:
- Verwenden Sie
Combine.Globally.withFanout
anstelle vonCombine.Globally
. - Verwenden Sie
Combine.PerKey.withHotKeyFanout
anstelle vonCount.PerKey
.
Python
Wenn Sie eine Streamingpipeline mit hohem Volumen haben, die langsam läuft oder sich verzögert, gibt es einige Dinge, die Sie überprüfen können:
Pub/Sub-Kontingente
Wenn Ihre Pipeline Eingaben aus Pub/Sub liest, reicht das Pub/Sub-Kontingent für Ihr Google Cloud-Projekt eventuell nicht aus. Ein Indiz dafür ist, dass der Job eine hohe Anzahl von Fehlern wie 429 (Rate Limit Exceeded)
generiert. Mit den folgenden Schritten können Sie solche Fehler überprüfen:
- Gehen Sie zur Google Cloud Console.
- Klicken Sie im linken Navigationsbereich auf APIs & Dienste.
- Suchen Sie im Suchfeld nach Pub/Sub.
- Klicken Sie auf den Tab Nutzung.
- Prüfen Sie die Antwortcodes und suchen Sie nach Clientfehlercodes vom Typ
(4xx)
.
Java: SDK 1.x
Gängige Fehler und mögliche Maßnahmen
Hilfe bei gängigen Fehlern, die beim Ausführen eines Dataflow-Jobs auftreten können, erhalten Sie auf der Seite Hinweise zu gängigen Fehlern.