CN112148792B - 一种基于HBase的分区数据调整方法、系统及终端 - Google Patents

一种基于HBase的分区数据调整方法、系统及终端 Download PDF

Info

Publication number
CN112148792B
CN112148792B CN202010973409.7A CN202010973409A CN112148792B CN 112148792 B CN112148792 B CN 112148792B CN 202010973409 A CN202010973409 A CN 202010973409A CN 112148792 B CN112148792 B CN 112148792B
Authority
CN
China
Prior art keywords
partition
key
data
row key
adjustment
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202010973409.7A
Other languages
English (en)
Other versions
CN112148792A (zh
Inventor
朱健俊
周建二
黄勇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Peng Cheng Laboratory
Southern University of Science and Technology
Original Assignee
Peng Cheng Laboratory
Southern University of Science and Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Peng Cheng Laboratory, Southern University of Science and Technology filed Critical Peng Cheng Laboratory
Priority to CN202010973409.7A priority Critical patent/CN112148792B/zh
Publication of CN112148792A publication Critical patent/CN112148792A/zh
Application granted granted Critical
Publication of CN112148792B publication Critical patent/CN112148792B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/217Database tuning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2282Tablespace storage structures; Management thereof

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于HBase的分区数据调整方法、系统及终端,所述方法包括:搜集HBase分区内的分区数据,计算所述分区数据的倾斜程度;根据所述倾斜程度、行键所属分区的调整记录、行键相关的历史分区数据倾斜及整体分区倾斜确定行键的目标调整分区,并生成目标调整分区键;根据所述目标调整分区键对待调整行键进行修改,在所述待调整行键前添加所述目标调整分区键,完成行键分区的动态调整。本发明通基于分区内数据量的大小进行动态计算,得到分区数据量的变化,动态调整行键,对分区数据进行动态分配,同时考虑相同行键尽可能归属到相同的分区,既保证了数据查询的效率,又降低了分区数据倾斜情况,提高了系统资源利用率。

Description

一种基于HBase的分区数据调整方法、系统及终端
技术领域
本发明涉及计算机应用技术领域,尤其涉及一种基于HBase的分区数据调整方法、系统及终端。
背景技术
HBase是一个分布式的、面向列的开源数据库,是一个适合于非结构化数据存储的数据库。
用户在建立HBase表时先根据业务情况预估数据量的大小,根据数据量的大小及HBase集群的数量进行索引即行键的设计,通过行键的定义决定分区键的设计(决定行键的分区归属范围),最终完成预规划分区的设计。
这样基于预测未来的数据量大小虽然能保证短时间内的分区数据量平衡,但是其依赖对数据量的提前预测,预测准备度不能保证,一旦预测不准确,往往会导致预分区的失效,导致分区的数据倾斜问题。
因此,现有技术还有待于改进和发展。
发明内容
本发明的主要目的在于提供一种基于HBase的分区数据调整方法、系统及终端,旨在解决现有技术中分区的数据倾斜问题。
为实现上述目的,本发明提供一种基于HBase的分区数据调整方法,所述基于HBase的分区数据调整方法包括如下步骤:
搜集HBase分区内的分区数据,计算所述分区数据的倾斜程度;
根据所述倾斜程度、行键所属分区的调整记录、行键相关的历史分区数据倾斜及整体分区倾斜确定行键的目标调整分区,并生成目标调整分区键;
根据所述目标调整分区键对待调整行键进行修改,在所述待调整行键前添加所述目标调整分区键,完成行键分区的动态调整。
可选地,所述的基于HBase的分区数据调整方法,其中,所述搜集HBase分区内的分区数据,计算所述分区数据的倾斜程度,之前还包括:
在存储数据的过程中,基于工作分区组中每个分区数据量的大小,将属于工作分区内的行键数据分配至预留分区内,并将预留分区调整为工作分区组,以将工作分区组内行键数据进行动态均匀分布。
可选地,所述的基于HBase的分区数据调整方法,其中,在一定时间间隔后,将所有预留分区调整为工作分区,动态行键调整包括:
基于行键在动态调整前和调整后所归属的分区之间的数据量的大小进行行键调整,控制相同行键的数据在已分配分区中分配;
或者,基于工作分区组中每个分区数据量的大小进行行键调整,控制所有RegionServer上的数据分布均衡;
分配后的行键动态调整到行键工作分区内或工作分区组中其他工作分区。
可选地,所述的基于HBase的分区数据调整方法,其中,所述搜集HBase分区内的分区数据,计算所述分区数据的倾斜程度,包括:
输入分区数据表,输出每个分区内行键的列数量。
可选地,所述的基于HBase的分区数据调整方法,其中,所述根据所述倾斜程度、行键所属分区的调整记录、行键相关的历史分区数据倾斜及整体分区倾斜确定行键的目标调整分区,并生成目标调整分区键,包括:
输入每个分区行键的列数量和行键特征值,输出每个行键分区前缀列表。
可选地,所述的基于HBase的分区数据调整方法,其中,所述根据所述目标调整分区键对待调整行键进行修改,在所述待调整行键前添加所述目标调整分区键,完成行键分区的动态调整,包括:
输入每个行键分区前缀列表和行键值,输出行键前缀列表和行键值。
此外,为实现上述目的,本发明还提供一种基于HBase的分区数据调整系统,其中,所述基于HBase的分区数据调整系统包括:
分区数据搜集模块,用于搜集HBase分区内的分区数据,计算所述分区数据的倾斜程度;
行键分区决策模块,用于根据所述倾斜程度、行键所属分区的调整记录、行键相关的历史分区数据倾斜及整体分区倾斜确定行键的目标调整分区,并生成目标调整分区键;
行键生成模块,用于根据所述目标调整分区键对待调整行键进行修改,在所述待调整行键前添加所述目标调整分区键,完成行键分区的动态调整。
可选地,所述的基于HBase的分区数据调整系统,其中,所述分区数据搜集模块还包括:
行键清洗单元,用于对每个分区内每个行键进行判断,如果为加上前缀的行键,则剥离行键前缀;
统计单元,用于对每个分区内每个行键数据量大小进行统计;
存储单元,用于对统计后的行键数据量进行存储。
此外,为实现上述目的,本发明还提供一种终端,其中,所述终端包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的基于HBase的分区数据调整程序,所述基于HBase的分区数据调整程序被所述处理器执行时实现如上所述的基于HBase的分区数据调整方法的步骤。
此外,为实现上述目的,本发明还提供一种存储介质,其中,所述存储介质存储有基于HBase的分区数据调整程序,所述基于HBase的分区数据调整程序被处理器执行时实现如上所述的基于HBase的分区数据调整方法的步骤。
本发明通过搜集HBase分区内的分区数据,计算所述分区数据的倾斜程度;根据所述倾斜程度、行键所属分区的调整记录、行键相关的历史分区数据倾斜及整体分区倾斜确定行键的目标调整分区,并生成目标调整分区键;根据所述目标调整分区键对待调整行键进行修改,在所述待调整行键前添加所述目标调整分区键,完成行键分区的动态调整。本发明通过动态调整行键分区,无须预先准确估计未来数据量的变化,基于分区内数据量的大小进行动态计算,得到分区数据量的变化,动态调整行键,对分区数据进行动态分配,同时考虑相同行键尽可能归属到相同的分区,既保证了数据查询的效率,又降低了分区数据倾斜情况,提高了系统资源利用率。
附图说明
图1是本发明基于HBase的分区数据调整方法的较佳实施例的流程图;
图2是本发明基于HBase的分区数据调整方法的较佳实施例中行键动态调整原理图;
图3是本发明基于HBase的分区数据调整方法的较佳实施例中动态行键调整流程图;
图4是本发明基于HBase的分区数据调整系统的较佳实施例的原理示意图;
图5为本发明终端的较佳实施例的运行环境示意图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
首先,HBase是根据列族来存储数据的,列族下面可以有非常多的列,列族在创建表的时候就必须指定。下面是一个关系型数据库的表和HBase数据库的表:
(1)关系型数据库的表:
其中,RDBMS(Relational Database Management System,关系数据库管理系统)是指包括相互联系的逻辑组织和存取这些数据的一套程序(数据库管理系统软件)。关系数据库管理系统就是管理关系数据库,并将数据逻辑组织的系统。
其中,Primary key表示主关键字,是表中的一个或多个字段,它的值用于唯一的标识表中的某一条记录。在两个表的关系中,主关键字用来在一个表中引用来自于另一个表中的特定记录。主关键字是一种唯一关键字,表定义的一部分。一个表的主键可以由多个关键字共同组成,并且主关键字的列不能包含空值;column表示列的意思。
(2)HBase数据库的表(CF为Column Family-列族):
其中,Rowkey是一个二进制码流,可以是任意字符串,最大长度为64kb,实际应用中一般为10-100byte,以byte[]形式保存,一般设计成定长。
进一步地,HBase数据库是一种NoSQL数据库(泛指非关系型的数据库),HBase只有一个索引,即行键(Rowkey,下文以行键进行说明),HBase查询只能通过其行键来查询(行键用来表示唯一一行记录)。
访问HBase table中的行,只有三种方式:通过单个行键访问(get)、通过行键的range(正则)(like)和全表扫描(scan)。
在HBase内部,Rowkey保存为字节数组。存储时,HBase中的数据是按照行键的ASCII字典顺序(byte order)进行全局排序存储。
行键排序时会先比对两个行键的第一个字节,如果相同,然后会比对第二个字节,依次类推,对比到第X个字节时,已经超出了其中一个行键的长度,短的行键排在前面。
ASCII字典序举例:假如有5个行键:“aj”,“bj”,“dk”,“123”,“1234”,按ASCII字典排序后的结果为:“123”,“1234”,“ai”,“bj”,“dk”。
RegionServer是HBase中最核心的模块,负责存储HBase的实际数据,内部管理分配给它的Region对象以及负责处理Region的分片。
Region是HBase数据存储和管理的基本单位,HBase会根据行键值将表切分成不同的Region,存储在RegionServer中。在一个RegionServer中可以有多个不同的Region。
HBase默认建表时有一个Region,这个Region的行键是没有边界的,即没有startkey和endkey,在数据写入时,所有数据都会写入这个默认的Region,随着数据量的不断增加,此Region已经不能承受不断增长的数据量,会进行拆分,分成2个Region,以此类推。
在此过程中,会产生两个问题:
一是数据往一个Region上写,会出现写热点问题(就是RegionServe节点上有多个Region,当大量的数据写入一个RegionServer的某个Region内,会造成少数RegionServer的读/写请求过多、负载过大,而其他RegionServer负载却很小,就造成了“热点”现象);
二是Region split会消耗宝贵的集群I/O资源。
基于此,可以控制在建表的时候,创建多个空Region,并确定每个Region的起始和终止行键,这样只要行键设计能均匀的命中各个Rregion,就不会存在写热点问题。自然split的几率也会大大降低,像这样预先创建HBase表分区的方式,称之为预分区。
在进行预分区时,有如下2种方式:
(1)指定预分区个数,由HBase自动确定分区之间的分割点;
(2)指定分区键,即每个Region的endkey,endkey一般最后带“|”,是因为在ASCII码中,“|”的值是124,大于所有的数字和字母等符号,当然也可以用“~”(ASCII-126)。
例如,分区键指定如下:
6个分区的分区键为分别为:bj|,gz|,mz|,sz|,z0|;则每个分区的startkey和endkey如下表所示:
序号 startkey endkey
分区1 bj|(不包括)
分区2 bj| gz|(不包括)
分区3 gz| mz|(不包括)
分区4 mz| sz|(不包括)
分区5 sz| z0|(不包括)
分区6 z0|
如果有行键值为“am”开头的数据进入,HBase会根据字典序进行比较,被存储在分区1中,以此类推。
所以在现有技术中,用户在建立HBase表时先根据业务情况预估数据量的大小,根据数据量的大小及HBase集群的数量进行索引即行键的设计,通过行键的定义决定分区键的设计(决定行键的分区归属范围),最终完成预规划分区的设计;但是这样基于预测未来的数据量大小虽然能保证短时间内的分区数据量平衡,但是其依赖对数据量的提前预测,预测准备度不能保证,一旦预测不准确,往往会导致预分区的失效,导致分区的数据倾斜(数据在Region中分布不均匀,导致有些Region数据量过大,而另外一部分Region数据量过小的情况)问题。
因此,为了克服现有技术存在的缺陷,本发明公开了较佳实施例所述的基于HBase的分区数据调整方法,如图1所示,所述基于HBase的分区数据调整方法包括以下步骤:
步骤S10、搜集HBase分区内的分区数据,计算所述分区数据的倾斜程度(通过分区失衡指数和行键失衡指数、TopN行键失衡指数这3个指数来进行计算,例如某个分区失衡指数大于50%,说明这个分区数据量过大,该阈值可以根据需求设定);
步骤S20、根据所述倾斜程度、行键所属分区的调整记录、行键相关的历史分区数据倾斜及整体分区倾斜确定行键的目标调整分区,并生成目标调整分区键;
步骤S30、根据所述目标调整分区键对待调整行键进行修改,在所述待调整行键前添加所述目标调整分区键,完成行键分区的动态调整。
本发明中,无须预先准确估计未来数据量的变化,基于分区内数据量的大小进行动态计算,得到分区数据量的变化,动态调整行键,对分区数据进行动态分配,同时考虑相同行键尽可能归属到相同的分区,既保证了数据查询的效率,又降低了分区数据倾斜情况,提高了系统资源利用率。
具体地,预分区阶段分为工作分区和预留分区,工作分区构成工作分区组,其中,工作分区定义为规划用来存储数据的Region,预留分区定义为为后续数据存储预留的Rregion。
在初始阶段,在存储数据(HBase存储的数据是非常稀疏的数据即非结构化或者半结构化的数据,例如交通信息、物流信息、交易数据、聊天记录等列字段)的过程中,基于工作分区组中每个分区数据量的大小,对行键进行动态调整,将原从属于工作分区内的行键数据进行动态调整,分配至预留分区内,同时将预留分区调整为工作分区组,这样将工作分区组内行键数据进行动态均匀分布。
在一定时间间隔后,将所有预留分区调整为工作分区,此时动态行键调整基于以下两方面:
(1)基于行键在动态调整前和调整后所归属的分区(定义为行键工作分区,以下均按行键工作分区)之间的数据量的大小进行行键调整,控制相同行键的数据在已分配分区中分配;
(2)基于工作分区组中每个分区数据量的大小进行行键调整,控制所有RegionServer上的数据分布均衡;
以上第一点的调整机制目的是尽量使相同行键的数据在已分配分区中分配,第二点的调整机制目的是保证所有RegionServer上数据分布均衡,两点调整机制可以按照实际策略分配不同的权重大小进行调整。分配后的行键会动态调整到行键工作分区内或工作分区组中其他工作分区;通过行键的动态调整既保证了行键的相关性得到保证,也减少了分区之间的数据倾斜,提高了整体的资源使用率。
进一步地,如图2所示,本发明的分区数据调整方案分为分区数据搜集、行键分区决策、行键生成三大部分。
具体地,分区数据搜集可以通过分区数据搜集模块来完成,分区数据搜集模块负责HBase分区内数据量搜集、行键清洗、统计和存储功能。
其中,分区内数据量搜集主体可以由HMaster负责,也可以自定义模块在数据写入时统计搜集,搜集范围不限于每个分区内行键数量,搜集时间范围可以实时或者自定义;行键清洗功能负责对每个分区内每个行键进行判断,如果是加上前缀(行键分区决策模块给附加的行键前缀)的行键,则剥离行键前缀;统计功能负责对每个分区内每个行键数据量大小进行统计;存储功能负责对统计后的行键数据量进行存储,防止数据丢失,降低内存使用。
具体地,行键分区决策可以通过行键分区决策模块来完成,行键分区决策模块负责分析分区数据,依据行键调整前后所归属每个分区数据量大小、HBase Table的每个分区数据量大小的权重,决定行键的分区归属,生成行键分区特征值并存储,同时输出行键分区前缀给行键生成模块。
也就是说,行键生成可以通过行键生成模块来完成,行键生成模块基于行键决策模块生成的行键分区前缀对数据生成行键。
进一步地,如图3所示,详细介绍分区数据搜集、行键分区决策、行键生成这三个步骤的流程:
(1)分区数据搜集(分区数据搜集模块完成)
统计每个分区内的行键的列数量,并完成相关计算数据的存储工作。
输入:分区数据表;
输出:每个分区内行键的列数量。
(2)行键分区决策(行键分区决策模块完成)
计算分区失衡指数M1、行键失衡指数M2、TopN行键失衡指数M3、数据倾斜分区P1,最轻负载分区P2,获取最新的行键特征值ADk,并根据调整策略生成行键特征值,输出给行键生成模块。
其中,行键失衡指数指的是每个行键数据量的大小和总数据量占比,表示每个行键的数据量大小;TopN行键失衡指数指的是TopN个行键数据量的大小和总数据量占比,表示TopN个行键的数据量大小;分区失衡指数为每个分区数据量和所有数据量的占比,表示每个分区数据量大小;分区失衡指数是大的范围,分区内行键失衡指数是小的范围。
若分区失衡指数M1达到分区失衡阈值,同时行键失衡指数M2或者TopN行键失衡指数M3大于行键失衡阈值时,行键分区决策模块即进行行键特征值生成。生成办法如下:
第一次调整:
(1)M2大于阈值情况:
行键分区决策模块依据M2得到最大值的行键K,获取初始行键特征值ADk,因为ADk中的分区列表信息初始值为空,则生成行键特征值ADk={K:(P1,P2)},K为行键,P1为初始分区,P2为目标调整分区,后续每次符合调整,则追加分区号。
(2)M3大于阈值情况:
行键分区决策模块依据M3得到行键组合{K1,K2..,KN},获取初始行键特征值{ADk1..ADkn},因为{ADk1..ADkn}中的分区列表信息初始值为空,则生成每个行键特征值{ADk1..ADkn}={ADk1={K1:(P1,P2)},ADkn={Kn:(P1,P2)}},K1为行键,P1为初始分区,P2为目标调整分区,后续每次符合调整,则追加分区号。
第二次调整:
假设此时数据倾斜分区P2,最轻负载分区P3。
(1)M2大于阈值情况:
行键分区决策模块依据M2得到最大值的行键K,获取初始行键特征值ADk={K:(P1,P2)},则获得K的分区列表{P1,P2},去除当前数据倾斜分区P2,则分区列表剩余P1,使用自定义权重指数对分区P1及P3进行失衡指数计算,得到失衡指数结果,取失衡指数小的分区作为目标分区,这里假设为P1;则生成行键特征值ADk={K:(P1,P2,P1)},K为行键,P1为初始分区,P2为中间调整分区,P1为目标调整分区,后续每次符合调整,则追加分区号。
(2)M3大于阈值情况:
行键分区决策模块依据M3得到行键组合{K1,K2..,KN},获取初始行键特征值{ADk1..ADkn}={ADk1={K1:(P1,P2)},ADkn={Kn:(P1,P2)}},则获得K的分区列表{P1,P2},去除当前数据倾斜分区P2,则分区列表剩余P1;使用自定义权重指数对分区P1及P3进行失衡指数计算,得到失衡指数结果,取失衡指数小的分区作为目标分区,这里假设为P1,则生成每个行键特征值ADk1={K1:(P1,P2,P1)},K1为行键,P1为初始分区,P2为中间调整分区,P1为目标调整分区,后续每次符合调整,则追加分区号。
行键特征值ADk={K:(P1,P2,P1)}生成后可存入内存数据库或其他存储模块。
行键前缀生成:根据行键特征值ADk={K:(P1,P2,P1)},得到行键的分区列表后,根据以下条件判断:
列表中第一个值代表初始分区P1,列表中最后一个值代表目标分区P1,两者是否一致,如果一致,则不进行行键动态调整,行键前缀为空;如果不一致,则查询P1的分区起始键T(如果是P1是第一个分区,定义起始键为ASCII码中较小的值,例如“$$|”);最终行键前缀输出结果为键值对{ADPk1..ADPkn}={ADPk1={K1:“”},..,ADPkn={Kn:“T|”}},其中“|”作为特殊字符区分调整的行键与本归属于该分区的行键。
输入:每个分区行键的列数量,行键特征值ADk;
输出:每个行键分区前缀列表,格式为{ADPk1..ADPkn}={ADPk1={K1:“”},..,ADPkn={Kn:“T|”}},行键分区前缀为键值对组,键为初始行键值,值为前缀特征值。
(3)行键生成(行键生成完成)
行键生成模块得到行键分区前缀列表{ADPk1..ADPkn}={ADPk1={K1:“”},..,ADPkn={Kn:“T|”}},根据前缀值,在数据的行键前加上前缀,改变数据的存储分区。
输入:每个行键分区前缀列表,行键值;
输出:行键前缀列表+行键值。
下面以一个具体的例子来进行说明:
例如:初始的分区键为bj|,gz|,mz|,sz|,z0|分配6个分区,4个工作分区,2个预留分区,其中工作分区:分区1为-bj|记为WP1(行键起始值“$$”),分区2为bj|--gz|记为WP2(行键起始值“bj”),分区3为gz|--mz|记为WP3(行键起始值“gz”),分区4为mz|--sz|记为WP4(行键起始值“mz”);预留分区:分区为sz|--z0|记为RP1(行键起始值“sz”),分区z0|--记为RP2(行键起始值“z0”)。
初始状态,初始行键特征值ADxxx均为空;
归属于WP1的行键集合记为{aj0,aj1,aj2…bin};
归属于WP2的行键集合记为{bk0,bk1,bk2…gyn};
归属于WP3的行键集合记为{ha0,ha1,ha2…myn};
归属于WP4的行键集合记为{na0,na1,na2…syn};
运行一段时间后,分区数据搜集得到以下信息:
CountWP1={aj0,aj1,aj2…bin}:{1,2,3…6},SumWP1=1500;
CountWP2={bk0,bk1,bk2…gyn}:{2,4,6…2},SumWP2=250;
CountWP3={ha0,ha1,ha2…myn}:{3,1,1…4},SumWP3=350;
CountWP4={na0,na1,na2…syn}:{12,150,9…1106},SumWP4=6250;
CountRP1={}:{},SumRP1=0;
CountRP2={}:{},SumRP2=0;
则行键分区决策得到分区数据搜集模块的信息后,进行如下操作:
(1)计算分区间失衡指数,得到数据倾斜分区WP4及最轻负载分区RP1;
(2)根据失衡指数选择最大值的分区WP4,计算WP4行键失衡指数及TopN失衡指数;
KUBna0=Countna0/SumWP4=12/6250=0.002;
KUBna1=Countna1/SumWP4=150/6250=0.024;
KUBna2=Countna2/SumWP4=9/6250=0.001;
KUBsyn=Countsyn/SumWP4=1106/6250=0.177;
KUBTOPN=CountTOPN/SumWP4=3000/6250=0.48。
(3)根据行键失衡调整阈值ThreadKUB及ThreadKUBTOPN确定进行动态调整的行键为syn;
(4)输出数据行键特征值Adsyn={syn:(WP4,RP1)},格式说明:syn为行键,WP4为未调整前分区,RP1为目标分区。
根据行键特征值Adsyn的值,判断RP1≠WP4,则查询获取RP1的分区键,得到行键起始值sz,生成行键前缀列表ADPsyn={syn:“sz|”},输出给行键生成模块。
行键生成模块得到ADPsyn的信息后,获取行键分区前缀“sz|”,将“sz|”加入在syn前,合成新的行键sz|syn,至此sz的行键会进入RP1分区存储。
经过一段时间后,表的数据如下:
归属于WP1的行键集合记为{aj0,aj1,aj2…bin};
归属于WP2的行键集合记为{bk0,bk1,bk2…gyn};
归属于WP3的行键集合记为{ha0,ha1,ha2…myn};
归属于WP4的行键集合记为{na0,na1,na2…syn};
归属于RP0的行键集合记为{sz|aj0,sz|bk1,sz|ha1…sz|syn};
归属于RP1的行键集合记为{z0|aj1,z0|bk1,z0|ha2…z0|ttn}。
运行一段时间后,分区数据搜集进行行键清洗后得到以下信息:
CountWP1={aj0,aj1,aj2…bin}:{100,200,300…600},SumWP1=15000;
CountWP2={bk0,bk1,bk2…gyn}:{20,40,60…200},SumWP2=25000;
CountWP3={ha0,ha1,ha2…myn}:{30,100,100…400},SumWP3=35000;
CountWP4={na0,na1,na2…syn}:{1200,15000,900…1106},SumWP4=62500。
搜集模块根据特殊标记“|”进行行键清洗后上报数据统计结果:
CountRP1={aj0,bk1,ha1…syn}:{300,1000,1000…4000},SumRP1=80000;
CountRP2={aj1,bk1,ha2…ttn}:{130,1100,900…1400},SumRP2=25000;
则行键分区决策得到分区数据搜集模块的信息后,进行如下操作:
(1)计算分区间失衡指数,得到数据倾斜分区RP1(MAX:0.33)及最轻负载分区WP1(MIN:0.062);
(2)根据失衡指数选择最大值的分区RP1,计算RP1行键失衡指数及TopN失衡指数;
KUBaj0=Countaj0/SumRP1=300/80000=0.004;
KUBbk1=Countbk1/SumRP1=1000/80000=0.013;
KUBha1=Countha1/SumRP1=1000/80000=0.013;
KUBsyn=Countsyn/SumRP1=4000/80000=0.005;
KUBTOPN=CountTOPN/SumRP1=30000/80000=0.375。
(3)根据行键失衡调整阈值ThreadKUB及ThreadKUBTOPN确定进行动态调整的行键为{bk1,ha1,syn}。
(4)根据第(1)步中的最轻负载分区WP1,根据历史行键特征值Adsyn={syn:(WP4,RP1)}得到行键syn的归属分区(WP4和RP1),除去待调整RP1分区,得到备选目标分区WP1和WP4,根据权重计算目标分区,此处最轻负载系数T1设为0.9,历史分区系数T2设为0.1(T1和T2可以自定义,本例策略为尽可能将行键平均分配到所有分区中);
KWP1=T1*SumWP1
/(SumWP1+SumWP4)=0.9*15000/(15000+62500)=0.17
KWP4=T2*SumWP4
/(SumWP1+SumWP4)=0.1*62500/(15000+62500)=0.08;
最终得到目标分区WP1。
(5)输出数据Adsyn={syn:(WP4,RP1,WP1)},格式说明:syn为行键,第一个WP4为未调整前分区,RP1为中间分区,最后一个WP1为目标分区;其他行键分区特征值以此类推。
(6)根据行键特征值Adsyn的值,判断WP1≠WP4,则查询获取WP1的分区键,得到行键起始值$$,生成行键前缀列表ADPsyn={syn:“$$|”},输出给行键生成模块。
行键生成模块得到ADPsyn的信息后,获取行键分区前缀“$$|”,将“$$|”加入在syn前,合成新的行键$$|syn,至此sz的行键会进入WP1分区存储。
本发明在预分区的基础上,利用行键的动态调整方式,实现了基于分区数据量大小进行行键动态调整机制;无须准确预估未来的数据量,根据分区数据量的大小,动态的调整行键,均衡的分配分区数据量,减少分区数据倾斜,提高整体的资源使用率。
进一步地,如图4所示,基于上述基于HBase的分区数据调整方法,本发明还相应提供了一种基于HBase的分区数据调整系统,所述基于HBase的分区数据调整系统包括:
分区数据搜集模块11,用于搜集HBase分区内的分区数据,计算所述分区数据的倾斜程度;行键分区决策模块12,用于根据所述倾斜程度、行键所属分区的调整记录、行键相关的历史分区数据倾斜及整体分区倾斜确定行键的目标调整分区,并生成目标调整分区键;行键生成模块13,用于根据所述目标调整分区键对待调整行键进行修改,在所述待调整行键前添加所述目标调整分区键,完成行键分区的动态调整。
其中,所述分区数据搜集模块11还包括:行键清洗单元,用于对每个分区内每个行键进行判断,如果为加上前缀的行键,则剥离行键前缀;统计单元,用于对每个分区内每个行键数据量大小进行统计;存储单元,用于对统计后的行键数据量进行存储。
本发明根据HBase的每个分区中的行键数量或行键数量增长率变化,动态调整行键,动态分配HBase分区的数据量,在无须人工调整的情况下,可以降低分区数据倾斜,提高HBase查询效率。
进一步地,如图5所示,基于上述基于HBase的分区数据调整方法和系统,本发明还相应提供了一种终端,所述终端包括处理器10、存储器20及显示器30。图5仅示出了终端的部分组件,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
所述存储器20在一些实施例中可以是所述终端的内部存储单元,例如终端的硬盘或内存。所述存储器20在另一些实施例中也可以是所述终端的外部存储设备,例如所述终端上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(SecureDigital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器20还可以既包括所述终端的内部存储单元也包括外部存储设备。所述存储器20用于存储安装于所述终端的应用软件及各类数据,例如所述安装终端的程序代码等。所述存储器20还可以用于暂时地存储已经输出或者将要输出的数据。在一实施例中,存储器20上存储有基于HBase的分区数据调整程序40,该基于HBase的分区数据调整程序40可被处理器10所执行,从而实现本申请中基于HBase的分区数据调整方法。
所述处理器10在一些实施例中可以是一中央处理器(Central Processing Unit,CPU),微处理器或其他数据处理芯片,用于运行所述存储器20中存储的程序代码或处理数据,例如执行所述基于HBase的分区数据调整方法等。
所述显示器30在一些实施例中可以是LED显示器、液晶显示器、触控式液晶显示器以及OLED(Organic Light-Emitting Diode,有机发光二极管)触摸器等。所述显示器30用于显示在所述终端的信息以及用于显示可视化的用户界面。所述终端的部件10-30通过系统总线相互通信。
在一实施例中,当处理器10执行所述存储器20中基于HBase的分区数据调整程序40时实现以下步骤:
搜集HBase分区内的分区数据,计算所述分区数据的倾斜程度;
根据所述倾斜程度、行键所属分区的调整记录、行键相关的历史分区数据倾斜及整体分区倾斜确定行键的目标调整分区,并生成目标调整分区键;
根据所述目标调整分区键对待调整行键进行修改,在所述待调整行键前添加所述目标调整分区键,完成行键分区的动态调整。
其中,所述搜集HBase分区内的分区数据,计算所述分区数据的倾斜程度,之前还包括:
在存储数据的过程中,基于工作分区组中每个分区数据量的大小,将属于工作分区内的行键数据分配至预留分区内,并将预留分区调整为工作分区组,以将工作分区组内行键数据进行动态均匀分布。
其中,在一定时间间隔后,将所有预留分区调整为工作分区,动态行键调整包括:
基于行键在动态调整前和调整后所归属的分区之间的数据量的大小进行行键调整,控制相同行键的数据在已分配分区中分配;
或者,基于工作分区组中每个分区数据量的大小进行行键调整,控制所有RegionServer上的数据分布均衡;
分配后的行键动态调整到行键工作分区内或工作分区组中其他工作分区。
其中,所述搜集HBase分区内的分区数据,计算所述分区数据的倾斜程度,包括:
输入分区数据表,输出每个分区内行键的列数量。
其中,所述根据所述倾斜程度、行键所属分区的调整记录、行键相关的历史分区数据倾斜及整体分区倾斜确定行键的目标调整分区,并生成目标调整分区键,包括:
输入每个分区行键的列数量和行键特征值,输出每个行键分区前缀列表。
其中,所述根据所述目标调整分区键对待调整行键进行修改,在所述待调整行键前添加所述目标调整分区键,完成行键分区的动态调整,包括:
输入每个行键分区前缀列表和行键值,输出行键前缀列表和行键值。
本发明还提供一种存储介质,其中,所述存储介质存储有基于HBase的分区数据调整程序,所述基于HBase的分区数据调整程序被处理器执行时实现如上所述的基于HBase的分区数据调整方法的步骤。
综上所述,本发明提供一种基于HBase的分区数据调整方法、系统及终端,所述方法包括:搜集HBase分区内的分区数据,计算所述分区数据的倾斜程度;根据所述倾斜程度、行键所属分区的调整记录、行键相关的历史分区数据倾斜及整体分区倾斜确定行键的目标调整分区,并生成目标调整分区键;根据所述目标调整分区键对待调整行键进行修改,在所述待调整行键前添加所述目标调整分区键,完成行键分区的动态调整。本发明通过动态调整行键分区,无须预先准确估计未来数据量的变化,基于分区内数据量的大小进行动态计算,得到分区数据量的变化,动态调整行键,对分区数据进行动态分配,同时考虑相同行键尽可能归属到相同的分区,既保证了数据查询的效率,又降低了分区数据倾斜情况,提高了系统资源利用率。
当然,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关硬件(如处理器,控制器等)来完成,所述的程序可存储于一计算机可读取的存储介质中,所述程序在执行时可包括如上述各方法实施例的流程。其中所述的存储介质可为存储器、磁碟、光盘等。
应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。

Claims (8)

1.一种基于HBase的分区数据调整方法,其特征在于,所述基于HBase的分区数据调整方法包括:
搜集HBase分区内的分区数据,计算所述分区数据的倾斜程度,所述分区数据的倾斜程度根据分区失衡指数和行键失衡指数、TopN行键失衡指数来进行计算;
所述搜集HBase分区内的分区数据,计算所述分区数据的倾斜程度,包括:
输入分区数据表,输出每个分区内行键的列数量;
根据所述倾斜程度、行键所属分区的调整记录、行键相关的历史分区数据倾斜及整体分区倾斜确定行键的目标调整分区,并生成目标调整分区键;
所述根据所述倾斜程度、行键所属分区的调整记录、行键相关的历史分区数据倾斜及整体分区倾斜确定行键的目标调整分区,并生成目标调整分区键,包括:
输入每个分区行键的列数量和行键特征值,输出每个行键分区前缀列表;计算分区失衡指数、行键失衡指数、TopN行键失衡指数、数据倾斜分区、最轻负载分区,获取最新的行键特征值,并根据调整策略生成行键特征值;
根据所述目标调整分区键对待调整行键进行修改,在所述待调整行键前添加所述目标调整分区键,完成行键分区的动态调整。
2.根据权利要求1所述的基于HBase的分区数据调整方法,其特征在于,所述搜集HBase分区内的分区数据,计算所述分区数据的倾斜程度,之前还包括:
在存储数据的过程中,基于工作分区组中每个分区数据量的大小,将属于工作分区内的行键数据分配至预留分区内,并将预留分区调整为工作分区组,以将工作分区组内行键数据进行动态均匀分布。
3.根据权利要求2所述的基于HBase的分区数据调整方法,其特征在于,在一定时间间隔后,将所有预留分区调整为工作分区,动态行键调整包括:
基于行键在动态调整前和调整后所归属的分区之间的数据量的大小进行行键调整,控制相同行键的数据在已分配分区中分配;
或者,基于工作分区组中每个分区数据量的大小进行行键调整,控制所有RegionServer上的数据分布均衡;
分配后的行键动态调整到行键工作分区内或工作分区组中其他工作分区。
4.根据权利要求1所述的基于HBase的分区数据调整方法,其特征在于,所述根据所述目标调整分区键对待调整行键进行修改,在所述待调整行键前添加所述目标调整分区键,完成行键分区的动态调整,包括:
输入每个行键分区前缀列表和行键值,输出行键前缀列表和行键值。
5.一种基于HBase的分区数据调整系统,其特征在于,所述基于HBase的分区数据调整系统包括:
分区数据搜集模块,用于搜集HBase分区内的分区数据,计算所述分区数据的倾斜程度,所述分区数据的倾斜程度根据分区失衡指数和行键失衡指数、TopN行键失衡指数来进行计算;
所述搜集HBase分区内的分区数据,计算所述分区数据的倾斜程度,包括:
输入分区数据表,输出每个分区内行键的列数量;
行键分区决策模块,用于根据所述倾斜程度、行键所属分区的调整记录、行键相关的历史分区数据倾斜及整体分区倾斜确定行键的目标调整分区,并生成目标调整分区键;
所述根据所述倾斜程度、行键所属分区的调整记录、行键相关的历史分区数据倾斜及整体分区倾斜确定行键的目标调整分区,并生成目标调整分区键,包括:
输入每个分区行键的列数量和行键特征值,输出每个行键分区前缀列表;计算分区失衡指数、行键失衡指数、TopN行键失衡指数、数据倾斜分区、最轻负载分区,获取最新的行键特征值,并根据调整策略生成行键特征值;
行键生成模块,用于根据所述目标调整分区键对待调整行键进行修改,在所述待调整行键前添加所述目标调整分区键,完成行键分区的动态调整。
6.根据权利要求5所述的基于HBase的分区数据调整系统,其特征在于,所述分区数据搜集模块还包括:
行键清洗单元,用于对每个分区内每个行键进行判断,如果为加上前缀的行键,则剥离行键前缀;
统计单元,用于对每个分区内每个行键数据量大小进行统计;
存储单元,用于对统计后的行键数据量进行存储。
7.一种终端,其特征在于,所述终端包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的基于HBase的分区数据调整程序,所述基于HBase的分区数据调整程序被所述处理器执行时实现如权利要求1-4任一项所述的基于HBase的分区数据调整方法的步骤。
8.一种存储介质,其特征在于,所述存储介质存储有基于HBase的分区数据调整程序,所述基于HBase的分区数据调整程序被处理器执行时实现如权利要求1-4任一项所述的基于HBase的分区数据调整方法的步骤。
CN202010973409.7A 2020-09-16 2020-09-16 一种基于HBase的分区数据调整方法、系统及终端 Active CN112148792B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010973409.7A CN112148792B (zh) 2020-09-16 2020-09-16 一种基于HBase的分区数据调整方法、系统及终端

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010973409.7A CN112148792B (zh) 2020-09-16 2020-09-16 一种基于HBase的分区数据调整方法、系统及终端

Publications (2)

Publication Number Publication Date
CN112148792A CN112148792A (zh) 2020-12-29
CN112148792B true CN112148792B (zh) 2024-04-12

Family

ID=73893733

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010973409.7A Active CN112148792B (zh) 2020-09-16 2020-09-16 一种基于HBase的分区数据调整方法、系统及终端

Country Status (1)

Country Link
CN (1) CN112148792B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114816255A (zh) * 2022-04-26 2022-07-29 平安普惠企业管理有限公司 基于Spark的文件处理方法、装置、设备及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103942289A (zh) * 2014-04-12 2014-07-23 广西师范大学 一种Hadoop上面向范围查询的内存缓存方法
CN107329837A (zh) * 2016-09-21 2017-11-07 广州特道信息科技有限公司 一种负载均衡的方法和单元、分布式NewSQL数据库系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009010618A (ja) * 2007-06-27 2009-01-15 Canon Inc 画像領域指定装置及びその制御方法、システム

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103942289A (zh) * 2014-04-12 2014-07-23 广西师范大学 一种Hadoop上面向范围查询的内存缓存方法
CN107329837A (zh) * 2016-09-21 2017-11-07 广州特道信息科技有限公司 一种负载均衡的方法和单元、分布式NewSQL数据库系统
CN107368575A (zh) * 2016-09-21 2017-11-21 广州特道信息科技有限公司 一种负载均衡的分布式NewSQL数据库系统

Also Published As

Publication number Publication date
CN112148792A (zh) 2020-12-29

Similar Documents

Publication Publication Date Title
US12105712B2 (en) Distinct value estimation for query planning
EP2924594B1 (en) Data encoding and corresponding data structure in a column-store database
EP3098730B1 (en) Aggregating database entries by hashing
US8726290B2 (en) System and/or method for balancing allocation of data among reduce processes by reallocation
EP3367251A1 (en) Storage system and solid state hard disk
CN110147407B (zh) 一种数据处理方法、装置及数据库管理服务器
JP6376865B2 (ja) 並列ツリー・ベースの予測のための、コンピュータにより実行される方法、ストレージ媒体、およびコンピュータ・システム
US20160203235A1 (en) Striping of directed graphs and nodes with improved functionality
US20190121901A1 (en) Database Sharding
US20150112966A1 (en) Database management system, computer, and database management method
WO2017019879A1 (en) Multi-query optimization
US20160350302A1 (en) Dynamically splitting a range of a node in a distributed hash table
US8150836B2 (en) System, method, and computer-readable medium for reducing row redistribution costs for parallel join operations
CN109710190B (zh) 一种数据存储方法、装置、设备及存储介质
CN102362273A (zh) 用于关系数据库系统中高效数据存取的动态散列表
CN105989015B (zh) 一种数据库扩容方法和装置以及访问数据库的方法和装置
CN102760143A (zh) 一种在数据库系统中动态整合执行结构的方法和装置
US9483377B2 (en) Apparatus and method for enabling a user to monitor skew of resource usage across different components of a large database system
CN112148792B (zh) 一种基于HBase的分区数据调整方法、系统及终端
CN110362404B (zh) 一种基于sql的资源分配方法、装置和电子设备
CN108776698B (zh) 一种基于Spark的抗偏斜的数据分片方法
EP2662783A1 (en) Data archiving approach leveraging database layer functionality
CN104778088A (zh) 一种基于减少进程间通信开销的并行i/o优化方法与系统
CN103207835A (zh) 一种通过自适应的Range分区存储海量数据的方法
US12026162B2 (en) Data query method and apparatus, computing device, and storage medium

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant