CN104376047A - 一种基于HBase的大表join方法 - Google Patents
一种基于HBase的大表join方法 Download PDFInfo
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 28
- 238000013500 data storage Methods 0.000 claims abstract description 3
- 238000000638 solvent extraction Methods 0.000 claims abstract 2
- 230000007246 mechanism Effects 0.000 claims description 12
- 230000008569 process Effects 0.000 claims description 5
- 230000006870 function Effects 0.000 claims description 4
- 230000008520 organization Effects 0.000 claims description 3
- 238000005192 partition Methods 0.000 claims description 2
- 230000002123 temporal effect Effects 0.000 claims description 2
- 238000013523 data management Methods 0.000 claims 2
- 230000000694 effects Effects 0.000 claims 1
- 230000008521 reorganization Effects 0.000 claims 1
- 230000008901 benefit Effects 0.000 description 2
- 230000004931 aggregating effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000001105 regulatory effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
- G06F16/24558—Binary matching operations
- G06F16/2456—Join operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
Abstract
本发明提供一种基于HBase的大表join方法,本发明针对HBase的大表join问题,借鉴了分布式大数据表操作常采用的分桶技术,提出一种基于hashcode预分区的方法,该方法充分利用了HBase的数据存储特定,高效的解决HBase多表关联问题。
Description
技术领域
本发明涉及一种计算机应用技术领域, 具体地说是一种基于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操作。
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)
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)
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的历史数据存档与查询方法 |
-
2014
- 2014-10-28 CN CN201410584560.6A patent/CN104376047B/zh active Active
Patent Citations (4)
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)
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)
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 |