Hbase读请求过程Hbase读写请求过程 - 图2

  1. client先访问zookeeper,获取hbase meta表位于哪个regionserver
  2. 访问对应的regionserver,获取hbase meta表,根据读请求的table rowkey ,查询出目标数据对应的regionserver和region,并将该table的region信息以及meta表的位置信息缓存在客户端的metacache,方便下次访问
  3. 与目标的regionserver进行通讯
  4. 分别在blockcache(读缓存),MemStore和StoreFile中查询目标数据,并且查到的所有数据进行合并,此处所有的数据是指向一条数据库的不同版本或者是不同的数据类型
  5. 将从文件中查询到的数据块缓存到blockcache
  6. 将合并后的最终结果返回到客户端

Hbase写文件请求

Hbase读写请求过程 - 图3

  1. client先访问zookeeper,获取hbase meta表位于哪个regionserver。
  2. 访问对应的regionserver,获取hbase meta表,查询出目标数据对应的regionserver和region,并将该table的region信息以及meta表的位置信息缓存在客户端的metacache,方便下次访问
  3. 与目标regionserver进行通信
  4. 将数据顺序写入到WAL中
  5. 将数据写入对应的Memstore。数据会在Memstore进行排序
  6. 向客户端发送ack
  7. 当到达Menstore的刷写时机后,会把MemStore中的数据flush到storeFile中

简单的表达

Hbase读请求过程

  1. 客户端到zookeeper询问meta表在哪
  2. 客户端到meta所在节点(regionserver)读取meta表的数据
  3. 客户端找到region获取region和regionserver的对应关系,直接打到regionserver读取region数据

    Hbase写文件请求

  4. Client先访问zookeeper,找到meta表,并且获取meta表元数据,确定当前将要写入的数据对应的HRegion和HRegionServer服务器

  5. Client向该HRegionServer服务器发起写数据请求(①Clinet先把数据写入HLog,以防止数据丢失,②然后将数据写入到Memstore)
  6. Memstore达到阙值,会把Memstore中的数据flush到storeFile中
  7. 当StoreFile越来越多 达到一定数量的时候 会触发Compact合并操作 将多个小文件合并成一个大文件
  8. StoreFile越来越多 region也会越来越大 达到阙值后,会触发Split操作 变成两个文件