2012-04-14 9 views
1

ich folgendes tue Kompression von o/p-Dateien von Minderer zu tun:Wie CompressionCodec in Hadoop verwenden

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(...) 

aber bekam Null-Zeiger-Ausnahme in Zeile 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) 

ich auch bekam folgende JIRA für die gleiche.

Können Sie mir bitte vorschlagen, wenn ich etwas falsch mache?

Antwort

7

Sie sollten die CompressionCodecFactory verwenden, wenn Sie Komprimierung außerhalb des Standardoutput verwenden möchten Handling (wie in @linker Antwort ausführlich):

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

Danke. Das hat auch funktioniert. –

4

Sie tun es falsch. Der übliche Weg, dies zu tun wäre:

TextOutputFormat.setOutputCompressorClass(job, GzipCodec.class); 

Die GzipCodec ein konfigurierbar ist, haben Sie es richtig initialisiert werden, wenn Sie es direkt instanziiert (setConf, ...)

die Sie interessieren und lassen Sie mich wissen wenn das geht.

+0

Dank, es funktionierte. –