HBase的Region Split详解

什么是Region Split

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

Region Split的流程

HBase的Region Split详解_第1张图片

  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进行移除。

你可能感兴趣的:(HBase,hbase,数据库,大数据)