hadoop中MapReduce中压缩的使用及4种压缩格式的特征的比较

在比较四中压缩方法以前,先来点干的,说一下在MapReduce的job中怎么使用压缩。java

MapReduce的压缩分为map端输出内容的压缩和reduce端输出的压缩,配置很简单,只要在做业的conf中配置便可linux

        //配置压缩
        conf.setBoolean("mapred.out.compress", true);//配置map输出的压缩
        conf.setBoolean("mapred.output.compress", true); //配置reduce输出的压缩
        conf.setClass("mapred.ouput.compression.codec", BZip2Codec.class, CompressionCodec.class); //配置压缩格式,我这里选用的是bzip2

 

1 gzip压缩并发

优势:压缩率比较高,并且压缩/解压速度也比较快;hadoop自己支持,在应用中处理gzip格式的文件就和直接处理文本同样;有hadoop native库;大部分linux系统都自带gzip命令,使用方便。app

缺点:不支持split。oop

应用场景:当每一个文件压缩以后在130M之内的(1个块大小内),均可以考虑用gzip压缩格式。譬如说一天或者一个小时的日志压缩成一个gzip 文件,运行mapreduce程序的时候经过多个gzip文件达到并发。hive程序,streaming程序,和java写的mapreduce程序完 全和文本处理同样,压缩以后原来的程序不须要作任何修改。spa

2 lzo压缩日志

优势:压缩/解压速度也比较快,合理的压缩率;支持split,是hadoop中最流行的压缩格式;支持hadoop native库;能够在linux系统下安装lzop命令,使用方便。code

缺点:压缩率比gzip要低一些;hadoop自己不支持,须要安装;在应用中对lzo格式的文件须要作一些特殊处理(为了支持split须要建索引,还须要指定inputformat为lzo格式)。orm

应用场景:一个很大的文本文件,压缩以后还大于200M以上的能够考虑,并且单个文件越大,lzo优势越越明显。blog

3 snappy压缩

优势:高速压缩速度和合理的压缩率;支持hadoop native库。

缺点:不支持split;压缩率比gzip要低;hadoop自己不支持,须要安装;linux系统下没有对应的命令。

应用场景:当mapreduce做业的map输出的数据比较大的时候,做为map到reduce的中间数据的压缩格式;或者做为一个mapreduce做业的输出和另一个mapreduce做业的输入。

4 bzip2压缩

优势:支持split;具备很高的压缩率,比gzip压缩率都高;hadoop自己支持,但不支持native;在linux系统下自带bzip2命令,使用方便。

缺点:压缩/解压速度慢;不支持native。

应用场景:适合对速度要求不高,但须要较高的压缩率的时候,能够做为mapreduce做业的输出格式;或者输出以后的数据比较大,处理以后的数据 须要压缩存档减小磁盘空间而且之后数据用得比较少的状况;或者对单个很大的文本文件想压缩减小存储空间,同时又须要支持split,并且兼容以前的应用程 序(即应用程序不须要修改)的状况。

最后用一个表格比较上述4种压缩格式的特征(优缺点):

4种压缩格式的特征的比较

 

压缩格式 split native 压缩率 速度 是否hadoop自带 linux命令 换成压缩格式后,原来的应用程序是否要修改
gzip 很高 比较快 是,直接使用 和文本处理同样,不须要修改
lzo 比较高 很快 否,须要安装 须要建索引,还须要指定输入格式
snappy 比较高 很快 否,须要安装 没有 和文本处理同样,不须要修改
bzip2 最高 是,直接使用 和文本处理同样,不须要修改
相关文章
相关标签/搜索