Hbse的读写过程

时间:2023-12-24 12:48:43

1.Hbase的读取过程。

以读取test_region表,row key为this is row value 400000为例.

1: 到zookeeper中去读取/hbase/root-region-server znode中的值,得到-ROOT-的唯一region归那台region-server管.

2: 管-ROOT- 的那台region-server将从hdfs系统中加载-ROOT-表的内容到内存中(并cache).

3.1 在我目前的测试中-ROOT- 表只有一个row key,  所以直接从info:server中得到管.META.的那台region-server管, 返回给clinet.

3.2 如果-ROOT-表中有多条.META.关于test_region表的记录,找法和4相同

4: 管.META. 的那台region-server从hdfs加载表.META.的数据,并cache.  client以test_region,this is row value 400000, 9999999999999, 找到那条比这个key最接近的那条数据,从info:server中得管这个表的这个region(叫a)的region-server服务器.

5: 管理a这个region的服务器从hdfs找到存储这条数据的文件,然后读取返回.

总结:

(1): 经过三次,定位到数据所在的region

(2): 读操作不要经过hmaster

2.Hbase写数据过程。

以插入test_region表,row key为this is row value 400001为例.

1: 到zookeeper中去读取/hbase/root-region-server znode中的值,得到-ROOT-的唯一region归那台region-server管.

2: 管-ROOT- 的那台region-server将从hdfs系统中加载-ROOT-表的内容到内存中(并cache).

3.1 在我目前的测试中-ROOT- 表只有一个row key,  所以直接从info:server中得到管.META.的那台region-server管, 返回给clinet.

3.2 如果-ROOT-表中有多条.META.关于test_region表的记录,找法和4相同

4: 管.META. 的那台region-server从hdfs加载表.META.的数据,并cache.  client以test_region,this is row value 400000, 9999999999999, 找到那条比这个key最接近小的那条数据,从info:server中得管这个表的这个region(叫a)的region-server服务器.

5: 先写HLog, 当region-server死了后恢复数据使用

6.1 : 如果cache 没有达到指定的值,则把数据写到这台region-server服务器的这块内存就好了.

6.2 : 如果cache已达到某个值,则新建一个内存区去接受新来的insert,老的cache区将由一个线程flush到文件系统相应用的region.

7: 如果region文件太多并达到某些大小,将开启一个线程做合并工作,合并后将删除其它小文件,如果合并后文件过大,将进行split,split多个region时,将向master报告region要进行重新分配。进入master分配region过程.

总结:

(1): 经过三次,定位到数据所在的region

(2): 写操作不要经过hmaster.

(3): 写操作将会触发一系统动作