Контекст: Потоковый конвейер с использованием потока данных 2.6.0, использующий окна и этапы GroupByKey
Что происходит: через короткое время конвейер сохраняетзапускает следующую ошибку:
java.lang.RuntimeException: Invalid namespace string: '//'
Глядя на трассировку стека, это происходит потому, что StateNamespaces
(https://github.com/apache/beam/blob/master/runners/core-java/src/main/java/org/apache/beam/runners/core/StateNamespaces.java) пытается отправить пустую строку пространства имен на CoderUtils.decodeFromBase64
, который создает неперехваченный EOF error
, который сам запускает CoderException
.
Однако, это происходит только в облаке. Действительно, просмотр трассировки стека показывает, что на карту поставлен собственный код потока данных ((в частности, прямой бегун никогда не использует StateNamespaces
)
Вот трассировка стека: (здесь полная трассировка стека https://pastebin.com/xwh82pYx)
java.lang.RuntimeException: Invalid namespace string: '//'
org.apache.beam.runners.core.StateNamespaces.fromString(StateNamespaces.java:270)
com.google.cloud.dataflow.worker.WindmillTimerInternals.windmillTimerToTimerData(WindmillTimerInternals.java:264)
com.google.cloud.dataflow.worker.StreamingModeExecutionContext$StepContext.lambda$getNextFiredTimer$1(StreamingModeExecutionContext.java:535)
com.google.cloud.dataflow.worker.repackaged.com.google.common.collect.Iterators$7.transform(Iterators.java:750)
com.google.cloud.dataflow.worker.repackaged.com.google.common.collect.TransformedIterator.next(TransformedIterator.java:47)
com.google.cloud.dataflow.worker.StreamingModeExecutionContext$StepContext.getNextFiredTimer(StreamingModeExecutionContext.java:543)
com.google.cloud.dataflow.worker.SimpleParDoFn.processTimers(SimpleParDoFn.java:445)
com.google.cloud.dataflow.worker.SimpleParDoFn.processTimers(SimpleParDoFn.java:343)
com.google.cloud.dataflow.worker.util.common.worker.ParDoOperation.finish(ParDoOperation.java:51)
com.google.cloud.dataflow.worker.util.common.worker.MapTaskExecutor.execute(MapTaskExecutor.java:83)
com.google.cloud.dataflow.worker.StreamingDataflowWorker.process(StreamingDataflowWorker.java:1227)
com.google.cloud.dataflow.worker.StreamingDataflowWorker.access$1000(StreamingDataflowWorker.java:136)
com.google.cloud.dataflow.worker.StreamingDataflowWorker$6.run(StreamingDataflowWorker.java:966)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.beam.sdk.coders.CoderException: java.io.EOFException
org.apache.beam.sdk.coders.InstantCoder.decode(InstantCoder.java:70)
org.apache.beam.sdk.coders.InstantCoder.decode(InstantCoder.java:34)
...
Как я могу исправить эту ошибку?
Некоторые исследования:
- Похоже, что нет документации по подобным ошибкам
- это может быть связано с этимошибка в бегущей строке, однако это должно было быть исправленоd в луче 2.5.0