HBase从入门到精通11:HBase数据保存过程和Region分裂

本节来介绍一下HBase的数据保存过程和Region分裂过程的相关知识。

1.HBase数据保存过程

HBase中表的数据是存储在RegionServer上的一个个Region中的,表的一个列族对应于一个Region。Region是按照数据行键Rowkey的字典序来存储数据的。假如我们有一张表Bigdata,该表有一个列族Info,该列族下有一个列Name,且为了便于说明,假设行键和Name相同,按照行键字典序保存数据的过程如下图所示:

image

HBase保存数据的流程有以下几个步骤:

  1. 客户端先向ZooKeeper发起请求,找到HBase系统表-ROOT-的位置;
  2. 在-ROOT-表中查找”Bigdata”表的元信息在系统表”.META.”上的保存位置;
  3. 在.META.表中查找”Bigdata”表的”Name”列保存在哪个RegionServer的哪个Region上;
  4. 按照Rowkey的字典序将数据写入目标Region上。

2.HBase的Region分裂过程

HBase表的列族在创建之初只有一个Region,随着插入数据的增多Region变得越来越大。过大的Region使得查询效率降低,因此当Region的大小超过某一阈值时,HBase将执行Region的分裂操作:即将一个大Region拆分成两个相等规模的小Region。具体的Region分裂过程如下图所示:

image

HBase的Region分裂过程需要注意以下几个问题:

  1. Region分裂的触发条件是待写入Region的大小超过预设阈值;
  2. Region分裂操作需要通过网络将数据平均复制到其他两个RegionServer上;
  3. 等待Region分裂操作完成后,删除原Region,更新.META.表中Region分裂表的元信息;

虽然Region分裂后可以提高HBase的读写性能,但是Region分裂过程会对集群网络造成很大的压力,尤其是要分裂的Region尺寸过大、数目过多时,甚至可以使整个集群瘫痪。例如,当年京东的Region分裂事件,造成整个集群瘫痪9个小时以上,无法对外提供服务,经济损失可想而知。

因此,应该根据实际需求将Region分裂的阈值设置的合理一些,太小会频繁触发分裂,太大分裂时会对网络传输造成一定的压力。

你可能感兴趣的:(HBase从入门到精通11:HBase数据保存过程和Region分裂)