2016-10-22 31 views
1

我有大量文件以gz格式存储,并试图通过读取这些文件来运行map-reduce程序(使用PIG)。我遇到的问题是,由于数据检查,Hadoop中的本地解压缩程序(ZlibDecompressor)无法成功解压缩其中的一部分。但我可以使用java GZIPInputStream成功读取这些文件。现在我的问题是 - 有没有办法禁用Zlib?或者在hadoop(2.7.2)中有没有其他的GZipCodec可以用来解压缩gzip输入文件?下面如何禁用hadoop中的本地zlib压缩库

org.apache.hadoop.mapred.TaskAttemptListenerImpl: Task: attempt_1475882463863_0108_m_000022_0 - exited : java.io.IOException: incorrect data 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.util.LineReader.fillBuffer(LineReader.java:180) 
    at org.apache.hadoop.util.LineReader.readDefaultLine(LineReader.java:216) 
    at org.apache.hadoop.util.LineReader.readLine(LineReader.java:174) 

错误给出非常感谢您的帮助。

回答

1

我自己找到答案。您可以设置以下属性来禁用所有本机库。

io.native.lib.available = false;

或者您可以扩展org.apache.hadoop.io.compress.GzipCodec.java以仅删除GzipCompressor的本机实现。