HBase 有几种压缩方式?能否介绍下
2012 年 3 月 16 日
在使用 HBase 的时候,为了节省数据的空间占用,通常我们会为 HBase 设置压缩属性。与其他的表级别属性一样,压缩设置也是针对具体列族进行设置的。
HBase 创建表时默认压缩为 NONE ,即没有压缩,除非指定。目前 HBase 主要支持 4 种压缩方式:GZ(GZIP),SNAPPY,LZO,LZ4。
1,压缩方式介绍
应该选择哪一种压缩方式?首先应该了解不同压缩方式之间的区别。
HBase 创建表时默认压缩为 NONE ,即没有压缩,除非指定。目前 HBase 主要支持 4 种压缩方式:GZ(GZIP),SNAPPY,LZO,LZ4。
1,压缩方式介绍
应该选择哪一种压缩方式?首先应该了解不同压缩方式之间的区别。
- GZ(GZIP)
用于冷数据存储,要求数据访问不频繁,与 Snappy 和 LZO 相比,GZIP 的压缩率更高,但是更消耗 CPU,解压/压缩速度更慢。
- Snappy 和 LZO
用于热数据存储,数据访问频繁时使用,占用 CPU 少,解压/压缩速度比 GZ 快,但是压缩率不如 GZ 高。
大部分场景下,开启 Snappy 或者 LZO 压缩会是比较好的选择,其中 Snappy 整体性能优于 LZO,主要表现在解压/压缩速度更快,是使用较多的一种压缩方式。
- LZ4
这是一种追求极致解压/压缩速度的压缩方式,HBase 官网上介绍不多。根据 HBase 社区的测试结果来看,在不同业务类型数据下,LZ4 的压缩率与 LZO 相当或者略小于 LZO,但是解压速度却明显高于 LZO,部分场景下可以达到 LZO 的两倍以上。
2,简单操作演示
创建表时设置压缩方式,以及修改表的压缩方式,操作演示如下:
hbase(main):001:0> create 'event_info_2019', {NAME=>'f', COMPRESSION=>'Snappy'} 0 row(s) in 2.7010 seconds => Hbase::Table - event_info_2019 hbase(main):002:0> desc 'event_info_2019' Table event_info_2019 is ENABLED event_info_2019 COLUMN FAMILIES DESCRIPTION {NAME => 'f', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '1', COMPRESSION => 'SNAPPY', MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_C ELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'} 1 row(s) in 0.1990 seconds hbase(main):003:0> alter 'event_info_2019', {NAME=>'f', COMPRESSION=>'GZ'} Updating all regions with the new schema... 0/1 regions updated. 1/1 regions updated. Done. 0 row(s) in 3.5520 seconds hbase(main):004:0> desc 'event_info_2019' Table event_info_2019 is ENABLED event_info_2019 COLUMN FAMILIES DESCRIPTION {NAME => 'f', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '1', COMPRESSION => 'GZ', MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'} 1 row(s) in 0.0330 seconds
在给未设置压缩的表增加压缩方式,或者修改完压缩后,须要执行 major_compact 才能使历史数据按照我们设置的压缩方式进行压缩。