HBase删除过期数据,释放空间

网上很多人说给HBASE中的表设置TTL以删除过期数据,但实际操作后发现硬盘可用大小根本没有变动。

查资料发现,原因如下:

当一个明确的delete发生时,实际上,数据并没有被删除,只是增加了一个删除标记,在查询时,删除标记阻止记录返回。然后在major compaction的时候,实际的数据才会被删除,删除标记也会从StoreFile删除。如果数据由于TTL被删除,没有删除标记被创建,在压缩时,过期的数据会被过滤,不会被写回到压缩后的StoreFile文件中。

所以,完整的操作应该是这样的(使用的CDH):

1、进入hbase shell,查看具体表desc 'tablename'
2、停用表disable 'tablename'
3、更改表的TTL(time to live)值(一个int值,单位是秒)alter 'tablename',{NAME=>'columnName', TTL => '604800'},这就表示这个表的数据只保存七天
4、enable 'tablename'重新启用表

此时,如果查看df -lh,你会发现数据还没有被删除,因为空间还没有释放,但是在hbase shell之中你已经查询不到这些数据了。

所以最后需要进入到Cloud Manager,点击HBase的“配置”菜单栏

《HBase删除过期数据,释放空间》 hbase 配置.png

搜索major

《HBase删除过期数据,释放空间》 hbase major compaction.png

如图,默认最大化压缩七天一次,请根据自己服务器的情况缩短这个值,值越小,删除数据越快,但服务器读写压力也会变大,我自己设成了1天一次。

设置完成后重启服务器,硬盘空间成功释放

《HBase删除过期数据,释放空间》 before.png

《HBase删除过期数据,释放空间》 after.png

参考资料: HBase – Region压缩

    原文作者:杨小邪yxr
    原文地址: https://www.jianshu.com/p/96bdc42e5f5a
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞