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-数据压缩/
作者
EverNorif
发布于
2022年2月22日
许可协议