最具影响力的数字化技术在线社区

168大数据

 找回密码
 立即注册

QQ登录

只需一步,快速开始

1 2 3 4 5
打印 上一主题 下一主题
开启左侧

[Hbase] HFile和HLog的回收机制

[复制链接]
跳转到指定楼层
楼主
发表于 2017-5-22 17:01:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
正常回收流程
  • 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是否可以被删除,如果可以, 就直接删除文件.
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目录。

楼主热帖
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 赞 踩

168大数据 - 论坛版权1.本主题所有言论和图片纯属网友个人见解,与本站立场无关
2.本站所有主题由网友自行投稿发布。若为首发或独家,该帖子作者与168大数据享有帖子相关版权。
3.其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和168大数据的同意,并添加本文出处。
4.本站所收集的部分公开资料来源于网络,转载目的在于传递价值及用于交流学习,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
5.任何通过此网页连接而得到的资讯、产品及服务,本站概不负责,亦不负任何法律责任。
6.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源,若标注有误或遗漏而侵犯到任何版权问题,请尽快告知,本站将及时删除。
7.168大数据管理员和版主有权不事先通知发贴者而删除本文。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

关于我们|小黑屋|Archiver|168大数据 ( 京ICP备14035423号|申请友情链接

GMT+8, 2024-4-27 01:46

Powered by BI168大数据社区

© 2012-2014 168大数据

快速回复 返回顶部 返回列表