本文主要介绍HBase在数据压缩与编码中的实际应用。
压缩算法
目前阿里云平台支持压缩算法有: LZO、ZSTD、GZ、LZ4、SNAPPY和NONE,其中NONE代表不开启压缩。不同压缩算法在不同场景的压缩比,及解压速度对比如下,都是来自线上真实场景。
业务类型 | 无压缩表大小 | 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 |
说明
对rt要求极高,建议使用lz4压缩算法。
对rt要求不高,特别是监控、物联网等场景,建议使用zstd压缩算法。
编码
HBase很早就支持了DataBlockEncoding,即通过减少HBase keyvalue中重复的部分来压缩数据。我们推荐DATA_BLOCK_ENCODING使用diff。
操作步骤
修改表的属性,此为压缩编码。
alter 'test', {NAME => 'f', COMPRESSION => 'lz4', DATA_BLOCK_ENCODING =>'DIFF'}
压缩编码并不会立即生效,需要major_compact,此会耗时较长,注意在业务低峰期进行。
major_compact 'test'
说明
压缩编码的参考文档请参见阿里HBase数据压缩编码探索。