Hbase的数据清理之TTL设置以及MinVersion所起到的重要影响

 

1. 前言

在之前工作中印象比较深刻的还是Hbase的磁盘一直满,然后清理用的TTL设置,需求就是需要自动删除n天前的hbase数据,比起写代码定时删除来说还是用自带的TTL(Time To Live)比较方便一些,为此也是做了很多实验以及发现了MinVersion这个机制。

2.TTL设置

首先熟悉hbase的人都知道hbase的每个字段的值都会有一个时间戳代表这个字段的最后更新时间,而TTL就是根据这个时间戳进行定期删除的。

TTL的设置非常简单,是针对XX表的XX列簇设置的,具体命令为:

disable '表名'   (操作前一定要先disable)

alter '表名' , {NAME=>'cf',TTL=>'600000'}  (时间单位是秒,n天就是n*24*60*60)

enable '表名' (呜呜,可能会需要特别长的时间,千万别强行关掉,手贱ctrl+c过,然后就没法enable了,原因是zk以为你enable了但是实际上还没有,然后就会有冲突。还是别手贱了,真的这么操作了自己百度看看怎么删掉zk里的记录)

3.MinVersion的影响

是不是以为这样的完了,测试后发现xx时间前的数据真的查不到了?然后又发现磁盘空间并没有释放,这就是问题所在了,如果你再把TTL改的很长很长,就会发现之前以为删掉的数据又可以查到了,说明hbas还保留着这条数据,这就是MinVersion的影响了。

MinVersion:如果当前存储的所有时间版本都早于TTL,至少MIN_VERSION个最新版本会保留下来。这样确保在你的查询以及数据早于TTL时有结果返回。

所以要起到完全删除数据的作用的还需要设置MIN_VERSION为0,命令如下,这样就不会保留任何版本了。

alter '表名', {NAME => 'cf', MIN_VERSIONS => '0'}

4.真·磁盘清理

好了,该设置的都设置完了发现磁盘空间还是没有释放(WTF),再次查询资料发现因为删除之后的碎文件还没有合并,这时候要用到的机制是major_compact 俗称大合并,hbase默认配置是24小时执行一次这个,手动执行的话可以major_compact  '表名',然后就会发现磁盘空间在陆陆续续释放出来了(数据量很大的话可能没那么快清理完)

你可能感兴趣的:(大数据,hbase)