Google cloud dataflow 如何处理;数据流SDK导致的未经处理的错误;(已损坏的gz作为输入)

Google cloud dataflow 如何处理;数据流SDK导致的未经处理的错误;(已损坏的gz作为输入),google-cloud-dataflow,Google Cloud Dataflow,有没有办法处理“数据流SDK导致的未处理错误”? 具体地说,我们有一个数据流作业,它将gz文件列表(在GCS中)作为输入,并生成一些输出。 偶尔会有一个gz文件损坏,作业因此而失败。 我们想知道是否有一种方法来处理这个问题——具体来说,我们希望这样做,作业将忽略这些损坏的文件并继续。 不清楚我们是否能够捕获由于gz文件损坏而引发的异常(因为它似乎是在Dataflow SDK中处理的,导致它失败) (对于谷歌数据流团队:这里有一个特定的数据流作业id:2017-04-02_05_08_20-549

有没有办法处理“数据流SDK导致的未处理错误”? 具体地说,我们有一个数据流作业,它将gz文件列表(在GCS中)作为输入,并生成一些输出。 偶尔会有一个gz文件损坏,作业因此而失败。 我们想知道是否有一种方法来处理这个问题——具体来说,我们希望这样做,作业将忽略这些损坏的文件并继续。 不清楚我们是否能够捕获由于gz文件损坏而引发的异常(因为它似乎是在Dataflow SDK中处理的,导致它失败)

(对于谷歌数据流团队:这里有一个特定的数据流作业id:2017-04-02_05_08_20-5491890758767473661。)

更新:这是我们从日志UI获得的堆栈跟踪

(778029c78ed61ff2): java.io.IOException: Failed to advance reader of source: StaticValueProvider{value=gs://aaa.gz} range [0, 9223372036854775807)
    at com.google.cloud.dataflow.sdk.runners.worker.WorkerCustomSources$BoundedReaderIterator.advance(WorkerCustomSources.java:544)
    at com.google.cloud.dataflow.sdk.util.common.worker.ReadOperation$SynchronizedReaderIterator.advance(ReadOperation.java:425)
    at com.google.cloud.dataflow.sdk.util.common.worker.ReadOperation.runReadLoop(ReadOperation.java:217)
    at com.google.cloud.dataflow.sdk.util.common.worker.ReadOperation.start(ReadOperation.java:182)
    at com.google.cloud.dataflow.sdk.util.common.worker.MapTaskExecutor.execute(MapTaskExecutor.java:69)
    at com.google.cloud.dataflow.sdk.runners.worker.DataflowWorker.executeWork(DataflowWorker.java:284)
    at com.google.cloud.dataflow.sdk.runners.worker.DataflowWorker.doWork(DataflowWorker.java:220)
    at com.google.cloud.dataflow.sdk.runners.worker.DataflowWorker.getAndPerformWork(DataflowWorker.java:170)
    at com.google.cloud.dataflow.sdk.runners.worker.DataflowWorkerHarness$WorkerThread.doWork(DataflowWorkerHarness.java:192)
    at com.google.cloud.dataflow.sdk.runners.worker.DataflowWorkerHarness$WorkerThread.call(DataflowWorkerHarness.java:172)
    at com.google.cloud.dataflow.sdk.runners.worker.DataflowWorkerHarness$WorkerThread.call(DataflowWorkerHarness.java:159)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.EOFException
    at org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream.read(GzipCompressorInputStream.java:278)
    at java.nio.channels.Channels$ReadableByteChannelImpl.read(Channels.java:385)
    at com.google.cloud.dataflow.sdk.io.TextIO$TextSource$TextBasedReader.tryToEnsureNumberOfBytesInBuffer(TextIO.java:1077)
    at com.google.cloud.dataflow.sdk.io.TextIO$TextSource$TextBasedReader.findSeparatorBounds(TextIO.java:1011)
    at com.google.cloud.dataflow.sdk.io.TextIO$TextSource$TextBasedReader.readNextRecord(TextIO.java:1043)
    at com.google.cloud.dataflow.sdk.io.CompressedSource$CompressedReader.readNextRecord(CompressedSource.java:482)
    at com.google.cloud.dataflow.sdk.io.FileBasedSource$FileBasedReader.advanceImpl(FileBasedSource.java:536)
    at com.google.cloud.dataflow.sdk.io.OffsetBasedSource$OffsetBasedReader.advance(OffsetBasedSource.java:287)
    at com.google.cloud.dataflow.sdk.runners.worker.WorkerCustomSources$BoundedReaderIterator.advance(WorkerCustomSources.java:541)
    ... 14 more

您是否在日志记录/UI中获得堆栈跟踪?我可以给你回复,但是应该可以告诉消息来源忽略这些错误。我在帖子中添加了堆栈跟踪。最好告诉源代码忽略某些类型的错误(如此错误)!我查过了,现在看来这是不可能的。在数据流读取损坏的gz文件之前,您需要清除这些文件:(还可以编写一个源代码,以便更优雅地处理损坏的gz文件。