【超级有用】大数据的压缩格式

为什么map端用snappy压缩格式;而reduce用gzip或者bzip2的压缩格式呢?为什么每个reduce端压缩后的数据不要超过一个block的大小呢?      

检查Hadoop版本的压缩格式是否可用【我在Hadoop cdh 5.7版本中查看Hadoop压缩格式】

$ hadoop version

$ hadoop checknative

一、在解答上述问题以前,我们先说一下压缩的优缺点

【优点】

  •   1.减少磁盘存储空间
  •   2.降低IO(其中包括网络IO和磁盘IO)
  •   3.加快数据在磁盘和网络中的传输速度,从而提高系统的处理速度

【缺点】

  1.由于使用数据时需要先解压,就会加重CPU的负荷

二、压缩格式

压缩格式工具算法扩展名是否支持分割Hadoop编码/解码
DEFLATEN/ADEFLATE.deflateNoorg.apache.hadoop.io.compress.DefalutCodec
gzipgzipDEFLATE.gzNoorg.apache.hadoop.io.compress.GzipCodec
bzip2bzip2bzip2.bz2Yesorg.apache.hadoop.io.compress.Bzip2Codec
LZOLzopLZO.lzoYes(if index)com.hadoop.compression.lzo.LzoCodec
LZ4N/ALZ4.lz4Noorg.apache.hadoop.io.compress.Lz4Codec
SnappyN/ASnappy.snappyNoorg.apache.hadoop.io.compress.SnappyCodec

                                

【压缩比】

 

 

从上图可以看出,压缩比越高,压缩速率越慢,压缩时间越长,压缩比:Snappy<LZ4<LZO<GZIP<BZIP2(注意,压缩比的大小不是通过数字的大小来看的,是数字越小,压缩比越大,所以snappy的压缩比是22.2%,数据最大,但是压缩比是最小的)

 三、各自压缩格式的优缺点

【gzip】

 优点:

  • 1@压缩比在四中压缩方式中较高;
  • 2@hadoop本身支持,在应用中处理gzip格式的文件就和直接处理文本一样,
  • 3@有hadoop native库;
  • 4@大部分linux系统自带gzip命令,使用方便

缺点:

  • 1@不支持split

【lzo】

优点:

  • 1@压缩速率仅次于gzip,解压速率是最快的
  • 2@支持split,是hadoop中最流行的压缩格式;
  • 3@支持hadoop native库
  • 4@需要在linux系统下自行安装lzop命令,使用方便

缺点:

  • 1@压缩比要比gzip低
  • 2@hadoop本身比支持,需要安装;
  • 3@lzo虽然支持split,但是需要对lzo文件建索引,否则hadoop也是会把lzo文件看成一个普通文件(为了支持split需要建索引,需要制定inputformat为lzo格式)

【snappy】

优点:

  • 1@压缩速度最快
  • 2@支持hadoop native库

缺点

  • 1@不支持split
  • 2@压缩比最低
  • 3@hadoop本身不支持,需要安装
  • 4@linux系统下没有对应的命令

【bzip2】

优点:

  • 1@支持split
  • 2@压缩比最高,比gzip都高;
  • 3@hadoop本身支持,但不支持native
  • 4@在linux系统下自带bzip2命令,使用方便

缺点:

  • 1@压缩解压速率慢
  • 2@不支持native

四、总结和应用场景

【总结】

每一种压缩方式都有他的优缺点,讲求压缩效率,压缩比就会低,占用的网络io和磁盘io就多,讲求压缩比,对cpu的损耗就比较大,同时压缩和解压的耗时就比较多,

对于支持split的(lzo和bzip)可以实现并行处理。

【应用场景】

不同的场景选择不同的压缩方式,肯定没有一个一劳永逸的方法,如果选择高压缩比,那么对于cpu的性能要求要高,同时压缩、解压时间耗费也多;选择压缩比低的,对于磁盘io、网络io的时间要多,空间占据要多;对于支持分割的,可以实现并行处理。

应用场景:

    input: Flume Sink HDFS <== Spark/MapReduce 比如flume采集到hdfs会使用到压缩
    temp:   Sink DISK  比如中间数据落地磁盘也可以使用压缩
    output: Spark/MapReduce ==> Sink Hadoop 比如spark/mr的输出会到hdfs使用到压缩

一般在HDFS 、Hive、HBase中会使用;

当然一般较多的是结合Spark 来一起使用。

五、为什么map端和reduce端的应用压缩格式和大小的选择?

现在再让我们回过头来看我们刚刚开始提出的问题

【为什么map端用snappy压缩格式;而reduce用gzip或者bzip2的压缩格式呢?为什么每个reduce端压缩后的数据不要超过一个block的大小呢?】

这个问题可以结合前边老师提出的为什么MR的执行性能不理想来考虑?

当时这个问题的答案是因为每次都要落地到磁盘,

   1、Map压缩主要是增加mr运行的效率,我们就需要找压缩效率最高的压缩格式,snappy的压缩时间最快

    2、Reduce压缩就是输出文件压缩 ,故考虑占用磁盘空间的大小;选择高压缩比gzip或者bzip2;而考虑到会用reduce结果做二次运算;

          则对于选用不支持分割gzip或者bzip2原因有两个:

        (1)是这两个压缩格式高

        (2)对于不可分割我们采用每个reduce端压缩后的数据不要超过一个block的大小的方法;则对于后续的map清洗也就不会出现分割问题。

【压缩在hadoop中的应用】

 

参考博客:https://www.cnblogs.com/xuziyu/p/10678135.html

                  https://my.oschina.net/u/4005872/blog/3030869

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值