HBase作为大数据存储框架中性能等各方面都比较优秀的框架,面对着大量数据的冲击,我们一般会使用对数据进行压缩来进行存储。就像在Hive中,我们会用到LZO压缩,在Hadoop中,我们会使用Snappy压缩。

HBase中压缩算法的比较

以下数据是Google在2005年发布的一个测试数据。
Algorithm |% remaining| Encoding | Decoding
—|–|—|—
GZIP | 13.4% |21 MB/s |118 MB/s
LZO |20.5% | 135 MB/s |410 MB/s
Zippy/Snappy |22.2% |172 MB/s |409 MB/s

数据来源HBase: The Definitive Guide

1)GZIP的压缩率最高,但是其实CPU密集型的,对CPU的消耗比其他算法要多,压缩和解压速度也慢;

2)LZO的压缩率居中,比GZIP要低一些,但是压缩和解压速度明显要比GZIP快很多,其中解压速度快的更多;

3)Zippy/Snappy的压缩率最低,而压缩和解压速度要稍微比LZO要快一些。

下面是阿里云云数据库HBase版中关于几个压缩算法的开发指南。

业务类型 无压缩表大小 LZO(压缩率/解压速度MB/s) ZSTD(压缩率/解压速度MB/s) LZ4(压缩率/解压速度MB/s)
监控类 419.75T 5.82/372 13.09/256 5.19/463.8
日志类 77.26T 4.11/333 6.0/287 4.16/496.1
风控类 147.83T 4.29/297.7 5.93/270 4.19/441.38
消费记录 108.04T 5.93/316.8 10.51/288.3 5.55/520.3

HBase压缩的开启

创建表时开启压缩

1
create 'test', {NAME => 'info', VERSIONS => 1, COMPRESSION => 'LZO'}

已有的表开启压缩

1
2
3
4
5
disable 'test' ;
alter 'test', NAME => 'info', COMPRESSION => 'LZO'

enable 'test'
major_compact 'test'