2

レデューサーからo/pファイルの圧縮を行うために、次のことを行っています。

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もフォローしています。

私が何か間違ったことをしている場合は、提案してもらえますか?

4

2 に答える 2

8

標準の OutputFormat 処理以外で圧縮を使用する場合は、CompressionCodecFactory を使用する必要があります (@linker の回答で詳しく説明されています)。

CompressionCodecFactory ccf = new CompressionCodecFactory(conf)
CompressionCodec codec = ccf.getCodecByClassName(GzipCodec.class.getName());
OutputStream compressedOutputSream = codec.createOutputStream(outputStream)
于 2012-04-14T22:39:32.740 に答える
4

あなたはそれを間違っています。これを行う標準的な方法は次のとおりです。

TextOutputFormat.setOutputCompressorClass(job, GzipCodec.class);

GzipCodec は構成可能です。直接インスタンス化する場合は、適切に初期化する必要があります (setConf など)。

これを試して、うまくいくかどうか教えてください。

于 2012-04-14T18:17:16.883 に答える