Hadoop的数据压缩

前言:

  压缩概述:

  压缩技术能够有效减少底层存储系统(HDFS)读写字节数.压缩提高了网络带宽和磁盘空间的效率,在运行MR程序时,I/O操作,网络数据传输,Shuffle和Merge要花大量的时间,尤其是数据规模很大和工作负载密集的情况下,因此,使用数据压缩显得尤为重要.

  鉴于磁盘I/O和网络带宽是Hadoop的宝贵资源,数据压缩对于节省资源,最小化磁盘I/O和网络传输非常有帮助,可以在任意MapReduce阶段启用压缩.不过,尽管压缩与解压缩操作的CPU开销不高,其性能的提升和资源的节省并非没有代价.

 

压缩策略和原则

  压缩是提高Hadoop运行效率的一种优化策略.

  通过对Mapper,Reducer运行过程的数据进行压缩,以减少磁盘IO,提高MR程序运行速度.

  注意:采用压缩技术减少了磁盘IO,但是同时增加了CPU运算负担,所以,压缩特性运用得当能提高性能,但运用不当也可能减低性能

压缩基本原则:

  1)运算密集型job,少用压缩

  2)IO密集型的job,多用压缩

 

 

 

压缩格式

对应的编码/解码器

DEFLATE

org.apache.hadoop.io.compress.DefaultCodec

gzip

org.apache.hadoop.io.compress.GzipCodec

bzip2

org.apache.hadoop.io.compress.BZip2Codec

LZO

com.hadoop.compression.lzo.LzopCodec

Snappy

org.apache.hadoop.io.compress.SnappyCodec

压缩性能比较

压缩算法

原始文件大小

压缩文件大小

压缩速度

解压速度

gzip

8.3GB

1.8GB

17.5MB/s

58MB/s

bzip2

8.3GB

1.1GB

2.4MB/s

9.5MB/s

LZO

8.3GB

2.9GB

49.3MB/s

74.6MB/s

压缩方式的选择

  1)Gzip压缩

  优点:压缩率比较高,而且压缩/解压缩速度也比较快;Hadoop本身支持,在应用中处理Gzip格式的文件就和直接处理文本一样;大部分Linux系统都自带Gzip命令,使用方便.

  缺点:不支持Split

  应用场景:当每个文件压缩之后在130M以内的(1个块大小内),都可以考虑用Gzip压缩格式.例如说一天或者一个小时的日志压缩成一个Gzip文件

  2)Bzip2压缩

  优点:支持Split;具有很高的压缩率,比Gzip压缩率更高;Hadoop本身自带,使用方便

  缺点:压缩/解压缩速度慢

  应用场景:适合对速度要求不高,但需要较高压缩率的时候;或者输出之后的数据比较大,处理之后的数据需要压缩存档减少磁盘空间并且以后数据用的比较少的情况;或者对单个很大的文本文件想压缩减少存储空间,同时又需要支持Split,而且兼容之前的应用程序的情况

  3)Lzo压缩

  优点:压缩/解压缩也比较块,合理的压缩率;支持Split,是Hadoop中最流行的压缩格式;可以在Linux系统下安装Lzop命令,使用方便.

  缺点:压缩率比Gzip低;Hadoop本身不支持,需要安装;在应用中对Lzo格式的文件需要做一些特殊处理(为了支持Split需要建索引,还需要指定InputFormat为Lzo格式)

  应用场景:一个很大的文件,压缩之后还大于200M以上的可以考虑.而且单个文件越大,Lzo优点越明显.

  4)Snappy压缩

  优点:高速压缩速度和合理的压缩率

  缺点:不支持Split;压缩率比Gzip低.Hadoop本身不支持,需要安装

  应用场景:当MepReduce作业的Map输出的数据比较大的时候,作为Map到Reduce的中间数据的压缩格式;或者作为一个MapReduce作业的输出和另外一个MapReduce作业的输入

 

posted @ 2021-08-16 16:32  明明就-  阅读(124)  评论(0编辑  收藏  举报