HBase1.x中地区的拆分是怎样的

  介绍

这篇文章给大家介绍HBase1.x中地区的拆分是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

第一部门:地区拆分的实现

,,,客户端向hbase写数据,首先从动物园管理员中获取元数据存储所在的regionserver,查找对应的区域,在区域中寻找列族,先向memstore中写入数据,开始都会先写入memstore(默认128 mb)中(如果开启了细胞膜日志,则先写入细胞膜日志),随着数据写入增加,触发溢写操作(冲洗),溢写到磁盘文件生成StoreFile。当存储文件堆积时,regionserver会将它们压缩成更少,更大的文件。每次刷新或压缩完成后,该区域中存储的数据量将发生变化.RegionServer会根据配置的地区拆分策略,以确定是否提交拆分请求。

,,,,拆分策略配置在hbase-site.xml中,hbase的默认拆分策略:IncreasingToUpperBoundRegionSplitPolicy:

<节>
 & lt; property>,, & lt; name> hbase.regionserver.region.split.policy,, & lt; value> org.apache.hadoop.hbase.regionserver.IncreasingToUpperBoundRegionSplitPolicy & lt;/property> 
  

,,,,拆分地区是由Regionserver本地决定,但是会有很多参与者协调,Regionserver再进行拆分前后都会通知HMaster,更新.mea元数据表信息,并重排HDFS目录结构和数据文件;Regionserver会保留执行状态的日志,以便发生错误时进行任务回滚,下面是HBase官拆网地区分实现流程图,来自RegionServers或主人的操作显示为红色,而来自客户端的操作显示为绿色,如图所示:

,,,,  HBase1。x中地区的拆分是怎样的

<李>

RegionServer拆分第一步,RegionServer获取表上的共享读锁定,以防止在拆分过程中修改架构。然后它在动物园管理员下的/hbase/region-in-transition/地名创建一个znode,并将znode的状态设置为分裂。

<李>

主开始了解znode,因为它有一个region-in-transition的观察器。

<李>

RegionServer在HDFS中父母的地区目录下创建一个子目录。李分裂。

<李>

RegionServer关闭父区域并在其本地数据结构中将区域标记为离线。拆分地区现在处于离线状态。这时来自父区域的客户端请求将抛出NotServingRegionException。客户端将重试一些备份。关闭区域被刷新。

<李>

RegionServer在。分裂目录下为孩子开放和B创建地区目录,并创建必要的数据结构,然后,它会拆分存储文件,因为它会在父区域中为每个存储文件创建两个引用文件。这些引用文件将指向父地区的文件。

<李>

RegionServer在HDFS中创建实际的地区目录,并为每个孩子,地区移动引用文件。

<李>

RegionServer向.META。表发送一个把请求,并将.META。表中父母的地区设置为离线,添加有关子子区域的信息。这里,.META。中的子区域将不会有单独的条目。客户端将看到父区域在扫描.META。时被拆分。但直到他们出现在.META。其中才会知道这些孩子地区。此外,如果把到.META。成功后,父母地区将会有效地拆分。如果RegionServer在此RPC成功之前失败,则主和下一个地区的服务器打开该区域将清除有拆关地区分的不干净状态。更新.META。之后,地区分割将由主进行前滚。

<李>

RegionServer并行打开child  reigon A和B。李李

<>

RegionServer将孩子reigon A和B添加到.META。,连同它承载区域的信息。拆分reigon现在处于在线状态。在此之后,客户端可以发现新的reigon并向他们发出请求。客户端在本地缓存.META。条目,但是当他们向RegionServer或者.META。发出请求时,他们的缓存将失效,他们将从.META。中了解新的reigon。

<李>

RegionServer更新管理员中的znode/hbase/region-in-transition/地名以表示状态分裂,以便主服务器可以了解它。必要时,平衡器可以自由地将子reigon重新分配给其他RegionServer。拆分事务现在已完成。

<李>

拆分之后,.META。父母和HDFS仍将包含对地区的引用。在子区域中进行压缩重写数据文件时,这些引用将被删除。主服务器中的垃圾收集任务会定期检查孩子地区是否仍然引父地区用的文件。否,则父区域将被删除。

第二部分:地区拆分方式

,,主要有三种拆分方式:预拆分,自动拆分,手动强制拆分;

,,,, 1。预拆分,

,,,,就是在新建表时进行地区拆分,根据数据分布特点,提前预分区可减少rowkey热点问题,另一方面减少地区分裂导致短时不可用。

两种方法预分区:

方法一:

HBase1.x中地区的拆分是怎样的