打赏

Hadoop HBase概念学习系列之META表和ROOT表(六)

 

  在 

HBase里的HRegion

  里,谈过,HRegion是按照表名+开始/结束主键,即表名+主键范围来区分的。由于主键范围是连续的,所以一般用开始主键就可以表示相应的HRegion了。

  不过,因为我们有合并和分隔操作,此时,如果正好在执行这些操作的过程中出现死机,那么就可能存在多份表名和开始主键相同的数据,这样的话,只有光靠开始主键就不够了,这就需要通过HBase的元数据信息来区分哪一份才是正确的数据文件。为此,为了区分这样的情况,每个HRegion都有一个'regionId'来标识它的唯一性。

  所以一个HRegion的表达符,最终是:  表名+开始主键+唯一Id,即tablename+startkey+regionId

  我们可以用这个识别符来区分不同的HRegion,这些数据就是元数据(META),而元数据本身也是被保存在HRegion里面的,所以,我们称呼这个表为元数据表(META表),即META Table,里面保存的就是HRegion标识符和实际HRegion服务器的映射关系

  

  元数据表也会增长,并且可能被分割为几个HRegion,为了定位这些HRegion,我们采用一个根数据表(ROOT表),即ROOT Table,它保存了所有元数据表的位置,而跟数据表是不能被分割的,永远只保存在一个HRegion

  在HBase启动的时候,主服务器先去扫描根数据表,因为这个表只会有一个HRegion,所有这个HRegion的名字是被写死的。当然要把跟数据表分配到一个HRegion服务器中需要一定的时间。

  当根数据表被分配好之后,主服务器就会扫描根数据表,获取元数据表的名字和位置,然后把元数据表分配到不同的HRegion服务器中。最后就是扫描元数据表,找到所有HRegion区域的信息,把它们分配给不同的HRegion服务器。

  主服务器在内存中保存着当前活跃的HRegion服务器的数据,因此如果主服务器死机,整个系统也就无法访问了,这时服务器的信息也就没有必要保存到文件里面了。

 

  元数据和跟数据表的每一行都包含一个列簇(info列簇):

info:regioninfo包含了一个串行化的HRegionInfo对象

info:server保存了一个字符串,是服务器的地址HServerAddress.toString()

info:startcode是一个长整型的数字字符串,它是在HRegion服务器启动的时候传给主服务器的,让主服务器确定这个HRegion服务器的信息有没有更改。

  因此,当一个客户端拿到根数据表地址以后,就没有必要再连接主服务器了,主服务器发负载相对就小了很多。它只会处理超时的HRegion服务器,并在启动的时候扫描根数据表和元数据表,以及返回根数据表的HRegion服务器地址。

 

 

 

    META表,相当于ROOT表来说,存储更多。一个单个的META表能够在Rgion中包含所有的信息,能够详细到如此地步。

   假设,把ROOT表当做一级目录,则META表是详细的一级目录。

 

 

 

 

总结

  ROOT表可以看作是一张简表,简单的信息,记录不是很多,但ROOT表记录了META的信息。

  META表可以看作是一张详表,记录了所有HRegion的信息。ROOT表也记录了HRegion表的信息,但没META表记录详细。

  理解了么,各博友们。~

 

posted @ 2016-12-06 13:31  大数据和AI躺过的坑  阅读(5210)  评论(0编辑  收藏  举报