HBASE 系列-Region是如何split的?

作者: 不务正业的coder | 来源:发表于2017-08-23 11:58 被阅读65次

1. 简介

当RegionServer接收客户的write请求后,会在memstore中不断的堆积。直到达到flush阈值时,便会flush到disk上,并以store files的形式存储。

RegionServer可以有1 ~ N个region,一个region可以包含1~N store files。
当store files越来越多后,RegionServer会根据region split policy策略决定对它们进行压缩,具体表现为让一个region变的更大,还是让一个region拆分成多个子region。

RegionServer 在split之前和之后都要通知master修改.meta.表信息,一边与让client及时察觉到region的变化。并重新排列数据文件在HDFS中目录结构。

在splitting过程中,是多任务多处理的,所有的执行状态都被一个in-memory 的日志里记录 。若遇到error是可以被rollback。

2. Spilt 过程示例

处理步骤:

  1. RegionServer先获得一个table的read共享锁,避免schema在split处理期间发生修改。
    然后在zookeeper的znone上创建一个节点/hbase/region-in-transition/region-name,状态标识为splitting 。

  2. Master节点会监听zookeeper的region-in-transition节点下所有子节点的变化。

  3. 在HDFS上的待split的region目录下创建子目录.splits。

  4. RegionServer将region 关闭closes,同时将它标识为offline状态。
    此时,若有client请求次region数据,则会抛出NotServingRegionException,并可能做一些retry操作。

  5. 接着,RegionServer在.splits目录下生成子daughter A 和B,并创建必须的数据结构。然后就开始splits store files 。就某种意义而已,只是对每个store file 创建两个 Reference files 并指向parent region’s files。

6.接着,RegionServer在HDFS上创建真实的新daughter目录A 和B ,与parent平级。并将第5步中的reference files分别move到daughter A 和 region B中。

  1. 然后,RegionServer 就发送请求去更新.meta table信息,设置parent 为offline,同时增加新的子region信息 ,如图中[7]箭头指向行 splitA和splitB信息。

  2. 同时并行的打开新的 daughter A 和 daughter B region 。

  3. 接着,RegionServer 添加daughters A and B 到 .META.如图中[]箭头指向的两行。
    此时,这两个region的状态是online 。这是clients可以发现新的region,同时更新自己的.meta.缓存。

  4. 最后,RegionServer 更新znode节点 /hbase/region-in-transition/region-name为SPLIT。如此,master可以学习到。负载均衡时,可以指向到新的子region。

3. 垃圾回收

在split过程中, .META. and HDFS产生的 references to the parent region临时数据。
这些将会被Garbage collection tasks 回收掉。

相关文章

  • HBASE 系列-Region是如何split的?

    1. 简介 当RegionServer接收客户的write请求后,会在memstore中不断的堆积。直到达到flu...

  • hbase region split源码分析

    hbase region split : split执行调用流程: 1.HbaseAdmin发起split:###...

  • HBase 数据模型

    理解 HBase 的数据模型,能够更好的理解 HBase 针对 Region 的操作(Split、Compact等...

  • HBase写入优化

    HBase高并发读写 rowkey+预分区的合理设计(减少split) 提高region的容量也可以减少split...

  • HBase split policy

    HBase Region达到一定的大小之后,将会进行split操作。而split policy主要如下:1.采用C...

  • HBase Split 简介

    Hbase Split 是一个很重要的功能,HBase 通过把数据分配到一定数量的 Region 来达到负载均衡的...

  • HBase分裂策略

    在Hbase中split是一个很重要的功能,Hbase是通过把数据分配到一定数量的region来达到负载均衡的。一...

  • hbase-region split剖析

    hbase region 切分是hbases水平扩展一个重要因素,将一个region切分为两个小region,...

  • Hbase

    HBase存储架构图 HBase Master 为Region server分配region 负责Region s...

  • HBase概念原理参考

    HBase之Region HBase中已Region为单位组织管理数据 RegionServer对应到机器节点,负...

网友评论

    本文标题:HBASE 系列-Region是如何split的?

    本文链接:https://www.haomeiwen.com/subject/yscddxtx.html