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;






 


posted on 2017-06-16 13:22  wgwyanfs  阅读(249)  评论(0编辑  收藏  举报

导航