主页 > 新闻资讯 > 大数据开发-HBase拆分

大数据开发-HBase拆分

作者:游老师 浏览次数: 2021-05-08 16:01
我们都知道,region在数据量大到一定程度的时候,会进行拆分(最开始由一个变成二个),而拆分的方式有三种,包括预拆分、自动拆分、手动强制拆分。下面就来介绍拆分的方式,作为学习大数据开发的小技巧之一,这个非常实用。
Region拆分初识
一个Region代表一个表的一段Rowkey的数据集合,当Region太大,Master会将其拆分。Region太大会导致读取效率太低,遍历时间太长,通过将大数据拆分到不同机器上,分别查询再聚合,Hbase也被人称为“一个会自动分片的数据库”。
Region可以预拆分、自动拆分及手动拆分。下面就来分别讲解这三个拆分的方法。

一、预拆分
预拆分(pre-splitting)就是在建表的时候就定义好了拆分点的 算法,所以叫预拆分。
预拆分一部分的作用能减少rowkey热点,另外一部分能减轻region切分时导致的服务不可用。
(1)Hex拆分点
 
上面这条命令的意思就是新建一个叫my_split_table的表,并根据 HexStringSplit拆分点算法预拆分为10个Region,同时要建立的列族叫 mycf。
(2)手动指定拆分点
手动指定拆分点的方法就是在建表的时候跟上SPLITS参数,比如:

二、自动拆分
(1)固定大小拆分
固定大小拆分策略,0.94版本之前的唯一拆分方法,如果单个Region大小超过了阀值那么就拆分为两个Region,这种策略使得急群众的Region大小很平均。唯一的参数是(hbase-site.xml):
hbase.hregion.max.filesize:region最大大小,默认为10GB
<property>
<name>hbase.hregion.max.filesize</name>
<value>10 * 1024 * 1024 * 1024</value>
</property>
(2)动态限制拆分策略
动态限制拆分策略,是新版本的默认策略。有的数据库文件增长是翻倍的数据量,128M,256M,512M……,该策略与之类似,限制是动态的,计算公式为:
Math.min(tableRegionsCount^3 * initialSize,defaultRegionMaxFileSize)
1.tableRegionCount:当前表在所有RegionServer上拥有的所有的Region数量的总和
2.initialSize:如果定义了hbase.increasing.policy.initial.size,则使用该值,否则用memstore刷写值得2倍,即hbase.hregion.memstore.flush.size*2。
3.deffaultRegionmaxFileSize:ConstantSizeRegionSplitPolicy所用到的配置项,也就是Region的最大大小
4.Math.min:取这两个数值的最小值
当初始hbase.hregion.memstore.flush.size定义为128M,过程为:
刚开始只有一个Region,上限为1^31282=256M
当有2个Region,上限为2^31282=2048M
当有3个Region,上限为3^31282=6912M
以此类推当有4个Region时候,为16G,上限达到了10GB,最大值就保持在了10G,Region数量再增加也不会增加上限

三、手动拆分
 除了预拆分和自动拆分以外,你还可以对运行了一段时间的Region 进行强制地手动拆分(forced splits)。方法是调用hbase shell的 split方法,比如:
 
我们一开始可以先定义拆分点,但是当数据开始工作起来后会出现热点 不均的情况,所以推荐的方法是:先用预拆分导入初始数据。然后用自动拆分来让HBase来自动管理Region。
region自动拆分默认选择Region当中最大Store下的最大Storefile文件中的midkey,而midkey其实只是在通过HFile获取了这个文件之前记录好的数据。在自动触发Split操作的前提下,大部分的Split操作都伴随在Compaction操作之后进行的原因,在于可以对于Region中的文件进行合并,生成较大的StoreFile文件,以方便选择更好的SplitPoint。

以上就是本期的所有内容了,我们要学会一些小技巧,这对我们的大数据开发学习是非常有帮助的。
希望大家点个关注,及时收取最新文章推送,想了解更多敬请咨询加米谷大数据。
有问题的欢迎在评论区留言,如有侵权请告知。
热点排行
推荐文章
立即申请>>