HFile和HLog的回收机制

正常回收流程
HBase数据主要存储在分布式文件系统上HFile和HLog文件中。HBase数据基于LSM模型,写操作写到内存(MemStore)和Write Ahead Log(HLog, 放在.logs下regionserver目录下)就返回。
当内存不足或者MemStore超过一定大小的时候,HBase会将MemStore的数据顺序写到分布式文件系统上,形成一个HFile。
当RegionServer进程down机时候,regionserver的log目录会被HMaster重命名(添加-splitting后缀),目录下所有hlog会被logSpliter分割成为各个region的recover.edits. 当log split完成之后,HMaster会将log移动到.oldlog目录下。
当小的HFile过多的时候,会将多个小的HFile压缩形成一个大的HFile。压缩完成之后这些小的HFile就被移动.archive目录下。
如果HLog里所有记录对应的数据都已经刷新到HFile上,HLog就被RegionServer移动到.oldlog目录下。
HMaster上的定时线程HFileCleaner/LogCleaner周期性扫描archive目录和.oldlog目录, 判断目录下的HFile或者HLog是否可以被删除,如果可以, 就直接删除文件.

recyling

TimeToLive
为了防止系统错误删除HFile/HLog, HFile/HLog都有一个全局的过期时间(TTL), 超过这个过期时间的HFile/HLog才被删除. 这个过期时间可以通过hbase.master.logcleaner.ttl和hbase.master.hfilecleaner.ttl配置(单位是ms)

Replication
HBase的Replication是通过将主集群的HLog推送到备集群,然后在备集群上重放Hlog实现的, 因此如果在oldlog目录下的HLog还在被Replication推送完成,这些文件不能删除。

HMaster上的ReplicationLogCleaner通过zk负责记录Replication正在使用那些HLog。

当Regionserver创建一个新的hlog时,Replication会在对应zk replication目录下建立相应的hlog节点,即将hlog加入replication队列。
ReplicationLogCleaner会收到zk上replication目录节点创建的通知,将此hlog标记为使用中。
当Replication推送完成hlog的数据后,replicaton会将zk上replication目录下hlog节点删除。
ReplicationLogCleaner会收到节点删除通知,将此hlog标记为可删除。
当然需要注意的是一个hlog可能同时被多个不同peer的replication使用,只有当所有不同peer的replication都推送完成这个hlog的数据之后,这个hlog才能被删除。

SnapShot
标的Snapshot在单独的snapshot目录下,创建了表结构和HFile的引用。HMaster上SnapshotFileCache会定期扫描分布式文件系统上的snapshot目录,标记那些HFile现在被某个Snapshot引用。HMaster上的HFileCleaner在尝试删除HFile时候会通过SnapshotHFileCleaner检查HFile是否被引用,如果被引用就不能删除。

Region Split
当Region大小超过一定阈值时,Region会自动分裂成两个子Region. Region Split执行时间是秒级别的.

Split前父Region会预flush一次,然后关闭Region的写,最后做一次flush, 保证Region所有的数据都写到HFile中。
Split时两个Region并不实际分割父Region的HFile,而是在子Region目录下生成父region所有HFile引用。 这些引用指向实际的HFile文件,子Region Compaction时候,会删除这些引用,生产真实的HFile。
HMaster上定时线程CatalogJanitor会周期性扫描出Meta表上的分裂后的父Region,通过父Region找到分裂后的两个子Region。通过扫描两个子Region的hdfs目录,确认两个子Region是否还有到父Region的引用(HFile 引用是有特殊的文件名)。确认子Region中所有引用HFile都被compaction回收之后,CatalogJanitor线程会将父Region的HFile,被移动到archive目录下,删除meta表上遗留的父region数据,已经父region的hdfs目录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值