Hadoop HBase概念学习系列之META表和ROOT表(六)
2016-12-06 13:31
295 查看
在
不过,因为我们有合并和分隔操作,此时,如果正好在执行这些操作的过程中出现死机,那么就可能存在多份表名和开始主键相同的数据,这样的话,只有光靠开始主键就不够了,这就需要通过HBase的元数据信息来区分哪一份才是正确的数据文件。为此,为了区分这样的情况,每个HRegion都有一个'regionId'来标识它的唯一性。
所以一个HRegion的表达符,最终是: [b]表名+开始主键+唯一Id[/b],即[b]tablename+startkey+regionId[/b]。
我们可以用这个识别符来区分不同的HRegion,这些数据就是元数据(META),而元数据本身也是被保存在HRegion里面的,所以,我们称呼这个表为元数据表(META表),即[b]META Table,里面保存的就是HRegion标识符和实际HRegion服务器的映射关系[/b]。
元数据表也会增长,并且可能被分割为几个HRegion,为了定位这些HRegion,我们采用一个[b]根数据表(ROOT表),即ROOT Table,它保存了所有元数据表的位置[/b],而跟数据表是不能被分割的,永远只保存在一个HRegion。
在HBase启动的时候,主服务器先去扫描根数据表,因为这个表只会有一个HRegion,所有这个HRegion的名字是被写死的。当然要把跟数据表分配到一个HRegion服务器中需要一定的时间。
当根数据表被分配好之后,主服务器就会扫描根数据表,获取元数据表的名字和位置,然后把元数据表分配到不同的HRegion服务器中。最后就是扫描元数据表,找到所有HRegion区域的信息,把它们分配给不同的HRegion服务器。
主服务器在内存中保存着当前活跃的HRegion服务器的数据,因此如果主服务器死机,整个系统也就无法访问了,这时服务器的信息也就没有必要保存到文件里面了。
元数据和跟数据表的每一行都包含一个列簇(info列簇):
info:regioninfo包含了一个串行化的HRegionInfo对象
info:server保存了一个字符串,是服务器的地址HServerAddress.toString()
info:startcode是一个长整型的数字字符串,它是在HRegion服务器启动的时候传给主服务器的,让主服务器确定这个HRegion服务器的信息有没有更改。
因此,当一个客户端拿到根数据表地址以后,就没有必要再连接主服务器了,主服务器发负载相对就小了很多。它只会处理超时的HRegion服务器,并在启动的时候扫描根数据表和元数据表,以及返回根数据表的HRegion服务器地址。
[b] META表,相当于ROOT表来说,存储更多[/b]。一个单个的META表能够在Rgion中包含所有的信息,能够详细到如此地步。
假设,把ROOT表当做一级目录,则META表是详细的一级目录。
[b]总结[/b]
ROOT表可以看作是一张简表,简单的信息,记录不是很多,但ROOT表记录了META的信息。
META表可以看作是一张详表,记录了所有HRegion的信息。ROOT表也记录了HRegion表的信息,但没META表记录详细。
理解了么,各博友们。~
HBase里的HRegion
里,谈过,HRegion是按照表名+开始/结束主键,即表名+主键范围来区分的。由于主键范围是连续的,所以一般用开始主键就可以表示相应的HRegion了。不过,因为我们有合并和分隔操作,此时,如果正好在执行这些操作的过程中出现死机,那么就可能存在多份表名和开始主键相同的数据,这样的话,只有光靠开始主键就不够了,这就需要通过HBase的元数据信息来区分哪一份才是正确的数据文件。为此,为了区分这样的情况,每个HRegion都有一个'regionId'来标识它的唯一性。
所以一个HRegion的表达符,最终是: [b]表名+开始主键+唯一Id[/b],即[b]tablename+startkey+regionId[/b]。
我们可以用这个识别符来区分不同的HRegion,这些数据就是元数据(META),而元数据本身也是被保存在HRegion里面的,所以,我们称呼这个表为元数据表(META表),即[b]META Table,里面保存的就是HRegion标识符和实际HRegion服务器的映射关系[/b]。
元数据表也会增长,并且可能被分割为几个HRegion,为了定位这些HRegion,我们采用一个[b]根数据表(ROOT表),即ROOT Table,它保存了所有元数据表的位置[/b],而跟数据表是不能被分割的,永远只保存在一个HRegion。
在HBase启动的时候,主服务器先去扫描根数据表,因为这个表只会有一个HRegion,所有这个HRegion的名字是被写死的。当然要把跟数据表分配到一个HRegion服务器中需要一定的时间。
当根数据表被分配好之后,主服务器就会扫描根数据表,获取元数据表的名字和位置,然后把元数据表分配到不同的HRegion服务器中。最后就是扫描元数据表,找到所有HRegion区域的信息,把它们分配给不同的HRegion服务器。
主服务器在内存中保存着当前活跃的HRegion服务器的数据,因此如果主服务器死机,整个系统也就无法访问了,这时服务器的信息也就没有必要保存到文件里面了。
元数据和跟数据表的每一行都包含一个列簇(info列簇):
info:regioninfo包含了一个串行化的HRegionInfo对象
info:server保存了一个字符串,是服务器的地址HServerAddress.toString()
info:startcode是一个长整型的数字字符串,它是在HRegion服务器启动的时候传给主服务器的,让主服务器确定这个HRegion服务器的信息有没有更改。
因此,当一个客户端拿到根数据表地址以后,就没有必要再连接主服务器了,主服务器发负载相对就小了很多。它只会处理超时的HRegion服务器,并在启动的时候扫描根数据表和元数据表,以及返回根数据表的HRegion服务器地址。
[b] META表,相当于ROOT表来说,存储更多[/b]。一个单个的META表能够在Rgion中包含所有的信息,能够详细到如此地步。
假设,把ROOT表当做一级目录,则META表是详细的一级目录。
[b]总结[/b]
ROOT表可以看作是一张简表,简单的信息,记录不是很多,但ROOT表记录了META的信息。
META表可以看作是一张详表,记录了所有HRegion的信息。ROOT表也记录了HRegion表的信息,但没META表记录详细。
理解了么,各博友们。~
相关文章推荐
- Hadoop HBase概念学习系列之列、列簇(十二)
- Hadoop HBase概念学习系列之HBase里的HStore(十九)
- Hadoop HBase概念学习系列之RowKey设计(二十九)
- Hadoop HBase概念学习系列之数据模型(七)
- Hadoop HBase概念学习系列之HFile(二十)
- Hadoop HBase概念学习系列之HBase里的Zookeeper(二十一)
- Hadoop HBase概念学习系列之hbase shell中执行java方法(高手必备)(二十五)
- Hadoop HBase概念学习系列之HLog(二)
- Hadoop HBase概念学习系列之概念视图(又名为逻辑模型)(八)
- Hadoop HBase概念学习系列之HBase里的Client(二十二)
- Hadoop HBase概念学习系列之物理视图(又名为物理模型)(九)
- Hadoop HBase概念学习系列之HBase表的一些设置(强烈推荐好好领悟)(十三)
- Hadoop HBase概念学习系列之HBase里的列式数据库(十七)
- Hadoop HBase概念学习系列之HBase里的存储数据流程(二十三)
- Hadoop HBase概念学习系列之什么是HBase? (一)
- Hadoop HBase概念学习系列之模式设计(十)
- Hadoop HBase概念学习系列之HBase里的4维坐标系统(第一步定位行键 -> 第二步定位列簇 -> 第三步定位列修饰符 -> 第四步定位时间戳)(十八)
- Hadoop HBase概念学习系列之HRegion服务器(三)
- Hadoop HBase概念学习系列之HMaster服务器(四)
- Hadoop HBase概念学习系列之HBase里的客户端和HBase集群建立连接(详细)(十四)