6

大量の圧縮テキスト ファイル (1000 以上のファイル、100 MB から 1.5 GB のサイズ) で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 をオンラインで検索すると、次の応答のみが返されます。

アプリケーションが deploy ディレクトリに完全にコピーされる前に、ホット デプロイヤがアプリケーションをデプロイしようとすると、Zip ファイル エラーがよく発生します。ファイルのコピーに数秒かかる場合、これはかなり一般的です。解決策は、ファイルをアプリケーション サーバーと同じディスク パーティション上の一時ディレクトリにコピーしてから、そのファイルを deploy ディレクトリに移動することです。

他の誰かが同様の例外に遭遇しましたか? またはとにかく、この問題を解決できますか?

4

3 に答える 3

7

エラー メッセージを生成するコードを見ると、zlibライブラリ (JDK で使用される) が gzip ファイルの形式をサポートしていないことが問題のようです。

の次のバグのようですzlib:予約済みシンボルのコードは、未使用であっても拒否されます

残念ながら、別のユーティリティを使用してこれらの圧縮ファイルを生成することを提案する以外に、私たちができることはおそらくほとんどありません。

問題を再現するために使用できる小さなサンプル gzip ファイルを作成していただければ、何らかの方法で回避できるかどうかを確認できるかもしれませんが、これに頼って成功することはありません。

于 2015-07-28T00:44:33.603 に答える