作家
登录

HBase原理–所有Region切分的细节都在这里了

作者: 来源: 2017-08-29 08:57:37 阅读 我要评论

  • prepare阶段:在内存中初始化两个子region,具体是生成两个HRegionInfo对象,包含tableName、regionName、startkey、endkey等。同时会生成一个transaction journal,这个对象用来记录切分的进展,具体见rollback阶段。
  • execute阶段:切分的核心操作。见下图(来自 Hortonworks ):

HBase道理–所有Region切分的细节都在这里了

  1. regionserver 更改ZK节点 /region-in-transition 中该region的状况为SPLITING。
  2. master经由过程watch节点/region-in-transition检测到region状况改变,并修改内存中region的状况,在master页面RIT模块就可以看到region履行split的状况信息。
  3. 在父存储目次下新建临时文件夹.split保存split后的daughter region信息。
  4. 封闭parent region:parent region封闭数据写入并触发flush操作,将写入region的数据全部持久化稻磁逄。此后短时光内客户端落在父region上的请求都邑抛出异常NotServingRegionException。
  5. 核心决裂步调:在.split文件夹下新建两个子文件夹,称之为daughter A、daughter B,并在文件夹中生成reference文件,分别指向父region中对应文件。这个步调是所有步调中最核心的一个环节,生成reference文件日记如下所示:
  1. 2017-08-12 11:53:38,158 DEBUG [StoreOpener-0155388346c3c919d3f05d7188e885e0-1] regionserver.StoreFileInfo: reference 'hdfs://hdfscluster/hbase-rsgroup/data/default/music/0155388346c3c919d3f05d7188e885e0/cf/d24415c4fb44427b8f698143e5c4d9dc.00bb6239169411e4d0ecb6ddfdbacf66' to region=00bb6239169411e4d0ecb6ddfdbacf66 hfile=d24415c4fb44427b8f698143e5c4d9dc。 

个中reference文件名为d24415c4fb44427b8f698143e5c4d9dc.00bb6239169411e4d0ecb6ddfdbacf66,格局看起来比较特别,那这种文件名具体什么含义呢?那来看看该reference文件指向的父region文件,根据日记可以看到,切分的父region是00bb6239169411e4d0ecb6ddfdbacf66,对应的切分文件是d24415c4fb44427b8f698143e5c4d9dc,可见reference文件名是个信息量很大年夜的定名方法,如下所示:

HBase道理–所有Region切分的细节都在这里了

除此之外,还须要存眷reference文件的文件内容,reference文件是一个引用文件(并非linux链接文件),文件内容很显然不是用户数据。文件内容其实异常简单,重要有两部分构成:其一是切分点 splitkey,其二是一个boolean类型的变量(true或者false),true表示该reference文件引用的是父文件的上半部分(top),而false表示引用的是下半部分 (bottom)。为什么存储的是这两部分内容?且听下文分化。

看官可以应用hadoop敕令 亲自来查看reference文件的具体内容:

那切分点是若何定位的呢? 全部region中最大年夜store中的最大年夜文件中最中间的一个block的首个rowkey 。这是一句比较消费脑力的语句,须要细细咀嚼。别的,HBase还规定,如不雅定位到的rowkey是全部文件的首个rowkey或者最后一个rowkey的话,就认为没有切分点。

  1. hadoop dfs -cat /hbase-rsgroup/data/default/music/0155388346c3c919d3f05d7188e885e0/cf/d24415c4fb44427b8f698143e5c4d9dc.00bb6239169411e4d0ecb6ddfdbacf66 

6. 父region决裂为两个子region后, 将daughter A、daughter B拷贝到HBase根目次下,形成两个新的region。

HBase道理–所有Region切分的细节都在这里了

rollback阶段:如不雅execute阶段出现异常,则履行rollback操作。为了实现回滚,全部切分过程被分为很多子阶段,回滚法度榜样会根据当进步展到哪个子阶段清理对应的垃圾数据。代码中应用 JournalEntryType 来表征各个子阶段,具体见下图:

HBase道理–所有Region切分的细节都在这里了

Region切分事务性包管

7. parent region通知修改 hbase.meta 表后下线,不再供给办事。下线后parent region在meta表中的信息并不会立时删除,而是标注split列、offline列为true,并记录两个子region。为什么不立马删除?且听下文分化。

全部region切分是一个比较复杂的过程,涉及到父region中HFile文件的切分、两个子region的生成、体系meta元数据的更改等很多子步调,是以必须包管全部切分过程的事务性,即要么切分完全成功,要么切分完全未开端,在任何情况下也不克不及出现切分只完成一半的情况。

为了实现事务性,hbase设计了应用状况机(见SplitTransaction类)的方法保存切分过程中的每个子步调状况,如许一旦出现异常,体系可以根据当前所处的状况决定是否回滚,以及若何回滚。遗憾的是,今朝实现中这些中心状况都只存储在内存中,是以一旦在切分过程中出现regionserver宕机的情况,有可能会出现切分处于中心状况的情况,也就是RIT状况。这种情况下须要应用hbck对象进行具体查看并分析解决筹划。在2.0版本之后,HBase实现了新的分布式事务框架Procedure V2(HBASE-12439),新框架将会应用HLog存储这种单机事务(DDL操作、Split操作、Move操作等)的中心状况,是以可以包管即使在事务履行过程中介入者产生了宕机,依然可以应用HLog作为调和者对事务进行回滚操作或者重试提交,大年夜大年夜削减甚至杜绝RIT现象。这也是是2.0在可用性方面最值得等待的一个亮点!!!


  推荐阅读

  优化UI界面会惹怒用户?你应该这么做

有时刻在优化UI界面时,会惹怒用户。那么,若何有效的去避免呢,我们来一路看看竽暌剐哪些优化UI界面的办法。以下内容由 Mockplus 团队翻译整顿,仅供进修交换。本地的星巴克可所以一个好>>>详细阅读


本文标题:HBase原理–所有Region切分的细节都在这里了

地址:http://www.17bianji.com/lsqh/36983.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)