H(notebook&hadoop&code).数据压缩

一、压缩介绍

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.实现效果

参考尚硅谷大数据教程!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值