CN104376047A - 一种基于HBase的大表join方法 - Google Patents

一种基于HBase的大表join方法 Download PDF

Info

Publication number
CN104376047A
CN104376047A CN201410584560.6A CN201410584560A CN104376047A CN 104376047 A CN104376047 A CN 104376047A CN 201410584560 A CN201410584560 A CN 201410584560A CN 104376047 A CN104376047 A CN 104376047A
Authority
CN
China
Prior art keywords
hbase
data
region
join
distributed
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.)
Granted
Application number
CN201410584560.6A
Other languages
English (en)
Other versions
CN104376047B (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.)
Inspur Electronic Information Industry Co Ltd
Original Assignee
Langchao Electronic Information Industry Co Ltd
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 Langchao Electronic Information Industry Co Ltd filed Critical Langchao Electronic Information Industry Co Ltd
Priority to CN201410584560.6A priority Critical patent/CN104376047B/zh
Publication of CN104376047A publication Critical patent/CN104376047A/zh
Application granted granted Critical
Publication of CN104376047B publication Critical patent/CN104376047B/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/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24553Query execution of query operations
    • G06F16/24558Binary matching operations
    • G06F16/2456Join operations
    • 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

Abstract

本发明提供一种基于HBase的大表join方法,本发明针对HBase的大表join问题,借鉴了分布式大数据表操作常采用的分桶技术,提出一种基于hashcode预分区的方法,该方法充分利用了HBase的数据存储特定,高效的解决HBase多表关联问题。

Description

一种基于HBase的大表join方法
技术领域
本发明涉及一种计算机应用技术领域, 具体地说是一种基于HBase的大表join方法。 
背景技术
HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。 就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在hdfs之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop 项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。 
Hadoop Distributed File System(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。 
HBase采用基于hdfs的分布式列存储给它带来许多优势,首先HBase采用了分布式文件系统使得大数据量的存储成为可能,同时分布式架构支持高并发的访问请求;其次HBase的数据存储结构中每个字段采用数据聚集存储,在查询时如果只需要返回少数几个字段,能大大减少读取的数据量,同时既然是一个字段的数据聚集存储,那就更容易为这种聚集存储设计更好的压缩/解压算法。 
原生态的HBase虽然在大数据量上的存取有优势,但是对于两个大表的join问题并没有提供很好的解决方法,在HBase中一般采用大表冗余的方法提供关系数据库的join功能,但这种方法容易浪费存储空间,并且对于用户来说采用该方法实现join操作时需要在导入时重新设计数据表的存储结构,对于不了解HBase的使用者显得过于复杂。 
发明内容
本发明的目的是提供一种基于HBase的大表join方法。 
本发明的目的是按以下方式实现的,通过采用提取join相关列的hashcode,并使用该hashcode作为对HBase region预分区起始范围的方法解决基于HBase的大表join问题。 
本发明的方法实现包括三个技术点:对表中某列或某几列采用hashcode分桶;对各表的分桶数据进行均衡操作;实现分布式内存缓存技术,并重写HBase中的scan操作使之完成内存表和磁盘表的对比返回。 
1)分桶是处理大数据表常用方法,在hive和其它大数据软件上的应用证明该方法可以大幅提高大数据表的join操作效率。 
分桶技术是将表数据按照某列或某几列的hashcode区分开来,然后采用该hashcode作为起始范围实现region预分区,join操作以region为单位并行进行。可以看出本发明利用hbase自身的分区数据存储结构region实现表数据分桶,这样在实现分桶的同时可以利用HBase分布式处理数据的能力。 
2)采用region作为数据表中分桶单位,但HBase均衡各个regionserver节点region的数量不是针对各表的,而是节点中region的总数量,这样就必然导致单表的region在各个节点分布不均匀的情况出现,如图1所示,图中绿色、橙色、黄色分别代表三张表在各个节点中的region,从图中可以看出表中数据在各个节点中的数据分配很不均匀,这样就必然导致单个节点计算量过大拖慢整个计算效率。本发明通过重写HBase的LoadBalancer策略使得各个的region均匀分布到各个节点的regionserver中去。 
3)实现分布式缓存机制,在join操作的过程中需要将其中一张表放入临时缓存中,以便改写后的scan函数可以完成两张表的对比join操作;分布式缓存机制采取根据分桶号以region为数据单位分布式存储的缓存机制,该机制可以利用分桶号将两表对应列存储到同一节点。 
本发明的有益效果是:针对HBase的大表join问题,借鉴了分布式大数据表操作常采用的分桶技术,提出一种基于hashcode预分区的方法,该方法充分利用了HBase的数据存储特定,高效的解决HBase多表关联问题。 
附图说明
图1是hbase中region分布图。 
具体实施方式
参照说明书附图对本发明的基于HBase的大表join方法作以下详细地说明。 
本发明的一种基于HBase的大表join方法, 假设我们有表A和表B,并需要在A的a列上和B的b列上完成join操作,实现本发明方法的过程,步骤如下: 
1)装载数据
首先需要对表A和表B的数据进行清理,以便将数据装载如HBase中,具体的装载步骤如下:
创建表A和表B在HBase上对应的数据存储表,表名为H_A和H_B,由于需要根据HBase的region机制实现分桶功能,所以需要在建表的同时按hashcode对region进行预分区,预分区的个数根据需要可以人为设定,设定region管理数据的范围为startkey、stopkey,该数的内容为分桶编号num+rowkey.length(0)。
将表A和表B的数据导入HBase对应的数据表H_A和H_B中,在导入之前我们需要根据要实现的业务逻辑在表A和表B中选定某列或某几列作为HBase的rowkey的一部分,同时计算表A和表B需要进行join的列的分桶号,最终将分桶号和所选定的列作为HBase数据表H_A、H_B的rowkey。 
在计算join列的分桶号时,一般先将该对象的HashCode和0x7FFFFFFF做与操作,因为一个对象的HashCode可以为负数,这样操作后可以保证它为一个正整数.然后以总共的桶数取模,得到该对象所属region的桶数。 
num = (o.hashCode() & 0x7FFFFFFF)%buckets.length; 
2)重写LoadBalance接口
上文提到HBase的region负载是以集群中各个regionserver所管理的region数量为调节负载的依据,这样就有可能导致单个节点的在join操作中计算量过大,出现所谓的木桶原理现象。本专利改写HBase中的LoadBalance接口使得region的负载操作是以表为单位进行的,改写后的LoadBalance接口可以使同一张表的所有region均匀的分布到集群的各个regionserver节点中。
3)join操作 
在完成数据导入和以表为单位的负载均衡以后,我们可以进行join操作,操作的具体步骤如下(如要完成H_A join H_B的操作):
该过程的步骤如下,
首先在每个regionserver上实现本地缓存,用来缓存表H_B的region数据。
然后将各个regionserver中表H_A所属region的bucket num取出set(num),参照set(num)中的bucket数从hdfs上取得表H_B中对应的region,并将这些region中的数据存储到regionserver的本地缓存cache中。 
最后重写scan接口,命名为bucketJoinScan,在该类中完成扫描表H_A的数据的同时将表H_A的数据逐条和缓存中表H_B的数据进行对比,如果满足join条件列相等就将两数据结合返回到客户端。 
除说明书所述的技术特征外,均为本专业技术人员的已知技术。 

Claims (2)

1.一种基于HBase的大表join方法, 其特征在于内容包括1)对表中某列或某几列采用hashcode分桶;2)对各表的分桶数据进行均衡操作;3)实现分布式内存缓存技术,并重写HBase中的scan操作使之完成内存表和磁盘表的对比返回,其中:
1)对表中某列或某几列采用hashcode分桶,是将表数据按照某列或某几列的hashcode区分开来,然后采用该hashcode作为起始范围实现region预分区,join操作以region为单位并行进行,利用hbase自身的分区数据存储结构region实现表数据分桶,这样在实现分桶的同时,利用HBase分布式处理数据的能力;
2)采用region作为数据表中分桶单位,但HBase均衡各个regionserver节点region的数量不是针对各表的,而是节点中region的总数量,这样就必然导致单表的region在各个节点分布不均匀的情况出现,这样就必然导致单个节点计算量过大拖慢整个计算效率,通过重写HBase的LoadBalancer策略使得各个的region均匀分布到各个节点的regionserver中去;
3)实现分布式缓存机制,在join操作的过程中需要将其中一张表放入临时缓存中,以便改写后的scan函数完成两张表的对比join操作;分布式缓存机制采取根据分桶号以region为数据单位分布式存储的缓存机制,该机制利用分桶号将两表对应列存储到同一节点。
2.根据权利要求1所述的方法,其特征在于,利用HBase的region数据管理结构和keyvalue的数据存储结构特点,使得在HBase上快速完成大表的join操作,具体步骤如下:
(1)针对HBase数据管理单位region的结构特征,通过提前预分区技术和重新组织存入HBase中数据的rowkey方法,在HBase上实现分桶;
(2)针对HBase中的负载均衡机制并不针对单表,造成单个数据表的region在各个regionserver中分布不均匀,从而在join操作时产生木桶效应,通过重写HBase的负载均衡机制balance,使得单表的region均匀分布,提高计算效率;
(3)在HBase中引入分布式缓存机制,将一张表的数据分布缓存在集群的各个regionserver节点的内存中;
(4)重写scan接口完成两张数据表的特定列或几列的对比和返回数据的join操作。
CN201410584560.6A 2014-10-28 2014-10-28 一种基于HBase的大表join方法 Active CN104376047B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410584560.6A CN104376047B (zh) 2014-10-28 2014-10-28 一种基于HBase的大表join方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410584560.6A CN104376047B (zh) 2014-10-28 2014-10-28 一种基于HBase的大表join方法

Publications (2)

Publication Number Publication Date
CN104376047A true CN104376047A (zh) 2015-02-25
CN104376047B CN104376047B (zh) 2017-06-30

Family

ID=52554954

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410584560.6A Active CN104376047B (zh) 2014-10-28 2014-10-28 一种基于HBase的大表join方法

Country Status (1)

Country Link
CN (1) CN104376047B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106407207A (zh) * 2015-07-29 2017-02-15 阿里巴巴集团控股有限公司 一种实时新增数据更新方法和装置
CN110888919A (zh) * 2019-12-04 2020-03-17 阳光电源股份有限公司 基于HBase的对大数据统计分析的方法及装置
CN111078738A (zh) * 2019-11-25 2020-04-28 泰康保险集团股份有限公司 数据处理方法、装置、电子设备和存储介质
CN113190577A (zh) * 2021-03-11 2021-07-30 新华三大数据技术有限公司 一种表连接查询方法、装置及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100161565A1 (en) * 2008-12-18 2010-06-24 Electronics And Telecommunications Research Institute Cluster data management system and method for data restoration using shared redo log in cluster data management system
CN103729453A (zh) * 2014-01-02 2014-04-16 浪潮电子信息产业股份有限公司 一种HBase表联合查询优化的方法
CN103916293A (zh) * 2014-04-15 2014-07-09 浪潮软件股份有限公司 一种监控分析网站用户行为的方法
CN104102701A (zh) * 2014-07-07 2014-10-15 浪潮(北京)电子信息产业有限公司 一种基于hive的历史数据存档与查询方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100161565A1 (en) * 2008-12-18 2010-06-24 Electronics And Telecommunications Research Institute Cluster data management system and method for data restoration using shared redo log in cluster data management system
CN103729453A (zh) * 2014-01-02 2014-04-16 浪潮电子信息产业股份有限公司 一种HBase表联合查询优化的方法
CN103916293A (zh) * 2014-04-15 2014-07-09 浪潮软件股份有限公司 一种监控分析网站用户行为的方法
CN104102701A (zh) * 2014-07-07 2014-10-15 浪潮(北京)电子信息产业有限公司 一种基于hive的历史数据存档与查询方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
PIG2: "hbase balancer源码分析-负载均衡", 《HTTP://WWW.ABOUTYUN.COM/THREAD-7643-1-1.HTML》 *
WISGOOD: "hive基础之:分区、桶、sort merge bucket join", 《HTTPS://BLOG.CSDN.NET/WISGOOD/ARTICLE/DETAILS/17186107》 *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106407207A (zh) * 2015-07-29 2017-02-15 阿里巴巴集团控股有限公司 一种实时新增数据更新方法和装置
CN106407207B (zh) * 2015-07-29 2020-06-16 阿里巴巴集团控股有限公司 一种实时新增数据更新方法和装置
CN111078738A (zh) * 2019-11-25 2020-04-28 泰康保险集团股份有限公司 数据处理方法、装置、电子设备和存储介质
CN110888919A (zh) * 2019-12-04 2020-03-17 阳光电源股份有限公司 基于HBase的对大数据统计分析的方法及装置
CN113190577A (zh) * 2021-03-11 2021-07-30 新华三大数据技术有限公司 一种表连接查询方法、装置及存储介质
CN113190577B (zh) * 2021-03-11 2022-08-30 新华三大数据技术有限公司 一种表连接查询方法、装置及存储介质

Also Published As

Publication number Publication date
CN104376047B (zh) 2017-06-30

Similar Documents

Publication Publication Date Title
CN107710193B (zh) 分布式计算环境的数据放置控制
US10346432B2 (en) Compaction policy
US9213732B2 (en) Hash table and radix sort based aggregation
US10353923B2 (en) Hadoop OLAP engine
US20190004863A1 (en) Hash-based partitioning system
US9411659B2 (en) Data processing method used in distributed system
US9684702B2 (en) Database redistribution utilizing virtual partitions
US9195599B2 (en) Multi-level aggregation techniques for memory hierarchies
CN103886005B (zh) 用于为增强查询性能使用临时性能对象的方法和系统
US10356150B1 (en) Automated repartitioning of streaming data
CN104504008B (zh) 一种基于嵌套的SQL到HBase的数据迁移算法
WO2013155751A1 (zh) 面向并发olap的数据库查询处理方法
US10296656B2 (en) Managing database
US8768979B2 (en) In-memory data grid hash scheme optimization
CN104572809B (zh) 一种分布式关系数据库自由扩展方法
CN104239529A (zh) 防止Hive数据倾斜的方法和装置
CN104376047A (zh) 一种基于HBase的大表join方法
CN104376109A (zh) 一种基于数据分布库的多维度数据分布方法
CN104572505A (zh) 一种保证海量数据缓存最终一致性的系统及方法
Dai et al. Improving load balance for data-intensive computing on cloud platforms
US10289723B1 (en) Distributed union all queries
US10606478B2 (en) High performance hadoop with new generation instances
CN108920110A (zh) 一种基于内存计算模式的并行处理大数据存储系统及方法
Eisa et al. A fragmentation algorithm for storage management in cloud database environment
CN112000703A (zh) 数据入库处理方法、装置、计算机设备和存储介质

Legal Events

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