压缩hadoop mapreduce输出的最简单有效的方法

我可以用map压缩mapreduce输出到gzip

"mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec" 

是否可以直接为hadoop实现zip编解码器? Zip是容器,但每个存档只需要一个文件,那么使用CompressionCodec接口创建ZipCodec会很容易吗?

或者,也许有一种将gz文件转换为zip的有效方法,因为它们可以使用相同的deflate算法?

没什么大不了的,你可以包装一个java.util.zip.ZipOutputStream

您可以通过扩展org.apache.hadoop.io.compress.DefaultCodec来实现自己的编解码器。

在此编解码器中,您可以通过分别扩展org.apache.hadoop.io.compress.CompressorStream org.apache.hadoop.io.compress.DecompressorStream包装java zip流。

最后,您必须覆盖createInputStreamcreateOutputStream方法,并在那里返回包装流的新实例。

还是有点编码,我很确定在某个地方必须有一个已经存在的实现(我可能还记得它也是在几年前的Hadoop版本中)。