Hadoop学习笔记-MapReduce(7)-数据压缩
Hadoop压缩概述
压缩的优缺点:
- 优点:减少磁盘IO、降低磁盘的存储空间
- 缺点:增加CPU开销
压缩原则:
运算密集型的Job,少用压缩
IO密集型的Job,多用压缩
MapReduce支持的压缩编码
压缩算法的对比介绍
压缩格式 | Hadoop自带 | 算法 | 文件扩展名 | 是否可切片 | 程序是否需要修改 |
---|---|---|---|---|---|
DEFLATE | √ | DEFALTE | .deflate | × | 不需要 |
Gzip | √ | DEFALTE | .gz | × | 不需要 |
bzip2 | √ | bzip2 | .bz2 | √ | 不需要 |
LZ0 | ×,需要安装 | LZ0 | .lzo | √ | 需要建立索引,还需指定输入格式 |
Snappy | √ | Snappy | .snappy | × | 不需要 |
- Gzip压缩
- 优点:压缩率较高
- 缺点:不支持Split;压缩/解压速度一般
- Bzip2压缩
- 优点:压缩率高,支持Split
- 缺点:压缩/解压速度慢
- Lzo压缩
- 优点:压缩/解压速度比较快,支持Split
- 缺点:压缩率一般;想要支持切片需要额外建立索引
- Snappy压缩
- 优点:压缩/解压速度块
- 缺点:不支持Split,压缩率一般
压缩位置选择
压缩可以在MapReduce的任意阶段启用
- 输入端采用压缩:无需显示指定使用的编解码格式,Hadoop自动检查文件的扩展名
- Mapper输出采用压缩:为了减少MapTask和ReduceTask之间的网络IO,重点考虑压缩和解压块LZO、Snappy
- Reducer输出采用压缩:如果数据永久保存,则考虑压缩率高的Bzip2和Gzip;如果要输入下一个MapReduce,则要考虑数据量和是否支持切片
需要使用压缩的话,可以在驱动类中进行配置
1
2
3
4
5
6
7
8
9
10
11
12
// 开启 map 端输出压缩
conf.setBoolean("mapreduce.map.output.compress", true);
// 设置 map 端输出压缩方式
conf.setClass("mapreduce.map.output.compress.codec",
BZip2Codec.class,CompressionCodec.class);
// 设置 reduce 端输出压缩开启
FileOutputFormat.setCompressOutput(job, true);
// 设置压缩的方式
FileOutputFormat.setOutputCompressorClass(job, BZip2Codec.class);
// FileOutputFormat.setOutputCompressorClass(job, GzipCodec.class);
// FileOutputFormat.setOutputCompressorClass(job, DefaultCodec.class);
Hadoop学习笔记-MapReduce(7)-数据压缩
http://example.com/2022/02/22/Hadoop学习笔记-MapReduce-7-数据压缩/