Hbase写入数据的流程
-
目标
- 掌握Hbase写入数据的整体流程
-
分析
-
目标
-
掌握Hbase数据写入的流程
-
当执行一条Put操作,数据是如何写入Hbase的?
put 表名 rowkey 列族:列 值
-
-
分析
- step1:根据表名获取这张表对应的所有Region的信息
-
step2:根据Rowkey判断具体写入哪个Region
- step3:将put操作提交给这个Region所在的RegionServer
-
step4:RegionServer将数据写入Region,根据列族判断写入哪个Store
- step5:将数据写入MemStore中
-
总结
- 表名:决定了这条数据要写入哪些region中
- Rowkey:决定了这条数据具体写入哪个Region中
- 列族:决定了写入这个region哪个Store中
知识点04:Hbase读写流程:meta表
-
目标
- 了解hbase:meta表的存储内容及功能
- 问题1:如何知道这张表对应的region有哪些?
- 问题2:如何知道每个Region的范围的?
- 问题3:如何知道Region所在的RegionServer地址的?
-
分析
- 肯定有个地方存储了表与Region的关系以及Region的信息
- 存储每张表对应的所有region关系
- 每个region的范围和RegionServer地址
- 肯定有个地方存储了表与Region的关系以及Region的信息
-
实现
-
Hbase自带的两张系统表
- hbase:namespace:存储了Hbase中所有namespace的信息
- hbase:meta:存储了表的元数据
-
hbase:meta表结构
-
Rowkey:每张表每个Region的名称
itcast:t4,eeeeeeee,1616123941870.ba3bf6d78ce9432ea4cd42a3829142b2. 表名,startKey,时间戳,Region的唯一id
-
-
- Hbase中每张表的每个region对应元数据表中的一个Rowkey
- 列
- info:regioninfo
```
#Region的名称
NAME => 'itcast:t4,eeeeeeee,1616123941870.ba3bf6d78ce9432ea4cd42a3829142b2.',
#Region的范围
STARTKEY => 'eeeeeeee', ENDKEY => ''
```
- info:server
```
#Region所在的RegionServer的地址
value=node3:16020
```
-
总结
- 功能:存储了整个Hbase中每张表每个Region的信息
- 名称
- 起始范围
- RegionServer地址
- step1:只要知道表名,就能获取这表表对应的所有Region信息
- step2:根据Region的范围与Rowkey做比较,就能知道要具体写入哪个region
- step3:请求这个region对应的regionServer地址,写入Region即可
put ns:tbname,rowkey,cf:col,value
-
step1:获取元数据
- 表的元数据:hbase:meta表中
- 问题:如果要往一张表写入数据,必须先读meta表,如何知道meta的地址?
- 解决:请求zk,meta表的地址存储在zk中
-
step2:找到对应的Region
-
step3:写入数据
-
实现
-
step1:获取元数据
-
客户端请求Zookeeper,获取meta表所在的regionserver的地址
-
读取meta表的数据:获取所有表的元数据
-
step2:找到对应的Region
-
根据meta表中的元数据,找到表对应的所有的region
-
根据region的范围和写入的Rowkey,判断需要写入具体哪一个Region
-
根据region的Regionserver的地址,请求对应的RegionServer
-
-
step3:写入数据
- 请求RegionServer写入对应Region:根据Region的名称来指定写入哪个Region
- 根据列族判断写入哪一个具体的Store
- 先写入WAL:Hlog预写日志中
- 写入对应Store的MemStore中
- MemStore
-
总结
-
step1:先连接ZK,获取meta表的地址
-
step2:读取meta表的数据,获取表的元数据
-
step3:根据表的元数据找到对应Region的RegionServer
-
step4:
- RegionServer
- Region
- WAL
- Store
- MemStore
- StoreFIle
- Region
- RegionServer