Region切分对其他模块的影响
经由过程region切分流程的懂得,我们知道全部region切分过程并没有涉及数据的移动,所以切分成本本身并不是很高,可以很快完成。切分后子region的文件实际没有任何用户数据,文件中存储的仅是一些元数据信息-切分点rowkey等,那经由过程引用文件若何查找数据呢?子region的数据现其实什么时刻完成真正迁徙?数据迁徙完成之后父region什么时刻会被删掉落?
1. 经由过程reference文件若何查找数据?
这里就会看到reference文件名、文件内容的实际意义啦。全部流程如下图所示:
(2)定位到真实数据文件就可以在全部文件中扫描待查KV了么?非也。因为reference文件平日都只引用了数据文件的一折半据,以切分点为界,要么上半部分文件数据,要么下半部分数据。那到底哪部分数据?切分点又是哪个点?还记得上文又提到reference文件的文件内容吧,没错,就记录在文件中。
2. 父region的数据什么时刻会迁徙到子region目次?
谜底是子region产生major_compaction时。我们知道compaction的履行实际上是将store中所有小文件一个KV一个KV大年夜小到大年夜读出来之后再次序写入一个大年夜文件,完成之后再将小文件删掉落,是以compaction本身就须要攫取并写入大年夜量数据。子region履行major_compaction后会将父目次中属于该子region的所稀有据读出来并写入子region目次数据文件中。可见将数据迁徙放到compaction这个阶段来做,是一件趁便的事。
3. 父region什么时刻会被删除?
实际上HMaster会启动一个线程按期遍历检查所有处于splitting状况的父region,肯定检查父region是否可以被清理。检测线程起首会在meta表中揪出所有split列为true的region,并加载出其决裂后生成的两个子region(meta表中splitA列和splitB列), 只须要检查此两个子region是否还存在引用文件,如不雅都不存在引用文件就可以认为该父region对应的文件可以被删除。如今再来看看上文中父目次在meta表中的信息,就大年夜概可以懂得为什么会存储这些信息了:
4. split模块在临盆线的一些坑?
有些时刻会有同窗反馈说集群中部分region处于长时光RIT,region状况为spliting。平日情况下都邑建议应用hbck看下什么报错,然后再根据hbck供给的一些对象进行修复,hbck供给了部分敕令对处于split状况的rit region进行修复,重要的敕令如下:
- -fixSplitParents Try to force offline split parents to be online.
- -removeParents Try to offline and sideline lingering parents and keep daughter regions.
- -fixReferenceFiles Try to offline lingering reference store files
SteppingSplitPolicy: 2.0版本默认切分策略。这种切分策略的切分阈值又产生了变更,比拟 IncreasingToUpperBoundRegionSplitPolicy 简单了一些,依然和待决裂region所属表在当前regionserver上的region个数有关系,如不雅region个数等于1,切分阈值为flush size * 2,不然为MaxRegionFileSize。这种切分策略对于大年夜集群中的大年夜表、小表会比 IncreasingToUpperBoundRegionSplitPolicy 加倍友爱,小表不会再产生大年夜量的小region,而是适可而止。
个中最常见的问题是 :
- ERROR: Found lingering reference file hdfs://mycluster/hbase/news_user_actions/3b3ae24c65fc5094bc2acfebaa7a56de/meta/0f47cda55fa44cf9aa2599079894aed6.b7b3faab86527b88a92f2a248a54d3dc”
简单解释一下,这个缺点是说reference文件所引用的父region文件不存在了,如不雅查看日记的话有可能看到如下异常:
- java.io.IOException: java.io.IOException: java.io.FileNotFoundException: File does not exist:/hbase/news_user_actions/b7b3faab86527b88a92f2a248a54d3dc/meta/0f47cda55fa44cf9aa2599079894aed
父region文件为什么会莫名其妙不存在?经由和同伙的评论辩论,确认有可能是因为官方bug导致,详见HBASE-13331。这个jira是说HMaster在确认父目次是否可以被删除时,如不雅检查引用文件(检查是否存在、检查是否可以正常打开)抛出IOException异常,函数就会返回没有引用文件,导致父region被删掉落。正常情况下应当保险起见返回存在引用文件,保存父region,并打印日记手工介入查看。如不雅大年夜家也碰到类似的问题,可以看看这个问题,也可以将修复patch打到线上版本或者进级版本。
推荐阅读
有时刻在优化UI界面时,会惹怒用户。那么,若何有效的去避免呢,我们来一路看看竽暌剐哪些优化UI界面的办法。以下内容由 Mockplus 团队翻译整顿,仅供进修交换。本地的星巴克可所以一个好>>>详细阅读
本文标题:HBase原理–所有Region切分的细节都在这里了
地址:http://www.17bianji.com/lsqh/36983.html
1/2 1