文章目录

  • 1. HBase的物理模型
  • 2. HBase的读写流程
  • 2.1 写操作流程
  • 2.2 读操作流程


1. HBase的物理模型

Region是按大小进行分割的,每个表开始只有一个Region。随着数据量的增多,Region不断增大,当增大到液体个阈值的时候,Region就会分出一个新的Region,之后会有越来越多的Region。

hbase中region分布 hbase中的region_写数据

Region是HBase中分布式存储和负载均衡的最小单元,不同的Region分布到不同的RegionServer上,如下所示:

hbase中region分布 hbase中的region_数据_02


Region虽然是分布式存储的最小单元,但并不是存储的最小单元。Region是由一个或多个Store组成的,每个Store由一个MemStore和多个StoreFile组成,数据写入时首先进入到MemStor中并存储在内存中,MemStore中的数据是排序的,当MemStore累计到一定阈值时,就会创建一个新的MemStore,并且将老的MemStore添加到Flush队列,由单独的线程Flush到磁盘上,成为一个StoreFile。当一个Store中的StoreFile达到一定的阈值后,就会进行一次合并操作,将对同一个key的值修改合并到一起,形成一个大的StoreFile。当StoreFile的大小达到一定的阈值后,又会对StoreFile进行切分操作,等分为两个StroeFile。

hbase中region分布 hbase中的region_数据_03

2. HBase的读写流程

正如HDFS和MapReduce由客户端、数据节点和主节点组成一样,HBase也是采用相同的主从结构模型,他由一个Master节点协调管理一个或多个RegionServer节点。

HBase主节点负责启动整个HBase集群,通过“心跳机制”得到RegionServer节点工作状态,并管理Region数据的分发。当一个RegionServer节点发生故障或宕机后,Master节点中中的HMaster进程将把该节点标记为故障,并协调其他负载较轻的RegionServer节点,将故障RegionServer节点中的数据复制到自己的节点中,以保证数据的完整性。

RegionServer节点主要负责响应客户端的读写请求和数据的存储,定期地通过“心跳机制”向HMaster节点反馈自己的健康状态和数据位置。

hbase中region分布 hbase中的region_分布式存储_04

2.1 写操作流程

  1. Client通过Zookeeper的调度,向HRegionServer发出写数据请求,在HRegion中写数据。
  2. 数据被写入HRegion的MemStore,直到MemStore达到预设的阈值。
  3. MemStore中的数据被Flush成一个StoreFile
  4. 随着StoreFile文件的不断增多,当其数量增长到一定阈值后,触发Compact合并操作,将多个StoreFile合并成一个StoreFile,同时进行版本合并和数据删除。
  5. StoreFile通过不断的Compact合并操作,逐步形成越来越大的StoreFile。
  6. 单个StoreFile大小超过一定的阈值后,触发Split操作,把当前的HRegion Split成两个新的HRegion。父HRegion会下线,新的Split出的两个HRegion会被HMaster分配到相应的HRegionServer上,使得原先一个HRegion的压力得以分流到两个HRegion上。

2.2 读操作流程

  1. Client访问Zookeeper,查找-ROOT-表,获取.META.表信息。
  2. 从.META.表查找,获取存放目标数据的HRegion信息,从而找到对应的HRegionServer。
  3. 通过HRegionServer获取需要查找的数据。
  4. HRegionServer的内存分为MemStore和BlockCache两部分,MemStore主要用于写数据,BlockCache主要用于读数据。读请求将先到MemStore中查数据,如果无法查询到就会转到BlockCache,再查询不到就会到StoreFile,并把读的结果放入BlockCache。