压缩hdfs文件时发生ioexception

7uhlpewt  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(465)

我想压缩hdfs中当前存在的文件并删除未压缩的文件。这是代码,但它出错了一个ioexception。有什么关于为什么会这样的线索吗?

CompressionCodecFactory ccf = new CompressionCodecFactory(conf);
CompressionCodec codec = ccf.getCodecByClassName(GzipCodec.class.getName());                        
InputStream inpStrm = codec.createInputStream(fs.open(infoFilePath));
OutputStream compressedOutputSream = codec.createOutputStream(fs.create( new Path( infoFile + "." + codec.getDefaultExtension()) ));

IOUtils.copyBytes(inpStrm, compressedOutputSream, conf);

但出现了一个异常:

Exception in thread "main" java.io.IOException: incorrect header check
    at org.apache.hadoop.io.compress.zlib.ZlibDecompressor.inflateBytesDirect(Native Method)
    at org.apache.hadoop.io.compress.zlib.ZlibDecompressor.decompress(ZlibDecompressor.java:228)
    at org.apache.hadoop.io.compress.DecompressorStream.decompress(DecompressorStream.java:91)
    at org.apache.hadoop.io.compress.DecompressorStream.read(DecompressorStream.java:85)
    at java.io.InputStream.read(InputStream.java:101)
    at org.apache.hadoop.io.IOUtils.copyBytes(IOUtils.java:78)
    at org.apache.hadoop.io.IOUtils.copyBytes(IOUtils.java:52)
    at org.apache.hadoop.io.IOUtils.copyBytes(IOUtils.java:98)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:212)
k2arahey

k2arahey1#

可能除了新创建的文件之外,一些看起来像压缩的文件没有被压缩。当扩展名为.gz的文件是纯文本文件时,我遇到了这个问题。不同的hadoop版本处理这个问题的方式不同。很明显,文件名跟这事有关。

相关问题