暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

HBase性能优化方法之Region的分裂与合并

数匠笔谈 2021-12-02
3035

编者引语:“过犹不及”指做事做过了头,跟做得不够,都不好这个词特别适用于HBase数据集群中region数量,region数要与业务量适配,少则分裂,多则合并。

1、背景介绍

整个互联网都建立在数据库的底座之上,数据库又林林总总分为很多种,但每个互联网业务发展到一定规模都不可或缺的数据库只有这么几种:以MySQL为代表的关系型数据库以及其分布式解决方案,以Redis为代表的缓存数据库,以Elasitcsearch为代表的检索数据库,以Neo4j为代表的图数据库,以InfluxDB为代表的时序数据库,以Greenplum为代表的OLAP数据库, 再就是分布式持久化KV数据库。而在开源领域,尤其是国内,HBase几乎是分布式持久化KV数据库的首选方案。HBase应用的业务场景非常之多,比如用户画像、实时(离线)推荐、实时风控、社交Feed流、商品历史订单、社交聊天记录、监控系统以及用户行为日志等。


2、企业HBase的建设现状

笔者属于银行金融从业者,所在的企业在积极拥抱数字化转型,在建设大数据基础平台的过程中引入了HBase集群。作为分布式持久化KV数据库,通过构建海量存储、高可靠性、高性能分布式的存储系统,为企业历史数据平台、外部数据平台、客户画像、数据服务平台、智能拼表等提供数据存储支持。

2.1 基本现状

我们的HBase集群中已存在600+张表,8000个Region,存储使用26T空间。平均每个Region Server中服务了3000个Region。每个Region平均大小为1G。但我们的HBase集群存在大量小Region的问题,Region的不合理性将引发的一系列潜在问题,如下表所示:

2.2 现状分析

目前我们HBase集群Region Server单节点设置最大服务Region数量的阈值为2000个。如果按照每个Region最大存储大小为10G(HBase默认region最大存储为10G)计算,单节点可以承受2000*10G=20T空间基本可以做到单服务器存储物尽其用。因此,在HBase集群的存储空间没有充分利用的情况下(已用存储26T只占总存储空间的40%),我们HBase集群监控出现相应的告警信息-Region数量超过阈值,以及我们HBase上层应用程序也受到相应的影响-用户读写性能差。即在存储资源没有充分利用的情况下,Region数量已超过阈值,导致存储资源的浪费。
2.3 问题分析
对于HBase集群存在的种种问题,我们对问题引起的原因进行调研与分析。主要原因是三个方面:
a.应用系统在使用HBase时,在对数据不了解的情况下,创建HBase表进行预分区,且预分区不合理,产生同一个表内存在很多Region无数据或少量数据。
b.一些表随着数据量的增加,Region的不断分裂,Region数据增加;该情况属于正常情况,也是Region自动切分的特性。
c.大量数据删除或老化导致原来的大region都变成了小region,导致小region的堆积。
以上三个方面,导致HBase集群中存在大量region数量的主要原因是预分区的使用不合理与大region变为小region没有进行合并。

3、Region预分区

由于Region预分区的不合理使用是导致Region数量过多的一个重要因素,因此我们需要了解一下什么是Region预分区?为什么业内很多使用HBase的业务应用比较喜欢使用Region预分区?
Region预分区顾名思义就是预先进行分区操作。通常大批量数据往一个Region上写入时,会有写热点问题。Region大小达到阈值(默认设置为10G)时,Region会进行Split,Region Split会消耗宝贵的集群I/O资源。因此预分区能够避免大批量数据批量写入时的热点与region分裂时消耗I/O资源的问题。
我们在选择使用HBase集群作为存储前,是经过对数据的分析了解评估之后,属于HBase分布式存储系统业务场景的需求,然后对HBase的rowkey进行充分设计的,因此使用者应该是熟悉数据结构的。这时,我们都喜欢在创建HBase表时使用预分区,根据数据rowkey分布结构与每个分区内粗略评估数据量大小进行合理划分各个分区的startkey和endkey。举个例子:在我们的业务中会使用客户ID号作为rowkey,而且我们清楚了解,客户ID号均为6位以0-9开头并均匀分布于000001到999999之间,因此我们会将预分区设置为(,1)(1,2)(2,3)(3,4)(4,5)(6,7)(7,8)(8,)八个预分区并且了解每个分区的数据量都在5G-10G之间。这样该HBase表就会生成8个Region分区,并且在海量数据批量写入时,会均匀分布于这8个region中。
Region预分区使用需要同时满足以下两个条件:
a.海量数据批量写入HBase;
b.熟悉数据结构,数据集中于的rowkey段,合理划分预分区区间(startkey,endkey);

4、Region分裂

Region自动切分是HBase能够拥有良好扩张性的最重要因素之一,也必然是所有分布式系统追求无限扩展性的一副良药。SteppingSplitPolicy是HBase2.0版本中Region的默认切分策略。这种切分策略的切分阈值又发生了变化,相比IncreasingToUpperBoundRegionSplitPolicy简单了一些,依然和待分裂Region所属表在当前Region Server上的Region个数有关系,如果Region个数等于1,切分阈值为flushsize * 2,否则为MaxRegionFileSize。这种切分策略对于大集群中的大表、小表会比IncreasingToUpperBoundRegionSplitPolicy更加友好,小表不会再产生大量的小Region,而是适可而止。
                           
一般情况,若非海量数据批量写入HBase,而是流式写入,增量不大(小于10G),我们建议创建HBase表时不要进行Region预分区,让HBase根据切分策略自行分裂。
Region不进行预分区,使用HBase自动切分region的适用场景:
a.少量数据批量写入HBase;
b.流式数量写入HBase;
c.少量增量数据逐步写入HBase;

5、Region合并

Region存在预先进行分区设定和自动切分策略,就意味着我们要对产生过多的Region进行相应的应对策略。开源HBase并没有自动化检测与自动合并region功能,因此我们基于开源HBase进行二次开发,实现Region的自动检测与合并功能,以解决小Region过多引起的集群问题与业务应用使用时的读写阻塞等问题。
Region的合并设计思路其实很简单,一句话描述就是将HBase中Table中的两个或多个Region合并成一个Region的过程。
在HBase中一个表(Table)中是由有一个或多个Region组成,每一个Region都有一个StartKey值与一个EndKey值(如果进行预分区,与预分区一致),并且前一个Region的EndKey值与相邻的下一个Region的StartKey值是相等的。我们在进行Region合并前需要对每个Table中Region大小进行检测评估,将两个相邻的小Region合并成一个相对大的Region,如下图所示,Region2与Region3要合并在一起,Region2的StartKey值为1,EndKey值为2;Region3的StartKey值为1,EndKey值为2;合并其实就是将新的Region2的StartKey设置为Region2的StartKey值1,EndKey设置为Region3的EndKey值3。
我们通过自研的HBase合并工具获取每个Table中Region列表,Region列表通过StartKey与EndKey进行顺序排序,然后通过HDFS API获取到Region的存储大小;再通过配置文件进行配置合并规则进行相应的合并。合并规则配置分为设置合并大小规则和合并数量规则。
设置合并大小规则是指根据设置单表Region的存储大小来进行合并,将小于设置大小的两个相邻的region进行合并,然后通过我们编写的循环递归遍历合并算法进行合并。例如:设置合并规则为Table1的Region大小小于5G的Region进行合并,如果我们计算Region1和Region2的大小之和小于5G,Region1、Region2和Region3的大小之和大于5G,将进行Region1与Region2进行合并,合并为新的Region1;如果我们计算Region1、Region2和Region3的大小之和小于5G,我们将进行Region1与Region2进行合并为新的Region1,然后用新的Region1与Region3进行合并。
设置合并数量规则是指根据设置单表Region的数量进行合并,将按照设置目标值将两个相邻的Region进行合并,然后通过我们编写的循环递归遍历合并算法进行合并。例如:Table1表中原来为10个Region,设置合并策略设置为合并的目标数为5个,我们将会结合Region的大小进行合并,尽量保证合并后的5个Region大小均匀。
Region合并的场景主要应用于以下场景:
a.不了解数据结构情况,创建Table时过多分配预分区,产出大量小Region;
b.已存在的数据表中,进行大批量数据删除或老化,导致大量Region变小。

6、成果

基于我们的HBase集群现状分析,我们一方面使用自主研发的合并工具,另一方面通过规范Region预分区设置的规范,巧妙的结合Region的分裂与合并,将我们的HBase集群中Region数量超过阈值的告警消除,优化后由8000多个Region降低到3000多个Region,平均每个region大小为3G以上,HBase集群存储资源充分利用,在不进行扩容的情况下承载更多应用接入;现有应用的读写数据阻塞问题得到缓解,用户读写数据阻塞产生的超时现象消失;HBase集群RegionServer单点宕机或重启大大减少了Region分配的耗时,节省了HBase运维管理的成本。

7、结语

HBase是目前分布式持久化KV数据库中主流存储系统,结合其优秀的存储特性去探索更多的金融业应用场景,有效支撑金融业数字化转型是我们的使命。规范的使用与功能的优化能够有效的提高HBase的稳定性与易用性,跟进开源社区,并在开源基础之上探索出符合自己应用场景的解决方案。未来,我们将继续探索,将Hadoop体系存储与对象存储相结合,将本地存储更换成对象存储,探索在存算分离的大数据架构下,进一步提高存的下、算的完的灵活性大数据基础平台;探索使用Elasticsearch作为二级索引存储,HBase作为实际数据存储的应用场景,补充HBase查询的弊端,发挥Elasticsearch快速查询的能力,二者互利互补,提高存的多、查的快的大数据基础平台的解决方案。

本文作者:王超辉



扫码关注我们

更多精彩

数据库
文章转载自 数匠笔谈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

玻璃钢生产厂家淄博公园玻璃钢雕塑定制河北周年庆典商场美陈哪家好烟台汕头玻璃钢动物雕塑辽阳做玻璃钢雕塑的电话园林玻璃钢雕塑直销吉林玻璃钢人物雕塑价格天使雕塑玻璃钢雕塑肇庆玻璃钢公仔雕塑代理惠济区玻璃钢广场雕塑张家口卡通玻璃钢雕塑定制南浔玻璃钢花盆花器绥化玻璃钢卡通雕塑阿狸美陈卡通图片商场云南玻璃钢雕塑灯厂家供应玻璃钢雕塑工艺临高县玻璃钢雕塑厂家赣州玻璃钢花盆情人节商场情话美陈北京商业商场美陈采购玻璃钢雕塑sdhcc玻璃钢放鞭炮人物主题景观雕塑东营玻璃钢雕塑大象吉林多彩玻璃钢雕塑制作蚌埠大型玻璃钢雕塑抚州步行街玻璃钢雕塑生产厂家玻璃钢卡通雕塑造型牛重庆玻璃钢造型雕塑制作广场上玻璃钢草帽雕塑晋中玻璃钢卡通雕塑定制德州玻璃钢人物雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化