HBase Region分区流程

218 阅读1分钟

背景

HBase得Region在大小达到一定条件后分裂,一个分区变为两个分区; 分区时机: 在compact结束时,依据RegionSplitPolicy决定是否分区 因为 在将父分区数据划分至两个子分区期间,分区数据不可读;直到两个子分区被启用

架构

image.png

  1. ZK目录/hbase/region-in-transition/parent_region_name创建子节点,状态SPLITTING
  2. Master一直监听/hbase/region-in-transition目录,感知到父分区状态变化
  3. RegionServer在HDFS中父分区目录(parent_region_name)下创建.splits子目录
  4. 关闭父分区,强制刷新MemStore中数据到磁盘;从这个阶段开始,所有发往此分区的请求不可读
  5. 在HDFS的.splits目录创建子分区daughterA,daughterB;创建部分所需数据结构;接下来将父分区的HFiles拆分,因为HBase中数据不可变,在子分区目录下为每个HFile分别创建了两个ReferenceFile, 该文件中只存key,指向父分区中HFile
  6. RegionServerA往元数据表(.META.存放某RegionServer B)写入:
    • 父分区下线
  7. RegionServerA打开子分区,接收读写
  8. 将子分区数据写入元数据表, 此时客户端感知子分区,原父分区对应数据可以读写
  9. RegionServer更新/hbase/region-in-transition/parent_region_name状态为SPLIT; Master感知,Balancer可以将子分区迁往其他RegionServer
  10. 此时子分区仍有数据指向父分区,再子分区定期compact时会将引用的父分区数据写入子分区HFiles

流程图

image.png

community.cloudera.com/t5/Communit…

blog.cloudera.com/apache-hbas…