CN107169097A - 一种Spark Broadcasthashjoin操作的改进方法 - Google Patents
一种Spark Broadcasthashjoin操作的改进方法 Download PDFInfo
- Publication number
- CN107169097A CN107169097A CN201710339062.9A CN201710339062A CN107169097A CN 107169097 A CN107169097 A CN 107169097A CN 201710339062 A CN201710339062 A CN 201710339062A CN 107169097 A CN107169097 A CN 107169097A
- Authority
- CN
- China
- Prior art keywords
- hash
- key
- big
- small
- broadcasthashjoin
- 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.)
- Pending
Links
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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种Spark Broadcasthashjoin操作的改进方法,该方法包括:获取小表,并获取小表中key值被大表查找的先验概率;依据先验概率对小表中的key从大到小进行排序,得到一个新的有序表;利用所述新的有序表构建哈希表,将哈希表广播到各个节点;在各个节点获取大表内容,将大表内容与哈希表中的匹配项进行连接。该方法实现提高查找效率,进而提高join的连接效率。
Description
技术领域
本发明涉及Spark大数据处理技术领域,特别是涉及一种SparkBroadcasthashjoin操作的改进方法。
背景技术
目前,Spark是近年来发展较快的分布式并行大数据处理框架,Spark SQL提供了对结构化数据的处理。Broadcasthashjoin是Spark SQL中的一项重要操作,用于处理多表连接。Broadcasthashjoin是对join操作的优化处理。
在Spark SQL中Broadcasthashjoin首先使用broadcast把小表分发到每台执行节点上,然后利用小表中的key数据计算hash值建立哈希表,最后计算大表对应的hash值,在hash表中进行查找最终完成表的连接。Broadcasthashjoin操作过程中需要利用小表来创建哈希表,创建哈希表的过程中不可避免的要解决相同key的冲突问题,Broadcasthashjoin操作中用链地址法来解决冲突。然而这种方法再处理冲突时,往往不会考虑小表中数据被大表查找的先验概率大小。例如,小表中key值a位于key值b之前,二者对应的哈希值相同,在创建哈希表时利用链地址法处理冲突会将b链接在a之后,而实际先验已知在大表中进行查找连接操作时,查找b的频率远远高于a,那么此时查找效率将会非常低下,尤其是在处理大批相同哈希值的情况下。
在Spark集群中直接join将会对所有数据进行shuffle,需要大量的io操作,相同的key会在同一个partition中进行处理,任务的并发度也受到了限制。Broadcasthashjoin通过使用broadcast把小表分发到每台执行节点上,从而使得关联操作都在本地完成,基本就取消了shuffle的过程,运行效率大幅度提高。然而该操作同时也涉及到哈希表的创建和查找过程,以及哈希表创建过程中的冲突解决问题。Broadcasthashjoin利用链地址法来解决冲突。然而这种方法处理冲突时只是在每次遇到冲突时将对应数据依次挂接在相同hash值对应的链表里,并未考虑到小表中数据被大表查找的先验概率大小,也即大表中与小表中相同字段的概率大小,从而造成了后续大表join操作时查找连接效率较低。
发明内容
本发明的目的是提供一种Spark Broadcasthashjoin操作的改进方法,以实现提高查找效率,进而提高join的连接效率。
为解决上述技术问题,本发明提供一种Spark Broadcasthashjoin操作的改进方法,该方法包括:
获取小表,并获取小表中key值被大表查找的先验概率;
依据先验概率对小表中的key从大到小进行排序,得到一个新的有序表;
利用所述新的有序表构建哈希表,将哈希表广播到各个节点;
在各个节点获取大表内容,将大表内容与哈希表中的匹配项进行连接。
优选的,小表中的每个key均对应一个先验概率。
优选的,所述利用所述新的有序表构建哈希表,包括:
逐行计算小表中每行key的哈希值,将具有相同哈希值的key对应的关键字都依次放在同一个链表中,构成哈希表。
优选的,所述哈希值为关键字的哈希地址。
优选的,所述将具有相同哈希值的key对应的关键字都依次放在同一个链表中,构成哈希表之后,还包括:采用数组存放各个链表的头指针。
优选的,链表的数目和哈希地址的数目相同。
优选的,所述将大表内容与哈希表中的匹配项进行连接,包括:
计算大表中各行key的哈希值,在哈希表中查找哈希值相同的匹配项,将大表内容与匹配项进行连接。
本发明所提供的一种Spark Broadcasthashjoin操作的改进方法,获取小表,并获取小表中key值被大表查找的先验概率;依据先验概率对小表中的key从大到小进行排序,得到一个新的有序表;利用所述新的有序表构建哈希表,将哈希表广播到各个节点;在各个节点获取大表内容,将大表内容与哈希表中的匹配项进行连接。可见,该方法改进了Broadcasthashjoin操作,增加了小表中key值被大表查找的先验概率,小表中每个key均对应一个先验被查找概率,在利用小表数据构建哈希表时首先按照该先验概率对key从小到大进行排序,排序后得到一个新的有序表,然后再对新的有序表进行常规的哈希表构建过程。由于用于构建哈希表的小表中每个key被查找的概率不同,按被查找的先验概率大小来决定其冲突处理时的位置,将出现概率大的放在所需比较次数少的位置,从而减少后续大表查找连接操作时的查找次数,提高查找效率,提高Broadcasthashjoin的整体性能。并且将小表中数据元素被大表查找的先验概率作为建立哈希表时***顺序的依据,使得查找连接过程与原操作相比在不增加过多其它消耗的同时降低了冲突时执行查询的查找长度,从而使查询响应时间更短,进而join的连接效率更高,提高join的连接效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明所提供的一种Spark Broadcasthashjoin操作的改进方法的流程图;
图2为现有技术中的Spark Broadcasthashjoin实现流程图;
图3为本发明改进的Spark Broadcasthashjoin实现流程图;
图4为改进前后哈希表示意图。
具体实施方式
本发明的核心是提供一种Spark Broadcasthashjoin操作的改进方法,以实现提高查找效率,进而提高join的连接效率。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参考图1,图1为本发明所提供的一种Spark Broadcasthashjoin操作的改进方法的流程图,该方法包括:
S11:获取小表,并获取小表中key值被大表查找的先验概率;
S12:依据先验概率对小表中的key从大到小进行排序,得到一个新的有序表;
S13:利用所述新的有序表构建哈希表,将哈希表广播到各个节点;
S14:在各个节点获取大表内容,将大表内容与哈希表中的匹配项进行连接。
可见,该方法改进了Broadcasthashjoin操作,增加了小表中key值被大表查找的先验概率,小表中每个key均对应一个先验被查找概率,在利用小表数据构建哈希表时首先按照该先验概率对key从小到大进行排序,排序后得到一个新的有序表,然后再对新的有序表进行常规的哈希表构建过程。由于用于构建哈希表的小表中每个key被查找的概率不同,按被查找的先验概率大小来决定其冲突处理时的位置,将出现概率大的放在所需比较次数少的位置,从而减少后续大表查找连接操作时的查找次数,提高查找效率,提高Broadcasthashjoin的整体性能。
并且将小表中数据元素被大表查找的先验概率作为建立哈希表时***顺序的依据,使得查找连接过程与原操作相比在不增加过多其它消耗的同时降低了冲突时执行查询的查找长度,从而使查询响应时间更短,进而join的连接效率更高,提高join的连接效率。
基于上述方法,具体的,小表中的每个key均对应一个先验概率。
进一步的,步骤S13中,利用所述新的有序表构建哈希表的过程具体为:逐行计算小表中每行key的哈希值,将具有相同哈希值的key对应的关键字都依次放在同一个链表中,构成哈希表。
其中,所述哈希值为关键字的哈希地址。
进一步的,将具有相同哈希值的key对应的关键字都依次放在同一个链表中,构成哈希表之后,还包括:采用数组存放各个链表的头指针。
其中,链表的数目和哈希地址的数目相同。
进一步的,步骤S14中,将大表内容与哈希表中的匹配项进行连接的内容具体为:计算大表中各行key的哈希值,在哈希表中查找哈希值相同的匹配项,将大表内容与匹配项进行连接主要技术特征:
详细的,传统的Spark Broadcasthashjoin实现流程如图2所示,具体的步骤为:(1)获取小表T1;(2)构建哈希表:逐行计算小表中每行key的哈希值,把具有相同哈希地址的关键字都依次放在同一个链表中,有m个哈希地址就有m个链表。同时,用数组A[0..m-1]存放各个链表的头指针,凡是哈希地址为i的记录都以节点方式***到以A[i]为头节点的链表中;(3)将哈希表广播到各个计算节点;(4)在各节点获取大表内容,计算大表各行key的哈希值,在哈希表中查找匹配;(5)将大表内容与找到的匹配项进行连接并返回。
本方法是在小表中增加各key被查找的先验概率,在构建哈希表之前加入对小表按照先验概率进行排序的步骤,以此来调整后续构建哈希表时小表中各键值在哈希表中的位置,从而达到尽量减少大表查找次数,提高整体连接效率的目的。本发明改进后的Broadcasthashjoin操作实现如图3所示,具体实现步骤为:(1)获取小表T1;(2)按照先验概率大小对小表按照从大到小的顺序进行排序;(3)构建哈希表:逐行计算小表中每行key的哈希值,把具有相同哈希地址的关键字都依次放在同一个链表中,有m个哈希地址就有m个链表。同时,用数组A[0..m-1]存放各个链表的头指针,凡是哈希地址为i的记录都以节点方式***到以A[i]为头节点的链表中;(4)将哈希表广播到各个计算节点;(5)在各节点获取大表内容,计算大表各行key的哈希值,在哈希表中查找匹配;(6)将大表内容与找到的匹配项进行连接并返回。
本方法对Broadcasthashjoin操作进行改进,通过增加小表中key值被查找的先验概率来改变链地址法处理冲突的规则,从而提高Spark中多表连接的效率。其中,改进的Broadcasthashjoin操作,增加了小表中key值被大表查找的先验概率,小表中每个key均对应一个先验被查找概率。在利用小表数据构建哈希表时首先按照该先验概率对key从小到大进行排序,排序后得到一个新的有序表,然后再对新的有序表进行常规的哈希表构建过程。由于用于构建哈希表的小表中每个key被查找的概率不同,按被查找的先验概率大小来决定其冲突处理时的位置,将出现概率大的放在所需比较次数少的位置,从而减少后续大表查找连接操作时的查找次数,提高Broadcasthashjoin的整体性能。
例如,在小表中存在key(b)键和key(c)键,且二者的对应的哈希地址相等即H(key(b))=H(key(c)),在小表中key(b)位于key(c)之前,但key(b)的被查找的概率要远小于key(c)。本方法首先按照先验概率大小排序得到新表,排序后key(c)在新表中的位置要位于key(b)之前。然后按新表创建哈希表,此时在H(key(b))(或H(key(c)))位置对应的链表中key(c)位于key(b)之前。最后获取大表内容在哈希表中进行查找并连接,此时key(c)的查找长度减少而key(b)的查找长度增加,但由于在大表中key(c)出现的概率要远大于key(b),所以整体查找效率提高。对于该简例,改进前后key(b)与key(c)在哈希表中的位置如图4所示,图4中箭头左边的图为改进前的哈希表,箭头右边改进后的哈希表。
综上所述,本方法将数据元素被查找的先验概率作为建立哈希表时***顺序的依据,查找过程与原哈希表相比在不增加其它过多消耗的同时降低了冲突时执行查询的查找长度,从而使查询响应时间更短,join的连接效率更高。
以上对本发明所提供的一种Spark Broadcasthashjoin操作的改进方法进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。
Claims (7)
1.一种Spark Broadcasthashjoin操作的改进方法,其特征在于,包括:
获取小表,并获取小表中key值被大表查找的先验概率;
依据先验概率对小表中的key从大到小进行排序,得到一个新的有序表;
利用所述新的有序表构建哈希表,将哈希表广播到各个节点;
在各个节点获取大表内容,将大表内容与哈希表中的匹配项进行连接。
2.如权利要求1所述的方法,其特征在于,小表中的每个key均对应一个先验概率。
3.如权利要求2所述的方法,其特征在于,所述利用所述新的有序表构建哈希表,包括:
逐行计算小表中每行key的哈希值,将具有相同哈希值的key对应的关键字都依次放在同一个链表中,构成哈希表。
4.如权利要求3所述的方法,其特征在于,所述哈希值为关键字的哈希地址。
5.如权利要求4所述的方法,其特征在于,所述将具有相同哈希值的key对应的关键字都依次放在同一个链表中,构成哈希表之后,还包括:采用数组存放各个链表的头指针。
6.如权利要求5所述的方法,其特征在于,链表的数目和哈希地址的数目相同。
7.如权利要求1至6中任意一项所述的方法,所述将大表内容与哈希表中的匹配项进行连接,包括:
计算大表中各行key的哈希值,在哈希表中查找哈希值相同的匹配项,将大表内容与匹配项进行连接。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710339062.9A CN107169097A (zh) | 2017-05-15 | 2017-05-15 | 一种Spark Broadcasthashjoin操作的改进方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710339062.9A CN107169097A (zh) | 2017-05-15 | 2017-05-15 | 一种Spark Broadcasthashjoin操作的改进方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107169097A true CN107169097A (zh) | 2017-09-15 |
Family
ID=59815245
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710339062.9A Pending CN107169097A (zh) | 2017-05-15 | 2017-05-15 | 一种Spark Broadcasthashjoin操作的改进方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107169097A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109582598A (zh) * | 2018-12-13 | 2019-04-05 | 武汉中元华电软件有限公司 | 一种基于外部存储实现高效查找哈希表的预处理方法 |
CN111079935A (zh) * | 2019-10-16 | 2020-04-28 | 重庆邮电大学 | 一种spark下的机器学习快速大规模样本签名方法 |
CN112070652A (zh) * | 2019-06-10 | 2020-12-11 | 上海赜睿信息科技有限公司 | 数据压缩、解压方法、可读存储介质和电子设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102609487A (zh) * | 2012-01-20 | 2012-07-25 | 东华大学 | 一种面向列存储的桶内索引哈希连接方法 |
CN102831120A (zh) * | 2011-06-15 | 2012-12-19 | 腾讯科技(深圳)有限公司 | 一种数据处理方法及*** |
CN104391957A (zh) * | 2014-12-01 | 2015-03-04 | 浪潮电子信息产业股份有限公司 | 一种针对混合型大数据处理***的数据交互分析方法 |
-
2017
- 2017-05-15 CN CN201710339062.9A patent/CN107169097A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102831120A (zh) * | 2011-06-15 | 2012-12-19 | 腾讯科技(深圳)有限公司 | 一种数据处理方法及*** |
CN102609487A (zh) * | 2012-01-20 | 2012-07-25 | 东华大学 | 一种面向列存储的桶内索引哈希连接方法 |
CN104391957A (zh) * | 2014-12-01 | 2015-03-04 | 浪潮电子信息产业股份有限公司 | 一种针对混合型大数据处理***的数据交互分析方法 |
Non-Patent Citations (2)
Title |
---|
范欣欣: "SparkSQL-有必要坐下来聊聊Join", 《码农头条 HTTPS://MP.WEIXIN.QQ.COM/S/7OHGJDATC56T4U3ISXGWIW》 * |
马如林等: "一种哈希表快速查找的改进方法", 《计算机工程与科学》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109582598A (zh) * | 2018-12-13 | 2019-04-05 | 武汉中元华电软件有限公司 | 一种基于外部存储实现高效查找哈希表的预处理方法 |
CN109582598B (zh) * | 2018-12-13 | 2023-05-02 | 武汉中元华电软件有限公司 | 一种基于外部存储实现高效查找哈希表的预处理方法 |
CN112070652A (zh) * | 2019-06-10 | 2020-12-11 | 上海赜睿信息科技有限公司 | 数据压缩、解压方法、可读存储介质和电子设备 |
CN111079935A (zh) * | 2019-10-16 | 2020-04-28 | 重庆邮电大学 | 一种spark下的机器学习快速大规模样本签名方法 |
CN111079935B (zh) * | 2019-10-16 | 2022-10-18 | 重庆邮电大学 | 一种spark下的机器学习快速大规模样本签名方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10572484B2 (en) | Duplicate reduction or elimination with hash join operations | |
US8332389B2 (en) | Join order for a database query | |
CN103761318B (zh) | 一种关系型异构数据库数据同步的方法及*** | |
CN103514201B (zh) | 一种非关系型数据库的数据查询方法和装置 | |
KR102407510B1 (ko) | 데이터 저장 및 조회 방법, 장치, 기기 및 매체 | |
US20120072412A1 (en) | Evaluating execution plan changes after a wakeup threshold time | |
US20020194157A1 (en) | Partition pruning with composite partitioning | |
CN102880555B (zh) | 面向实时***的内存算法 | |
CN107169097A (zh) | 一种Spark Broadcasthashjoin操作的改进方法 | |
US9218394B2 (en) | Reading rows from memory prior to reading rows from secondary storage | |
WO2015074466A1 (zh) | 一种数据查询方法及装置 | |
CN106227799A (zh) | 一种基于分布式数据库的sql语句处理方法 | |
US20170154078A1 (en) | Systems and methods for searching multiple related tables | |
US20220005546A1 (en) | Non-redundant gene set clustering method and system, and electronic device | |
CN105447105A (zh) | 基于NoSQL的分布式物联网数据的单字段区间索引查询方式 | |
US20180174681A1 (en) | Leaping search algorithm for similar sub-sequences in character sequences and application thereof in searching in biological sequence database | |
CN105359142A (zh) | 哈希连接方法、装置和数据库管理*** | |
US10565188B2 (en) | System and method for performing a pattern matching search | |
US20210286817A1 (en) | System and method for disjunctive joins using a lookup table | |
CN109446293A (zh) | 一种并行的高维近邻查询方法 | |
US7693821B2 (en) | Virtual pair algorithm for outer join resolution | |
US20220391390A1 (en) | System and method for disjunctive joins | |
CN102904812A (zh) | 路由表项的存储方法、查找方法、装置及*** | |
KR20180109379A (ko) | 관계형 데이터베이스의 조인 방법 | |
CN109753520B (zh) | 半连接查询方法、装置、服务器及存储介质 |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170915 |
|
RJ01 | Rejection of invention patent application after publication |