hadoop常用的压缩算法总结和实验验证


压缩格式总表

压缩格式

工具

算法

扩展名

是否可切分

DEFLATE

N/A

DEFLATE

.deflate

No

gzip

gzip

DEFLATE

.gz

No

bzip2

bzip2

bzip2

.bz2

Yes

LZO

lzop

LZO

.lzo

No

LZ4

N/A

LZ4

.lz4

No

Snappy

N/A

Snappy

.snappy

No











压缩算法的时间空间权衡

所有的压缩算法都是时间和空间的转换,更快的压缩时间还是更小的压缩比,可以通过参数来指定,-1意味着速度,-9意味着空间。例如:

Gzip -1  file

 

压缩算法的速度和压缩比例的特点

压缩算法

特点

速度和压缩比

DEFLATE

标准压缩算法,没有生成它的常用命令行工具,通常都是用Gzip格式,也就是在deflate格式上添加gzip的文件头和文件尾,.deflate扩展名是hadoop定义的

——

Gzip

DEFLATE为基础扩展出来的一种算法;

通用压缩工具,时间和空间消耗比较折中

折中

Bzip2

压缩效果最好,但是压缩和解压速度最慢;

本身的解压速度比压缩速度快

压缩效果最好,速度最慢

LZO

比gzip速度快,但是压缩效果不好

压缩效果不好,

速度快

LZ4

比gzip速度快,但是压缩效果不好;

解压比LZO快

压缩效果不好,

速度快

Snappy

压缩效果不好,

速度快

 

 

实验验证

下面是在某公司利用真实的交易数据进行的压缩测试。由于LZO没有安装相应组件未做测试。从真实的实验可以看出,snappy用时最短,bzip2用时最长。Deflate实际上采用了Gzip算法,所以用时和压缩率接近。由于实验仅仅做了一次,再加上测试时间不同,集群性能可能也会有差异,理论上LZ4应该比gzip快。

 

压缩算法

表名

压缩时间

total time

原大小

压缩后大小

压缩比

Gzip

a

333.276 s

0 hours

23 min 28 s

71.9G

8.1 G

7.9%

b

321.246 s

229.7 G

9.4 G

c

281.316 s

109.9 G

7.6 G

d

379.03 s

71.9 G

13.2 G

e

73.333 s

5.8 G

276.0 M

 

bzip2

a

481.926 s

0 hours

 32 min 10 s

71.9G

6.3 G

6.6%

b

478.724 s

229.7 G

8.3 G

c

404.097 s

109.9 G

6.4 G

d

424.537 s

71.9 G

11.0 G

e

125.326 s

5.8 G

217.6 M

 

deflate

a

250.34 s

0 hours

 20 min 52 s

71.9G

8.1 G

7.9%

b

301.89 s

229.7 G

9.4 G

c

264.25 s

109.9 G

7.6 G

d

337.296 s

71.9 G

13.2 G

e

 73.91 s

5.8 G

275.9 M

 

LZ4

a

459.488 s

0 hours

 30 min 27 s

71.9G

15.2 G

13.4%

b

478.385 s

229.7 G

16.1 G

c

399.978 s

109.9 G

12.5 G

d

412.668 s

71.9 G

21.2 G

e

60.985 s

5.8 G

509.6 M

 

Snappy

a

216.268 s

 0 hours

19 min 6 s

71.9G

14.0 G

13%

b

281.972 s

229.7 G

16.0 G

c

241.483 s

109.9 G

12.2 G

d

322.299 s

71.9 G

20.7 G

e

63.202 s

5.8 G

548.5 M

 

以上采用hive进行测试,每次新建一个rcfile格式的表,从原始数据insert overwrite select进行数据导入,在执行脚本之前设置压缩算法,压缩算法的设置如下:

set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
set mapred.min.split.size=536870912;
set mapred.min.split.size.per.node=536870912;
set mapred.min.split.size.per.rack=536870912;
set mapred.output.compress=true;

--设置压缩功能开启
SET hive.exec.compress.output=true; 
--设置压缩编码
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
--SET mapred.output.compression.codec=com.hadoop.compression.lzo.LzopCodec;
--SET mapred.output.compression.codec=org.apache.hadoop.io.compress.Lz4Codec;
--SET mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;
--SET mapred.output.compression.codec=org.apache.hadoop.io.compress.DefaultCodec;--deflate
--SET mapred.output.compression.codec=org.apache.hadoop.io.compress.BZip2Codec;
--设置压缩类型block  
SET mapred.output.compression.type=BLOCK;   
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;

 




 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值