Hive压缩格式


发布于 2017-04-16 / 21 阅读 / 0 评论 /
Hive压缩格式也压缩算法

下面简要介绍hive支持的压缩算法以及存储格式。

1.MR支持的压缩编码

如下表所示:

压缩格式

算法

文件扩展名

是否可切分

对应的编解码器

DEFLATE

DEFLATE

.deflate

org.apache.hadoop.io.compress.DefaultCodec

Gzip

DEFLATE

.gz

org.apache.hadoop.io.compress.GzipCodec

Bzip2

Bzip2

.bz2

org.apache.hadoop.io.compress.BZip2Codec

LZO

LZO

.lzo

com.apache.compression.lzo.LzopCodec

Snappy

Snappy

.snappy

org.apache.hadoop.io.compress.SnappyCodec

2.Hive支持的压缩算法

hive中常用的数据压缩算法有:bzip2、gzip、lzo、snappy等。Google几年前发布了一组对于这些算法的测试数据,如下表所示:

算法名称

压缩比

压缩速率

解压速率

是否支持分片

bzip2

比gzip低

比gzip慢

比gzip慢

gzip

13.4%

21MB/s

118MB/s

lzo

20.5%

135MB/s

410MB/s

zippy/snappy

22.2%

172MB/s

409MB/s

不一定。当使用Hadoop的本地库时,Snappy支持分片。然而,当Hadoop不使用本地库时,Snappy不支持分片。

暂无bzip2的确切数据,但根据经验,从压缩比来说:bzip2 > gzip > lzo > snappy;从解压速度来说:snappy > lzo > gzip > bzip2。

如果要检查hadoop支持哪些压缩格式,可执行命令“bin/hadoop checknative”。

snappy的压缩的优点:高压缩解压速度、压缩速率还行。缺点:不能分片、压缩率比Gzip小,hadoop本身不支持,需要手动安装。使用场景:当Mapreduce的map阶段输出的数据比较大时;作为map阶段输出的数据比较大时;作为map在MapReduce程序中间数据比较大的时候;用snappy压缩 减少网络IO 提高效率到reduce的中间数据的压缩格式。作为一个mapreduce作业的输出和另一个mapreduce的输入。

鉴于snappy不能分片的特点,如果有一个10G的文件存储为parquet,然后压缩,但是还是远远大于128M,那么这种情况下不建议使用snappy压缩。