HBase 不同压缩方式介绍

在使用 HBase 的时候,为了节省数据的空间占用,通常我们会为 HBase 设置压缩属性。与其他的表级别属性一样,压缩设置也是针对具体列族进行设置的。

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_2019hbase(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_CELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}                                                                                                          1 row(s) in 0.1990 secondshbase(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 secondshbase(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 seconds0> 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 才能使历史数据按照我们设置的压缩方式进行压缩。


往期推荐

1、HBase最佳实践 | 聊聊HBase核心配置参数
2、Apache Hudi:剑指数据湖的增量处理框架
3、Hadoop社区比 Ozone 更重要的事情
4、MapReduce Shuffle 和 Spark Shuffle 结业篇

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值