2016-10-22 123 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的本機實現。