2012-04-14 8 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行目でnullポインタ例外が発生しました:私もだ

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

あなたはCompressionCodecFactoryを使用する必要があります。

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

ありがとうございます。これもうまくいった。 –

4

あなたは間違っています。これを行うための標準的な方法は次のようになります。あなたはそれを直接インスタンス化した場合

TextOutputFormat.setOutputCompressorClass(job, GzipCodec.class); 

GzipCodecが設定可能である、あなたはそれを正しく初期化する必要がある(setConf、...)

はこれを試してみて、私に知らせてそれが動作すれば。あなたは(@linkerの答えに詳述)の取り扱い標準OUTPUTFORMATの外に圧縮を使用する場合

+0

おかげで、それが働きました。 –

関連する問題