HBase的Region Split详解

什么是Region Split

        region split是hbases水平扩展一个重要因素。随着数据的不断写入,将一个region切分为两个小region,并将切分后的region放在不同的节点上,以达到将负载进行均衡到其他节点。

Region Split的流程

  1. 在zookeeper的/hbase/region-in-transition/region-name路径下创建znode并标记状态为SPLITTING.。
  2. hmaster监听/hbase/region-in-transition/region-name路径得知该region正在进行split
  3. regionserver在hdfs的父region路径下创建.splits路径
  4. regionserver上关闭父region,此时父region为offline,当有客户端访问该父region时会报NotServingRegionException错误。
  5. 在hdfs的.splits路径下创建子region A、B的路径,然后split,其实就是在子region A、B的路径下创建引用文件指向父region的文件。
  6. 创建实际的子region路径(上面创建的文件都是在父region路径下),并把引用文件移动到该路径下。
  7. 该regionserver向拥有.META表的regionserver发送一条put请求,修改该spliting region的状态offline,并且添加子region的regionname。在这个时候并没有单独的子region信息,当客户端scan表.META时知道到父region在split,但是不知道子region的信息。当put请求成功后父region会进行快速的split。
  8. 该regionserver并发的打开两个子region。
  9. 该regionserver将两个子region的信息(host)发送到拥有.META表的regionserver,添加到.META表中。这时两个子region上线,客户端可以知道这两个子region并向这两个子region发送请求。客户端会缓存.META表中的数据,当使用缓存中的数据进行访问regionserver时出现问题,客户端会重新请求.META表中的内容进行缓存。
  10. 将步骤1创建的znode,将该状态转为split,这时split操作完成,hmaster得知split操作完成。
  11. 完成上述步骤后,hdfs仍然包含引用文件指向父region,这些引用文件会在子region进行compactions时进行移除。hmaster中的gc任务会周期的检查子region是否还有引用父region的文件,没有的话会将父region进行移除。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值