HBase1.x中Region的拆分是怎样的

技术HBase1.x中Region的拆分是怎样的这篇文章给大家介绍HBase1.x中Region的拆分是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。第一部门:Region拆分的实现 c

本文介绍了如何在HBase1.x中拆分区域,内容非常详细。感兴趣的朋友可以参考一下,希望对你有所帮助。

第一部分:区域分割的实现。

客户端将数据写入hbase。首先,它从zookeeper获取存储元数据的regionserver,查找相应的区域,在区域中查找列族,并首先将数据写入memstore。首先,它将被写入memstore(默认为128MB)(如果打开了WAL日志,它将首先被写入WAL日志)。随着数据写入的增加,会触发刷新操作,溢出到磁盘文件生成StoreFile。当存储文件堆积起来时,区域服务器会将它们压缩成更少更大的文件。每次刷新或压缩后,存储在该区域中的数据量会发生变化。区域服务器将根据配置的区域分割策略确定是否提交分割请求。

分割策略是在HBase-site.xml中配置的。HBase的默认分割策略是:递增上限区域分割策略:

property name hbase . regionserver . region . split . policy/namevaluorg . Apache . Hadoop . hbase . regionserver . additioning upper borboundgionsplitpolicy/value/property

地区的划分由地区服务器在当地决定,但会有许多参与者的协调。划分前后,Regionserver会通知HMaster更新的元数据表信息。mea并重新排列HDFS目录结构和数据文件。区域服务器将保留执行状态的日志,以便在出现错误时可以回滚任务。以下是海航官网区域划分实施流程图。来自区域服务器或主服务器的操作显示为红色,而来自客户端的操作显示为绿色,如图所示:

HBase1.x中Region的拆分是怎样的

在RegionServer拆分的第一步中,RegionServer获取表的共享读锁,以防止在拆分过程中修改模式。然后在zookeeper下创建一个znode in/hbase/region-in-transition/region-name,并将z node的状态设置为SPLITTING。

师父开始了解znode是因为它有一个过渡区域观察者。

区域服务器创建一个子目录。在HDFS的父区域目录中拆分。

区域服务器关闭父区域,并在其本地数据结构中将该区域标记为脱机。分割区域现在脱机。此时,来自父区域的客户端请求将引发NotServingRegionException。客户端将重试一些备份。关闭的区域被刷新。

区域服务器为。拆分目录,并创建必要的数据结构。然后,它会拆分存储文件,因为它会为父区域中的每个存储文件创建两个参考文件。这些参考文件将指向父区域的文件。

区域服务器在HDFS创建实际的区域目录,并为每个子区域移动参考文件。

区域服务器向发送一个Put请求。META。表中设置父区域。META。表,并添加有关子区域的信息。这里,子区域在。META。不会有单独的条目。客户端在扫描时会看到父区域被分割。META。但是他们不会知道这些子区域,直到他们出现在。META。另外,如果放到。META。如果成功,父区域将被有效分割。如果区域服务器在此RPC成功之前失败,主服务器和下一个区域服务器将打开该区域,以清除关于区域分割的不干净状态。更新后。META。区域划分将由主机向前滚动。

RegionServer并行打开childreigon A和b。

RegionServer将子reigon A和b添加到。米(meter的缩写))

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

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

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

  • 第二部分:Region拆分方式

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

        1.预拆分,

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

    两种方法预分区:

    方法一:

    hbase org.apache.hadoop.hbase.util.RegionSplitter table_spilt_test1  HexStringSplit -c 10 -f info1:info2:info3

    表名:table_spilt_test1  

    拆分的region的数量:10

    列族:info1,info2,info3

     方法二:

    指定每个预拆分的region的rowkey的开始值

    create 'test_table', 'table_spilt_test1  ', SPLITS=> ['1001', '2001', '3001']

    2.自动拆分:

        Region默认大小为10G,超过10G就自动进行拆分,Region大小通过下面面这个参数控制,生产环境如果预分区后,每个Region数据都比较大可改成20G 30G:

        <property>      <name>hbase.hregion.max.filesize</name>      <value>10737418240</value>    </property>

    3.手动强制拆分:

        可在hbase shell根据提示,对某个region进行强制拆分

    Examples:    split 'tableName'    split 'namespace:tableName'    split 'regionName' # format: 'tableName,startKey,id'    split 'tableName', 'splitKey'    split 'regionName', 'splitKey

    第三部分:Region拆分触发条件

        HBase表的拆分由以下公式决定:

    Min (X^2 * "hbase.hregion.memstore.flush.size", "hbase.hregion.max.filesize")

    说明:

    1).X是该region中所包含的该表的region的数量;

    2).hbase.hregion.memstore.flush.size默认值是128M;

    3).hbase.hregion.max.filesize 默认值是10GB

        新建一张表并开始写入数据时,当达到128M开始第一次拆分,之后依次是512MB, 1152MB, 2GB, 3.2GB, 4.6GB, 6.2GB时候开始进行拆分,当达到hbase.hregion.max.filesize的设定值时便会永远在storefile 达到hbase.hregion.max.filesize进行拆分。

        需要特别注意的是filessize指的是store下的storefile的大小并不是整个region的大小,一个region可能包含很多个store,确切的说是该表有多少个family就有多少个store,当某个family下的storefile达到以上标准是就会拆分整个region而不管改region下的其他的store下的storefile是否已经达到触发条件。

    关于HBase1.x中Region的拆分是怎样的就分享到这里了,希望

    内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/93995.html

    (0)

    相关推荐

    • dw怎么制作asp动态网页以及向数据库增加记录

      技术dw怎么制作asp动态网页以及向数据库增加记录dw怎么制作asp动态网页以及向数据库增加记录,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。下面给大家介绍

      攻略 2021年12月2日
    • 手机软件开发费用,开发一个App的费用是多少

      技术手机软件开发费用,开发一个App的费用是多少首先手机软件开发费用,一个App开发的基本要求,至少需要ios和android两个平台,来满足现在主要的手机平台使用用户,ios和android平台其中任意一个的开发价格大

      生活 2021年10月25日
    • 怎么解决eureka中的Root name 'timestamp' does not match expected报错问题

      技术怎么解决eureka中的Root name timestamp does not match expected报错问题这篇文章主要介绍“怎么解决eureka中的Root name timestamp does not

      攻略 2021年11月16日
    • 使用Redis之前5个必须了解的事情有哪些

      技术使用Redis之前5个必须了解的事情有哪些这篇文章给大家介绍使用Redis之前5个必须了解的事情有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。使用Redis开发应用程序是一个很愉快的过程,

      攻略 2021年11月10日
    • java基于NIO如何实现群聊模式

      技术java基于NIO如何实现群聊模式这篇文章将为大家详细讲解有关java基于NIO如何实现群聊模式,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体内容如下Clientpackage

      攻略 2021年11月23日
    • ASP.NET的J#和C++举例分析

      技术ASP.NET的J#和C++举例分析这篇文章主要介绍“ASP.NET的J#和C++举例分析”,在日常操作中,相信很多人在ASP.NET的J#和C++举例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法

      攻略 2021年11月29日