我可以使用以下方法将MapReduce输出压缩为gzip格式:
"mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec"
实现Hadoop的zip编解码器是否容易?Zip是一个容器,但我需要每个存档只有一个文件,因此创建带有压缩编解码接口的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流。
最后,您需要重写createInputStream
和createOutputStream
方法,并在那里返回包装流的新实例。
虽然需要写一些代码,但我相信肯定已经有现成的实现了(我记得几年前也出现在Hadoop发布版中)。