Hbase Meta表基本介绍

Hbase有一个叫做Meta的特殊的目录表,用于保存集群中regions的位置信息(region列表)。ZooKeeper存储着Meta表的位置。

Hbase Meta结构如下:

Hbase Meta表基本介绍_第1张图片

具体含义

rowKey:([table],[region start key],[region id])

 column family:info

 column:regioninfo、server、serverstartcode

1.rowkey中第一个分隔符前存的是表名;

2.第二分隔符前存的是region的第一个rowKey:

  •   1)如果这个地方为空的话,表明这是table的第一个region。并且如果一个region中startkey和endkey都为空的为,表明这            个table只有一个region;
  •   2)在meta表中,startkey 靠前的region会排在startkey 靠后的region前面。(Hbase中的keys按照字段顺序排序的)。

3.region id代表region的id,通常基于region创建时的timestamp;

4.regioninfo是HRegionInfo的序列化值;

5.server是指服务器的地址和端口;

6.serverstartcode是指服务开始的timestamp。

 

根据meta表查找key对应的region,当一个key需要做put操作时,会先扫描meta表,找到对应的region,然后进行插入操作。

eg:当有一个table有三个region,每个region的startkey分别如下:

1 table,,1351700811858
2 table,bar,1351700819876
3 table,foo,1351700829874

如果我们需要插入key ‘baz’时,我们能找到meta表中对应的rowkey为(table,bar,1351700819876)这个查找完,会缓存到客户端,下次查询的时候根据缓存直接访问对应的region。

region split:

当不断向一个table写数据,会触发region spilt,具体过程不再此描述,主要描述meta表的变化:

1)首先是更新meta表中parent region的info:regionfo列的值,然后增加两列info:spiltA和info:splitB(top child的regioninfo,这里约定top为startkey较小的HRegionInfo,bottom则反)。整个过程正常完成后,会删除parent region;

2)更新完meta表中parent region的记录时,需要把child region相关信息插入到meta表中,top child region的startkey和parent key region完全一样,这个时候regionId就发挥作用了,如果没有regionId,当meta表中有top region和parent region时,就不知道选哪个了,因为他们的startkey一样的。而可以通过timestamp作为region的id作区分(top region id取timestamp+1)。这样就可以保证child region总是排在parent region前面;

3)另外,bottom child必须先插入到meta表中,然后,top child才能插入,否则,就会出现在meta表中,bottom region里面key找不到对应region的情况。

举个例子还是以上面的例子为基础 meta中rowkey为(table,bar,1351700819876)的region分裂成两个region的meta rowkey分别是(table,bar,1351700819810)和(table,belong,1351700819810),如果这个时候先插入top child:

1 table,,1351700811858
2 table,bar,1351700819876 <---- offline!
3 table,bar,1351700819810 <---- top child
4 table,foo,1351700829874

例如这个时候我需要找key为bgood,我最终会找到这里的第三行top region里面,但是top region里面并不包含bgood。bgood这个这个key是在bottom region里面的。如果先加入bottom就没有这个问题,如下 :

table,,1351700811858
table,bar,1351700819876 <---- offline!
table,belong,1351700819810 <---- bottom child
table,foo,1351700829874

参考链接:https://www.cnblogs.com/niurougan/p/3976543.html

你可能感兴趣的:(hbase)