压缩策略和原则

1、压缩是提高Hadoop运行效率的优化策略。

通过对Mapper和Reduce运行过程的数据压缩,以减少磁盘I/O,以提高MR程序的运行速度。

注意:采用压缩技术减少了磁盘I/O,但也给CPU的运算增加了负担,所以压缩技术运用的当能提高性能,但运用不当也会降低性能。

压缩的基本原则:

(1)、运算密集型的JOb,少用压缩技术

(2)、I/O密集型的JOb,多用压缩技术

2、MR支持的压缩编码

hadoop压缩的优缺点 hadoop压缩算法_Hadoop


为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器:

hadoop压缩的优缺点 hadoop压缩算法_hadoop压缩的优缺点_02


压缩方式的选择

1、Gzip压缩

优点:效率高,且压缩/解压速度块,Hadoop本身支持,大部分Linux系统都自带Gzip命令,使用方便。

缺点:不支持Split

应用:每个文件压缩之后在130M以内,都可以用Gzip

2、、Bzip2压缩

优点:支持Split,压缩率高,比Gzip压缩率还高,hadoop本身支持。

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

应用:速度要求不高,压缩率高的时候。

3、Lzo压缩

优点:压缩/解压速度块,合理的压缩率,支持Split,是Hadoop中最流行的压缩格式。

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

应用:文件大,压缩之后还大于200M以上,文件越大,Lzo优势越明显。

4、Snappy压缩

优点:速度快,合理的压缩率。

缺点:不支持Split,压缩率比Gzip要低,Hadoop本身不支持。

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

hadoop压缩的优缺点 hadoop压缩算法_zip压缩_03


Map输出端到Reduce输入端采用压缩

在Drive类中添加几个设置:

//开启Map端输出压缩
configuration.setBoolean("mapreduce.map.output.compress", true);
//设置map端输出压缩方式
configuration.setclass("mapreduce.map.output.compress.codec",BZip2Codec.class, CompressionCodec.class);

Reduce输出端采用压缩
在Drive类中添加几个设置:

//设置Reduce端输出压缩开启
FileOutputFormat.setCompressOutput(job,true);
//设置Reduce端输出压缩方式 
FileOutputFormat.setOutputCompressorClass(job, BZip2Codec.class);