架构图

HBase写流程 - 图1

写流程:

1)Client先访问zookeeper,获取hbase:meta表位于哪个Region Server,因为要想操作hbase:meta这个系统表之前必须要有RegionServer服务器. 这个数据是存放在Zookeeper里面的.

2)访问对应的Region Server,获取hbase:meta这个系统表,根据读请求的namespace:table/rowkey,查询出目标数据位于哪个Region Server中的哪个Region中。并将该table的region信息以及meta表的位置信息缓存在客户端的meta cache,方便下次访问。

  1. 所有的Region对应的RegionServer的信息在hbase:meta这张表里面存放着.

3)与目标Region Server进行通讯;

4)将数据顺序写入(追加)到WAL;

5)将数据写入对应的MemStore,数据会在MemStore进行排序;

6)向客户端发送ack;

7)等达到MemStore的刷写时机后,将数据刷写到HFile(StoreFile)。

写入数据的微观流程:

①尝试尽可能获取多个锁,至少需要获取一把
②如果当前数据没有设置时间戳,更新时间戳
③构建WAL对象
④写入WAL对象的buffer中,但是并不sync到磁盘
⑤写入memstore
⑥将WAL对象buffer中的数据sync到磁盘
⑦滚动MVCC版本号,滚动后,客户端就可以查询到数据
⑧如果在整个写入过程中发生异常,此时,会将已经写入到memstore中的数据回滚!