6

对大量压缩文本文件(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,仅导致此回复

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

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

4

3 回答 3

7

查看产生错误消息的代码,它似乎是zlib库(由 JDK 使用)不支持您拥有的 gzip 文件格式的问题。

它看起来是以下错误zlib保留符号的代码即使未使用也会被拒绝

不幸的是,除了建议使用另一个实用程序生成这些压缩文件之外,我们可能无能为力。

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

于 2015-07-28T00:44:33.603 回答
0

这个问题可能有点老了,但这是我昨天谷歌搜索这个错误的第一个结果:

HIVE_CURSOR_ERROR:长度或距离符号过多

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

于 2017-08-18T14:58:17.247 回答
0

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

于 2020-04-10T12:49:13.917 回答