第四章 Hadoop数据压缩

4.1 概述

  • 压缩的好处和坏处
  1. 压缩的优点:以减少磁盘 IO、减少磁盘存储空间。
  2. 压缩的缺点:增加 CPU 开销。
  •  压缩原则
  1. 运算密集型的 Job,少用压缩;
  2. IO 密集型的 Job,多用压缩

4.2 MR支持的压缩编码

  • 压缩算法对比
压缩格式 Hadoop 自带?算法文件扩展名是否可切片换成压缩格式后,原来的
程序是否需要修改
DEFLATE 是,直接使用DEFLATE.deflate和文本处理一样,不需要
修改
Gzip  是,直接使用  DEFLATE .gz  否  和文本处理一样,不需要
修改
bzip2  是,直接使用 bzip2  .bz2 是 和文本处理一样,不需要
修改
LZO  否,需要安装  LZO
 
 .lzo  是  需要建索引,还需要指定输入格式
Snappy  是,直接使用  Snappy  .snappy  否  和文本处理一样,不需要
修改
  • 压缩性能对比
压缩算法  原始文件大小  压缩文件大小  压缩速度 解压速度
gzip8.3GB1.8GB17.5MB/s 58MB/s
bzip28.3GB1.1GB 2.4MB/s 9.5MB/s
LZO8.3GB 2.9GB  49.3MB/s 74.6MB/s

4.3 压缩方式的选择

        压缩方式选择时重点考虑:压缩/解压缩速度、压缩率(压缩后存储大小)、压缩后是否
可以支持切片。

  • Gzip压缩
  1. 优点:压缩率比较高;
  2. 缺点:不支持 Split;压缩/解压速度一般;
  • Bzip压缩
  1. 优点:压缩率高;支持 Split;
  2. 缺点:压缩/解压速度慢。
  • Lzo压缩
  1. 优点:压缩/解压速度比较快;支持 Split;
  2. 缺点:压缩率一般;想支持切片需要额外创建索引。
  • Snappy压缩
  1. 优点:压缩和解压缩速度快;
  2. 缺点:不支持 Split;压缩率一般;
  • 压缩位置选择:可以在MapReduce作用的任意阶段启用。

4.4 压缩参数配置

  • 为了支持多种压缩/解压缩算法,Hadoop 引入了编码/解码器
压缩格式  对应的编码/解码器
DEFLATEorg.apache.hadoop.io.compress.DefaultCodec
gziporg.apache.hadoop.io.compress.GzipCodec
bzip2 org.apache.hadoop.io.compress.BZip2Codec
LZOcom.hadoop.compression.lzo.LzopCodec
Snappy org.apache.hadoop.io.compress.SnappyCodec
  • 要在 Hadoop 中启用压缩,可以配置如下参数
参数默认值阶段建议
io.compression.codecs(在 core-site.xml 中配置)无,这个需要在命令行输入
hadoop checknative 查看
输入压缩Hadoop 使用文件扩展
名判断是否支持某种
编解码器
mapreduce.map.output.compr
ess(在 mapred-site.xml 中
配置)
false mapper 输出这个参数设为 true 启
用压缩
mapreduce.map.output.compr
ess.codec(在 mapred-
site.xml 中配置)
org.apache.hadoop.io.com
press.DefaultCodec
mapper 输出企业多使用 LZO 或
Snappy 编解码器在此
阶段压缩数据
mapreduce.output.fileoutpu
tformat.compress(在
mapred-site.xml 中配置)
falsereducer 输出这个参数设为 true 启
用压缩
mapreduce.output.fileoutpu
tformat.compress.codec(在
mapred-site.xml 中配置)
org.apache.hadoop.io.com
press.DefaultCodec
reducer 输出使用标准工具或者编
解码器,如 gzip 和
bzip2

4.5 压缩案例实操

在Driver中设置

// 开启 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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值