浅谈HADOOP中压缩技术的选择

众所周知,没有任何一种压缩算法能达到一劳永逸的效果,如何选择压缩算法需要实际情况实际分析,归根到底其实就是时间与空间的选择。

压缩的好处 和 坏处
好处:
    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的数据源,建议选择压缩比较高的技术。


猜你喜欢

转载自blog.csdn.net/qq_26369213/article/details/79429536