今天发现hbase集群的hdfs使用量已经接近80%,检查发现一个表数据量特别巨大,该表会记录用户每天的一次活动属性,按照4亿用户*197天,有800亿条的数据存放在表中——4TB,对于一个表来说过于大了。有两个问题:1、未开启压缩;2、没设置TTL
经过和业务方讨论,只保留最近93天(3个月)的数据,然后开启LZO压缩。
理论上所有的表都应该开启压缩,但是早期使用时没对业务方进行限制,导致现在有些表没开启压缩,而数据量又特别大,所以考虑在线开启压缩和TTL。
那么就需要考虑几点问题:
1、在线修改表属性是否稳定,0.92版本引入后作者也不保证100%成功,慎用
2、修改后是否生效,在哪一步生效
3、能否手动使其生效
考虑hbase写模型,压缩发生在HFile文件需要写HDFS的过程,这个过程有3种,第一:flush、第二:split、第三:compact。而对于已经存在的数据,应该只能在compact阶段进行。compact的原理是读region中已有的HFile,然后写新HFile,理论上应该能保证新HFile写的时候是压缩的。
查看代码:compact过程分为普通compact和majorcompact,普通compact就是N个文件合一个,N可以设置;majorcompact就是region下所有的文件合1个。先读取原有文件,然后写新HFile:
对旧文件的scan