-ROOT-表和.META.表详解

来源:互联网 发布:网络推广师学费多少 编辑:程序博客网 时间:2024/06/09 17:53

HBase中有两个特殊的表:-ROOT-和.META.。

由于HBase中的表可能非常大,故HBase会将表按行分成多个region,然后分配到多台RegionServer上。数据访问的整个流程如下图所示:

这里写图片描述

注意两点:
      Client端在访问数据的过程中并没有涉及到Master节点,也就是说HBase日常的数据操作并不需要Master,不会造成Master的负担。

      并不是每次数据访问都要执行上面的整个流程,因为很多数据都会被Cache起来。



从存储结构和操作方法的角度来说,-ROOT-、.META.与其他表没有任何区别。它们与众不同的地方是HBase用它们来存贮一个重要的系统信息
      -ROOT-:记录.META.表的Region信息。
      .META.:记录用户表的Region信息。
其中-ROOT-表本身只会有一个region,这样保证了只需要三次跳转,就能定位到任意region.


1. META表结构

在 HBase Shell 里对.META.表进行 scan 和 describe :
这里写图片描述
可以看出,.META.表的结构如下:
这里写图片描述
.META.表中每一行记录了一个Region的信息。

RowKey

RowKey就是Region Name,它的命名形式是TableName,StartKey,TimeStamp.Encoded.。

其中 Encoded 是TableName,StartKey,TimeStamp的md5值。

例如:mytable,,1438832261249.ea2b47e1eba6dd9a7121315cdf0e4f67.
表名是mytable,StartKey为空,时间戳是1438832261249,前面三部分的md5是:$ echo -n “mytable,,1438832261249” | md5sum # -n选项表示不输出换行符
ea2b47e1eba6dd9a7121315cdf0e4f67 -

Column Family

.META.表有两个Column Family:info 和 historian。

其中info包含了三个Column

regioninfo:region的详细信息,包括StartKey、EndKey以及Table信息等等。

server:管理该region的 RegionServer 的地址。

serverstartcode:RegionServer 开始托管该region的时间。

historian:用来追踪一些region操作的,例如open、close、compact等。

综上,.META.表中保存了所有用户表的region信息,在进行数据访问时,它是必不可少的一个环节。当Region被拆分、合并或者重新分配的时候,都需要来修改这张表的内容 来保证访问数据时能够正确地定位region。


ROOT表结构

      当用户表特别大时,用户表的region也会非常多。.META.表存储了这些region信息,也变得非常大,这时.META.自己也需要划分成多个Region,托管到多个RegionServer上。

      这时就出现了一个问题:当.META.被托管在多个RegionServer上,如何去定位.META.呢? HBase的做法是用另外一个表来记录.META.的Region信息,就和.META.记录用户表的Region信息一样,这个表就是-ROOT-表。


在 HBase Shell 里对-ROOT-表进行 scan 和 describe
这里写图片描述

-ROOT-表的结构如下:
这里写图片描述

-ROOT-表除了没有historian列族之外,-ROOT-表的结构与.META.表的结构是一样的。另外,-ROOT-表的 RowKey 没有采用时间戳,也没有Encoded值,而是直接指定一个数字。

-ROOT-表永远只有一个Region,也就只会存放在一台RegionServer上。—— 在进行数据访问时,需要知道管理-ROOT-表的RegionServer的地址。这个地址被存在 ZooKeeper 中。

0 0
原创粉丝点击