2012-04-14 26 views
1
使用CompressionCodec

我做下面要做的O/P文件壓縮從減速機:如何在Hadoop中

OutputStream out = ipFs.create(new Path(opDir + "/" + fileName)); 
CompressionCodec codec = new GzipCodec(); 
OutputStream cs = codec.createOutputStream(out); 
BufferedWriter cout = new BufferedWriter(new OutputStreamWriter(cs)); 
cout.write(...) 

但在第3行了空指針異常:

java.lang.NullPointerException 
    at org.apache.hadoop.io.compress.zlib.ZlibFactory.isNativeZlibLoaded(ZlibFactory.java:63) 
    at org.apache.hadoop.io.compress.GzipCodec.createOutputStream(GzipCodec.java:92) 
    at myFile$myReduce.reduce(myFile.java:354) 

我也得到了跟着JIRA一樣。

如果我做錯了什麼,你能建議嗎?

回答

7

,如果你想使用的壓縮標準OUTPUTFORMAT處理(如@linker答案詳述)外,您應該使用CompressionCodecFactory:

CompressionCodecFactory ccf = new CompressionCodecFactory(conf) 
CompressionCoec codec = ccf.getCodecByClassName(GZipCodec.class.getName()); 
OutputStream compressedOutputSream = codec.createOutputStream(outputStream) 
+0

謝謝。這也有效。 – 2012-04-15 03:22:23

4

你做錯了。做到這一點的標準方法是:

TextOutputFormat.setOutputCompressorClass(job, GzipCodec.class); 

的GzipCodec是一個可配置的,你如果直接實例化它正確初始化(setConf,...)

試試這個,讓我知道如果有效的話。

+0

謝謝,它的工作。 – 2012-04-15 03:21:54