http://comphadoop.weebly.com/experiment-and-results.html
http://www.slideshare.net/ydn/hug-compression-talk
以上几篇文章MR中常见的几种compression格式,并通过一些实验数据来比较。通常,compression可以应用于三个阶段:map input, map output, reduce output。
根据第三篇slide中的实验数据,几种compression算法需要从space/time上进行权衡:从压缩率来看,bzip2 > zlib(deflate, gzip) > lzo/snappy;从解压缩速度上看是相反的。尤其是压缩速度,lzo/snappy比zlib要快6~8倍,比bzip2要快8~10倍。解压速度差距没那么大,lzo/snappy比zlib快1~2倍(不过比bzip2要快将近20倍)。
因此,对于MR Job中的compression选择:
- map input常用sequecefile+zlib(default codec)。首先,bzip2虽然压缩率很高,但是解压速度太慢,IO上节省的时间可能都要被解压时间所抵消。而zlib的解压速度不算太差,而且压缩率比lzo/snappy要高,考虑到MR Job通常是IO-bound,选择zlib相对更能提高性能。
- 对于map output,考虑到map output需要在map端做压缩,在reduce端做解压,通常选择解压缩速度更快的lzo/snappy。