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表记录详细。
理解了么,各博友们。~
作者:大数据和人工智能躺过的坑
出处:http://www.cnblogs.com/zlslch/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
如果您认为这篇文章还不错或者有所收获,您可以通过右边的“打赏”功能 打赏我一杯咖啡【物质支持】,也可以点击右下角的【好文要顶】按钮【精神支持】,因为这两种支持都是我继续写作,分享的最大动力!