一、压缩介绍
1.压缩的好处和坏处
(1)压缩的优点:以减少磁盘IO、减少磁盘存储空间。
(2)压缩的缺点:增加CPU开销。
2.压缩原则
(1)运算密集型的Job,少用压缩。
(2)IO密集型的Job,多用压缩。
3.MR支持的压缩编码
表-1压缩方式表
压缩格式
Hadoop自带?
算法
文件扩展名
是否可切片
换成压缩格式后,原来的程序是否需要修改
DEFLATE
是,直接使用
DEFLATE
.deflate
否
和文本处理一样,不需要修改
Gzip
是,直接使用
DEFLATE
.gz
否
和文本处理一样,不需要修改
bzip2
是,直接使用
bzip2
.bz2
是
和文本处理一样,不需要修改
LZO
否,需要安装
LZO
.lzo
是
需要建索引,还需要指定输入格式
Snappy
是,直接使用
Snappy
.snappy
否
和文本处理一样,不需要修改
4.压缩性能比较
表-2性能
压缩算法
原始文件大小
压缩文件大小
压缩速度
解压速度
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
Snappy250MB/s500MB/s
二、压缩算法选择
压缩方式选择时重点考虑:压缩/解压缩速度、压缩率(压缩后存储大小)、压缩后是否可以支持切片。
1.优缺点介绍
表-3优缺点
压缩算法
优点****缺点
gzip
压缩率比较高不支持Split;压缩/解压速度一般
bzip2
压缩率高;支持Split压缩/解压速度慢
LZO
压缩/解压速度比较快;支持Split压缩率一般;想支持切片,需要额外创建索引Snappy压缩和解压缩速度快不支持Split;压缩率一般
2.使用阶段
压缩可以在MapReduce作用的任意阶段启用。
输入端采用压缩Mapper输出端采用压缩Reducer输出采用压缩a.数据l量小于块大小,重点考虑压缩和解压缩速度比较快的,MOLZO/Snappy
b.数据量非常大,重点考虑支持切片的Bzip2和LzO。为了减少MapTask和ReduceTask之间的网络
IO,重点考虑压縮和解压缩快的。a.如果数据永久保存,考虑压缩速度比较高的 Bzip2和Gzipo。
b.如果作为下一个MapReduce输入,需要考虑数据量和是否支持切片。
3.压缩参数配置
为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器。
压缩格式
对应的编码/解码器
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
三、实现过程(Reduce端进行压缩)
1.对于map
保持不变
2.对于reduce
保持不变
3.对于driver
新增如下代码:
// 设置reduce端输出压缩开启
FileOutputFormat.setCompressOutput(job, true);
// 设置压缩的方式
FileOutputFormat.setOutputCompressorClass(job, BZip2Codec.class);
4.实现效果
参考尚硅谷大数据教程!
版权归原作者 蒸气awa 所有, 如有侵权,请联系我们删除。