hadoop压缩方式deflate、gzip、bzip2、lzo、snappy

关于压缩

压缩会减少磁盘空间、磁盘IO以及网络IO的负担,但会增加CPU负担
在任意的MapReduce阶段都可以启动压缩

使用原则

  1. 运算密集型的job,少用压缩
  2. IO密集型的Job,多用压缩

MR支持的压缩

压缩格式Hadoop集成算法扩展名是否可splic更换压缩格式是否需要修改代码
DEFLATE直接使用DEFLATE.deflate不需要修改
Gzip直接使用DEFLATE.gz不需要修改
bzip2直接使用bzip2.bz2不需要修改
LZO需要安装LZO.lzo需要建立索引并指定输入格式
Snappy需要安装Snappy.snappy不需要修改

对应编码器\解码器

压缩格式对应的编码/解码器
DEFLATEorg.apache.hadoop.io.compress.DefaultCodec
gziporg.apache.hadoop.io.compress.GzipCodec
bzip2org.apache.hadoop.io.compress.BZip2Codec
LZOcom.hadoop.compression.lzo.LzopCodec
Snappyorg.apache.hadoop.io.compress.SnappyCodec

压缩比较

压缩算法原始文件大小压缩文件大小压缩速度解压速度
gzip8.3GB1.8GB17.5MB/s58MB/s
bzip28.3GB1.1GB2.4MB/s9.5MB/s
LZO8.3GB2.9GB49.3MB/s74.6MB/s

http://google.github.io/snappy/
On a single core of a Core i7 processor in 64-bit mode, Snappy compresses at about 250 MB/sec or more and decompresses at about 500 MB/sec or more.

Gzip

优点:压缩率比较高,压缩/解压缩速度比较快;hadoop自身支持,应用中处理Gzip格式和文件中直接处理文件相同,使用方便

缺点: 不支持split

应用场景: 当单个文件压缩后在130m之内(1个block大小内),可以考虑Gzip压缩格式

案例:每天或几小时时段日志,生成小于block大小文件

Bzip2

优点:支持Split,比Gzip压缩率高;hadoop自身支持,系统自带Bzip命令

缺点:压缩/解压缩速度慢。不支持Native(本地化,需要根据操作系统单独编译Bzip2)

应用场景:适合对速度要求不高,但需要较高的压缩率时

  1. 可作为MapReduce作业的输出格式;
  2. 或者输出之后的数据比较大,处理之后数据需要压缩存档减少磁盘空间,并且改数据以后使用较少的情况。
  3. 对单个很大的文件向压缩减少存储空间,同时需要支持spilt,且兼容之前程序的情况

Lzo

优点:Hadoop中最流行的压缩格式之一,支持split,压缩/解压缩速度比较快,合理压缩率;在linux系统中安装lzop使用

缺点:压缩率比Gzip低一些;hadoop自身不支持,需要安装,在应用中为了支持spilt需要建立索引和指定ImputFormat为Lzo格式

案例:文本文件压缩后还大于200m以上,单个文件越大,优点越明显

Snappy

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

缺点:不支持split;压缩比比Gzip低,Hadoop自身不支持,需要安装

案例:适合Shuffle时使用。

  1. 当Mapreduce作业的Map输出的数据比较大时,作为Map到Reduce的中间数据压缩
  2. 作为Mapreduce作业输出到另外一个Mapreduce作业输入时

总结

bzip2 压缩比最高,压缩/解压缩速度最慢

snappy 压缩速度最快,压缩比凑合

deffate,gizp 折中

关于压缩位置

  • MapReduce 输入数据为压缩数据

    在大量数据,并需要重复处理的情况下,应考虑对输入进行压缩。除Lzo外,Hadoop会通过文件扩展名匹配编解码进行压缩/解压缩

  • Mapper 输出采用压缩

    当Map任务输出中间数据量很大时,考虑此阶段采用压缩,能显著改善内部数据shuffle过程(shuffle是hadoop中消耗资源最多的环节)。如果发现数据量大造成网络传输缓慢,应考虑使用压缩技术。可用于压缩Mapper输出的速度,解码器包括LZO或者Snappy

  • Reduce 输出采用压缩

    在此阶段启用压缩技术能够减少要存储的数据量,因此降低磁盘所需空间。

注:LZO是供Hadoop压缩数据用的通用压缩编码器。其涉及目标是达到与磁盘读取速度相当的压缩速率,因此速度是有限考虑的因素,而不是压缩率。
与Gzip编解码器相比,他的压缩速度是Gzip的5倍,解压缩速度是Gzip的2倍,相同文件用LZO压缩后比Gzip压缩后大50%,单比压缩前小25%-50%,这对改善性能非常有利,Map阶段完成时间快近4倍

压缩相关参数

core-site.xml

io.compression.codecs : 代表整个Job运行期间,可以使用哪些压缩格式!
配置这个参数后,配置的压缩格式会被自动初始化!
默认值: deflate,gzip,bzip2

mapred-site.xml

mapreduce.map.output.compress: map阶段输出的key-value是否采用压缩
默认值: false
mapreduce.map.output.compress.codec: map阶段输出的key-value采用何种压缩
默认值: deflate

mapreduce.output.fileoutputformat.compress: job在reduce阶段最终的输出是否采用压缩
默认值: false
mapreduce.output.fileoutputformat.compress.codec: job在reduce阶段最终的输出采用何种压缩
默认值: deflate

mapreduce.output.fileoutputformat.compress.type: 如果Job输出的文件以SequenceFile格式!
SequenceFile中的数据,要以何种形式进行压缩!
NONE: 是否压缩及如何压缩取决于操作系统
RECORD(默认): 每个key-value对作为一个单位,压缩一次
BLOCK: SequenceFile中每个block压缩一次!(SequenceFile中的block默认为64K)

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值