随着大数据时代的来临,数据体量越来越大,处理这些数据会越来越受到网络IO的限制,为了尽可能多的处理更多的数据我们必须使用压缩。那么压缩在Hadoop里面是不是所有格式都适用呢?它都有哪些性能呢?
压缩在sqoop里面可以做,在hive和impala里面也可以做。那么什么情况下我们会用压缩呢?通常在数据量非常大,我们通过压缩去减小数据量,从而达到将来去使用数据的时候,减少数据传输IO的情况下去使用。压缩对于性能的提升以及存储效率的提高也有作用。
hadoop
一、 数据压缩
每种文件格式都支持压缩,压缩将减少磁盘空间的占用。但是压缩本身会带来CPU的一些开销,所以压缩需要在CPU时间和带宽/存储空间之间进行权衡。比如:
(1)有些算法会花费很长的时间,但节省更多的空间;
(2)有些算法更快,但节省的空间有限。
这个怎么来理解呢?我们打个比方,假如说1T的数据压缩成100G,可能需要10分钟。如果压缩成500G可能需要1分钟。请问你选择那种方式?所以我们就需要在CPU时间和带宽之间进行一个权衡,当然这里不存在哪种方式的好坏,只是我们根据自己使用的需求去选择。另外,压缩对性能很有好处:很多Hadoop作业是受IO限制的,使用压缩可以每个IO操作处理更多的数据,压缩也可以改进网络传输的性能。
二、 压缩Codecs
压缩算法的实现被称为codec,是Compressor/Decompressor的简写。很多codecs在Hadoop中很常用,每种都有不同的性能特性。但是,不是所有的Hadoop工具都是跟所有codecs兼容的。Hadoop中常用的压缩算法有bzip2、gzip、lzo、snappy,其中lzo、snappy需要操作系统安装native库才可以支持。
在这里我们看一下不同压缩工具的性能:Bzip2和GZIP是比较消耗CPU的,压缩比最高,GZIP不能被分块并行的处理;Snappy和LZO差不多,稍微胜出一点,CPU消耗的比GZIP少。通常情况下,想在CPU和IO之间取得平衡的话,用Snappy和LZO比较常见一些。这里我重点推荐使用Snappy,因为它可以提供很好地压缩性能,而且压缩的数据是可以分片的,对于后期的运行处理有很大的作用。
另外要注意:对于热数据,速度更重要,1秒压缩40%的数据比10秒压缩80%的数据更好。
三、Sqoop使用压缩
Sqoop使用--compression-codec标志
示例:
--compression-codec
org.apache.hadoop.io.compress.SnappyCodec
四、Impala和Hive使用压缩
Impala和Hive使用压缩,需要我们在创建表的语法中去指定。可能对于不同的压缩而言,我们指定的属性和语法会有不同。
注意:Impala在内存里查询数据-压缩和解压缩都在内存
结语
感谢您的观看,如有不足之处,欢迎批评指正。
如果有对大数据感兴趣的小伙伴或者是从事大数据的老司机可以加群:
658558542 (☛点击即可加入群聊)
里面整理了一大份学习资料,全都是些干货,包括大数据技术入门,海量数据高级分析语言,海量数据存储分布式存储,以及海量数据分析分布式计算等部分,送给每一位大数据小伙伴,这里不止是小白聚集地,还有大牛在线解答!欢迎初学和进阶中的小伙伴一起进群学习交流,共同进步!
最后祝福所有遇到瓶颈的大数据程序员们突破自己,祝福大家在往后的工作与面试中一切顺利。
网友评论