Mapreduce学习(五)——数据压缩
一、为什么进行数据压缩?
mapreduce操作需要对大量数据进行传输
二、数据压缩的作用。
压缩技术有效的减少底层存储系统读写字节数,hdfs。
压缩提高网络带宽和磁盘效率。
数据压缩节省资源。
通过数据压缩可以影响到mapreduce的性能。
注意:数据压缩不适用于文件小任务多的情景
三、mapreduce常用的压缩编码
压缩格式 | 是否需要安装 | 文件拓展名 | 是否可以切分 |
DEFAULT | N | .deflate | N |
bzip2 | N | .bz2 | Y |
Gzip | N | .gz | N |
LZO | Y | .lzo | Y |
Snappy | Y | .snappy | N |
四、网上找到的性能测试(和机器性能有关)
压缩格式 | 源文件大小 | 压缩后大小 | 压缩速度 | 解压缩速度 |
gzip | 8.3GB | 1.8GB | 20MB/s | 60MB/s |
LZO | 8.3GB | 3GB | 50MB/s | 70MB/s |
bzip2 | 8.3GB | 1.1GB | 3MB/s | 10MB/s |
五、数据压缩发生阶段(非必要)
mapper ---> 数据压缩 ---->reducer
reducer ---> 数据压缩 --->数据结果
六、实例代码
map端压缩设置开启
conf.setBoolean("mapreduce.map.output.compress",true);
conf.setClass("mapreduce.map.output.compress.codec",BZip2Cedec.class,CompressionCodec.class);
输出结果没什么改变
设置reducer端的压缩
查看结果
解压出来查看结果正确
七、压缩编码的使用场景
1、Gzip压缩方式
优点:1)压缩率比较高,并且压缩解压速度很快
2)hadoop自身支持的压缩方式,用gzip格式处理数据就像直接处理文本数据是完全一致的
3)在linux系统自带gzip命令,使用很方便简洁
缺点:1)不支持split
2)使用每个文件压缩之后大小需要再128M(块大小)一下
2、LZO压缩方式
优点:1)压缩解压速度比较快并且压缩率比较合理
2)支持split
缺点:1)压缩率弱
2)hadoop本身不支持需要安装
Bzip2和Snappy略
需要安装的压缩方式在Hive中再次结合讲述
代码已上传至github
本人qq/wechat:806751350
github:https://github.com/linminlm