0%

HBase 表增加 Snappy 压缩

HBase 表增加 Snappy 压缩


前言

公司有业务要上 HBase。 数据量较大。要保存30天内的日志数据。因此觉得应该对该表增加 Snappy 压缩

验证 snappy 是否正常安装

snappy 的介绍和安装这里不介绍了。感兴趣的朋友可以读下这篇博客 Hadoop HBase 配置 安装 Snappy 终极教程

CDH中,直接安装了snappy的库,所以直接用了。

查看 Hadoop 是否支持压缩

1
bin/hadoop checknative

检查当前HBase是否支持压缩

1
bin/hbase org.apache.hadoop.util.NativeLibraryChecker

找某个文件,对其进行压缩测试。

我这里就拿 HBase log 日志试试手。

1
2
cd /var/log/hbase
hbase org.apache.hadoop.hbase.util.CompressionTest hbase-cmf-hbase-MASTER-massive-dataset-new-004.log.out snappy

如果正确安装 snappy 则会显示 SUCCESS 字眼

增加 snappy 压缩

1. 创建表时指定压缩算法

create ‘test’, {NAME => ‘info’, VERSIONS => 1, COMPRESSION => ‘snappy’}

2. 创建表后指定或修改压缩算法

虽然不 disable 也能修改表结构,但是为了降低影响,建议先 disable。 修改完之后在 enable。

注意: 如果表较大,disable需要一些时间,请耐心等待。

修改表定义

1
alter 'mytable', {NAME=>'cf',COMPRESSION => 'snappy'}

使压缩生效

表中此前的数据,还没有压缩,如果要让整个表的数据都压缩,需要对表进行 major compact 。

1
major_compact 'mytable'

注意: 如果表的数据较多,该操作需要较长时间,所以尽量选择一个不忙的时间,避免对服务造成影响。

压缩比

打开该表所在某个 RS 的 Web 界面,在 Region Name 找到表所在行,看 Storefile Metrics 中的

storefileUncompressedSize , storefileSize 。 就可以看得,压缩前后容量。

假设Region 数据如下

storefileUncompressedSizeMB=160, storefileSizeMB=66

则压缩比算出来为 compressionRatio=0.4125


参考链接