数据流GZIP TextIO ZipException:符号长度或距离过长

时间:2015-07-27 08:50:40

标签: java google-cloud-dataflow gzipinputstream

对大量压缩文本文件(1000多个文件,大小在100MB到1.5GB之间)使用TextIO.Read转换,有时会出现以下错误:

java.util.zip.ZipException: too many length or distance symbols at
java.util.zip.InflaterInputStream.read(InflaterInputStream.java:164) at
java.util.zip.GZIPInputStream.read(GZIPInputStream.java:117) at
java.io.BufferedInputStream.fill(BufferedInputStream.java:246) at
java.io.BufferedInputStream.read1(BufferedInputStream.java:286) at
java.io.BufferedInputStream.read(BufferedInputStream.java:345) at
java.io.FilterInputStream.read(FilterInputStream.java:133) at
java.io.PushbackInputStream.read(PushbackInputStream.java:186) at 
com.google.cloud.dataflow.sdk.runners.worker.TextReader$ScanState.readBytes(TextReader.java:261) at 
com.google.cloud.dataflow.sdk.runners.worker.TextReader$TextFileIterator.readElement(TextReader.java:189) at 
com.google.cloud.dataflow.sdk.runners.worker.FileBasedReader$FileBasedIterator.computeNextElement(FileBasedReader.java:265) at 
com.google.cloud.dataflow.sdk.runners.worker.FileBasedReader$FileBasedIterator.hasNext(FileBasedReader.java:165) at 
com.google.cloud.dataflow.sdk.util.common.worker.ReadOperation.runReadLoop(ReadOperation.java:169) at 
com.google.cloud.dataflow.sdk.util.common.worker.ReadOperation.start(ReadOperation.java:118) at 
com.google.cloud.dataflow.sdk.util.common.worker.MapTaskExecutor.execute(MapTaskExecutor.java:66) at 
com.google.cloud.dataflow.sdk.runners.worker.DataflowWorker.executeWork(DataflowWorker.java:204) at 
com.google.cloud.dataflow.sdk.runners.worker.DataflowWorker.doWork(DataflowWorker.java:151) at 
com.google.cloud.dataflow.sdk.runners.worker.DataflowWorker.getAndPerformWork(DataflowWorker.java:118) at 
com.google.cloud.dataflow.sdk.runners.worker.DataflowWorkerHarness$WorkerThread.call(DataflowWorkerHarness.java:139) at 
com.google.cloud.dataflow.sdk.runners.worker.DataflowWorkerHarness$WorkerThread.call(DataflowWorkerHarness.java:124) 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)

在线搜索相同的ZipException,只会导致此reply

  

当热部署程序在将应用程序完全复制到deploy目录之前尝试部署应用程序时,通常会发生Zip文件错误。如果复制文件需要几秒钟,这是相当常见的。解决方案是将文件复制到与应用程序服务器相同的磁盘分区上的临时目录,然后将该文件移动到deploy目录。

其他人是否遇到类似的例外?或者无论如何我们可以解决这个问题吗?

3 个答案:

答案 0 :(得分:6)

查看code that produces the error message zlib库(由JDK使用)似乎不支持您拥有的gzip文件格式。

zlibCodes for reserved symbols are rejected even if unused中的以下错误。

不幸的是,除了建议使用其他实用程序生成这些压缩文件之外,我们可能做的很少。

如果您可以生成一个我们可以用来重现问题的小示例gzip文件,我们可能会看到是否可以以某种方式解决这个问题,但我不会依赖它来成功。

答案 1 :(得分:0)

这个问题可能有点陈旧,但这是我昨天在Google搜索中发现此错误的第一个结果:

HIVE_CURSOR_ERROR:长度或距离符号太多

在这里提示之后,我意识到我已经破坏了我试图处理的文件的gzip构造。我有两个进程将gzip数据写入同一输出文件,输出文件因此而损坏。修复要写入唯一文件的进程解决了该问题。我认为这个答案可能会节省一些时间。

答案 2 :(得分:0)

我在Spring Boot中遇到此错误。我有一个主项目,它将使用图书馆项目。我在主要项目中使用了弹簧执行器。一旦我卸下弹簧执行器,它就会开始工作。