众所周知,没有任何一种压缩算法能达到一劳永逸的效果,如何选择压缩算法需要实际情况实际分析,归根到底其实就是时间与空间的选择。
压缩的好处 和 坏处
好处:
1、节省空间
2、减少IO(硬盘IO 和 网络传输IO)
3、减少网络传输时间
坏处:
1、由于使用数据时,需要先将数据解压,加重CPU负荷
常用的压缩技术:
目前如果LZO使用索引技术,是能支持风格
压缩在Hadoop中的应用 - 是否支持分割gzip、bzip2、LZO、Snappy区别主要在于是否支持分割。如果不支持分割,则意味中只能使用一个Task处理。
如何选择压缩算法
1、根据实际情况,选择使用Lossless(无损)还是Lossy(有损)的压缩技术。
2、判断热度选择压缩比。
以一个MR的JOB为例子作分析:
这里先将一个MR的JOB分大致为3个阶段:MAP、Shuffle&Sort、Reduce。每个阶段都会伴随网络传输、硬盘IO 和 解压(输入)压缩(输出)
已一个MR的job为例,InputSplit->Maps之间,如果读取的文件使用了不支持分割的压缩技术,意味着这里InputSplit 和 Maps 是多对一的关系,效率自然大大减低,如果数据量大甚至会出现OOM。
如果使用支持分割的技术,如果压缩比太大,意味着Maps阶段会花费大量的CPU资源去解压这些数据,很好可能造成JOB的阻塞。所以需要权衡时间和空间采用一种解压较快、压缩比较低可支持分割的压缩技术。
Shuffle&Sort阶段同Map
Reduce阶段,如果最后输出的数据不作为其它JOB的数据源,建议选择压缩比较高的技术。