首页> 中国专利> 一种表连接处理方法、装置和云计算系统

一种表连接处理方法、装置和云计算系统

摘要

本申请提供了一种表连接处理方法、装置和云计算系统,该方法包括:根据第一表中各关联键对应的数据量在总数据量中的占比以及表连接总分区数确定所述各关联键对应的分区数,该第一表存在数据倾斜;根据所述各关联键对应的分区数为所述各关联键分配相应数量的分区;将所述第一表中各关联键对应的数据划分到对应的分区,将第二表各关联键对应的数据复制到对应分区;将各分区对应的数据传输到所述各分区对应的归约节点,供归约节点进行所述第一表与所述第二表的表连接。采用本申请提供的方案,能够更好地解决表连接中数据倾斜带来的问题。

著录项

  • 公开/公告号CN106156159A

    专利类型发明专利

  • 公开/公告日2016-11-23

    原文格式PDF

  • 申请/专利权人 阿里巴巴集团控股有限公司;

    申请/专利号CN201510178854.3

  • 发明设计人 刘祥平;

    申请日2015-04-16

  • 分类号G06F17/30(20060101);

  • 代理机构北京新知远方知识产权代理事务所(普通合伙);

  • 代理人郭玉梅

  • 地址 英属开曼群岛大开曼资本大厦一座四层847号邮箱

  • 入库时间 2023-06-19 00:57:41

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-08-16

    授权

    授权

  • 2016-12-21

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20150416

    实质审查的生效

  • 2016-11-23

    公开

    公开

说明书

技术领域

本申请涉及云计算技术领域,尤其涉及一种表连接处理方法、装置和云计算系统。

背景技术

云计算是当前工业界和学术界关注的热点,目前的云计算系统广泛采用MapReduce分布式计算框架,该框架可以进行大规模数据集的分布式并行计算。利用MapReduce思想构建的分布式计算系统已经被互联网公司广泛应用。

表连接是数据库查询术语,指根据两个或多个表中的列之间的关系,从这些表中查询数据。MapReduce框架在处理表连接时,在映射(map)节点上按照关联键(key值)的哈希值进行分区,相同key值的数据会被分配到同一个分区,并在shuffle过程中被传输到同一个归约(reduce)节点进行处理。当数据均匀时能够高效地进行并行运算,但实际上二八原则是广泛存在的,当某些key值的数据相比其他key值特别多的时候就会出现数据倾斜,处理数据量非常大的少数节点很长时间都不能执行完成,严重影响执行效率。

传统的MapReduce框架采用MapJoin方法和SemiJoin方法处理数据倾斜,但均有一定的适用范围。MapJoin方法要求其中一个表为小表(通常不超过1GB)。SemiJoin适用于两表关联后数据量能大幅度减少的情况。

吴磊的硕士论文《基于hadoop的连接算法中数据倾斜问题的研究》,其处理步骤如下:

1)统计R(A,B)、S(B,C)两表中出现次数特别多的键值,分别生成两个集合L1和L2。

2)将R(A,B)、S(B,C)随机平均分配到k个reduce节点。

3)在每个reducei节点上,将Ri划分为三个集合,第一个集合包含了Ri中所有满足Ri.B∈L1的所有元组,这部分将被保存在本reduce完成处理。第二个集合包含了Ri中所有满足Ri.B∈L2的所有元组,这部分将被广播到所有reduce。第三个集合包含了Ri中剩下的所有元组,这部分将被当做普通hashjoin进行处理。同理将Si划分为三个集合

4)在所有的reducei上完成以下三个join操作:连接连接连接

5)各个reduce将各自得到的三个结果结合在一起写入hdfs,即为最后的结果。

《基于hadoop的连接算法中数据倾斜问题的研究》提供的方案存在如下问题:

1)划分粒度问题:

现有技术只将数据划分为有倾斜和无倾斜,未对倾斜程度做进一步的细分。

2)二次传输问题:

现有技术先将数据进行一轮随机分配到k个reduce节点,再根据划分情况进行一轮数据广播,形成了二次数据传输,会额外消耗网络资源,影响执行效率。如果能一次划分分配到位,可以达到更好效果。

3)广播大量数据问题:

现有技术将倾斜数据广播到所有k个reduce节点,相当于被广播的数据被复制传输了k份,当倾斜数据量较大时,会消耗很多网络资源,严重情况下甚至会得不偿失,达不到优化效果。

可以认为,目前在表连接中处理数据倾斜的方案,均存在一定的问题。

发明内容

本申请实施例提出了一种表连接处理方法、装置和云计算系统,用以更好地解决表连接中数据倾斜带来的问题。

在一个方面,本申请实施例提供了一种表连接处理方法,包括:

根据第一表中各关联键对应的数据量在总数据量中的占比以及表连接总分区数确定所述各关联键对应的分区数,所述第一表存在数据倾斜;

根据所述各关联键对应的分区数为所述各关联键分配相应数量的分区;

将所述第一表中各关联键对应的数据划分到对应的分区,将第二表各关联键对应的数据复制到对应分区;

将各分区对应的数据传输到所述各分区对应的归约节点,供归约节点进行所述第一表与所述第二表的表连接。

在另一个方面,本申请实施例提供了一种表连接处理装置,其特征在于,包括:

分区数确定模块,用于根据第一表中各关联键对应的数据量在总数据量中的占比以及表连接总分区数确定所述各关联键对应的分区数,所述第一表存在数据倾斜;

分区分配模块,用于根据所述各关联键对应的分区数为所述各关联键分配相应数量的分区;

数据分区模块,用于将所述第一表中各关联键对应的数据划分到对应的分区,将第二表各关联键对应的数据复制到对应分区;

数据传输模块,用于将各分区对应的数据传输到所述各分区对应的reduce节点,供归约节点进行所述第一表与所述第二表的表连接。

再一个方面,本申请实施例提供了一种云计算系统,包括主控节点、映射节点和归约节点,其中:

所述主控节点,用于确定表连接总分区数;

所述映射节点,用于根据第一表中各关联键对应的数据量在总数据量中的占比以及表连接总分区数确定所述各关联键对应的分区数,所述第一表存在数据倾斜;根据所述各关联键对应的分区数为所述各关联键分配相应数量的分区;将所述第一表中各关联键对应的数据划分到对应的分区,将第二表各关联键对应的数据复制到对应分区;将各分区对应的数据传输到所述各分区对应的归约节点;

所述归约节点,用于根据接收到的数据进行所述第一表与所述第二表的表连接。

有益效果如下:

在本申请中,在表连接处理中,对存在数据倾斜问题的表,即第一表进行了相应处理,根据第一表中各关联键对应的数据量在总数据量中的占比以及表连接总分区数来确定各关联键对应的分区数,并根据各关联键对应的分区数为各关联键分配相应数量的分区,从而区分了不同关联键的数据量,可以将数据量更大的关联键对应的数据分配给更多的归约节点进行处理,从而避免处理数据量非常大的少数节点很长时间都不能执行完成,严重影响执行效率的问题,使得各个归约节点的处理量比较均匀,提高执行效率。

附图说明

下面将参照附图描述本申请的具体实施例,其中:

图1示出了本申请实施例中表连接处理方法的流程示意图;

图2示出了本申请实施例一表连接处理方法的流程示意图;

图3示出了本申请实施例中表连接处理装置的结构示意图;

图4示出了本申请一个实例中表连接处理装置的结构示意图;

图5示出了本申请一个实例中表连接处理装置的结构示意图;

图6示出了本申请一个实例中表连接处理装置的结构示意图。

具体实施方式

为了使本申请的技术方案及优点更加清楚明白,以下结合附图对本申请的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本申请的一部分实施例,而不是所有实施例的穷举。并且在不冲突的情况下,本说明中的实施例及实施例中的特征可以互相结合。

发明人在发明过程中注意到:传统的MapReduce框架采用MapJoin方法和SemiJoin方法处理数据倾斜,均有一定的适用范围。本申请提出的方案作为MapJoin方法和SemiJoin方法的补充,适用于两个大表连接(1GB以上)的情况,且对连接后数据量是否减小无限制。本申请提出的方案尤其适用一个表中存在数据倾斜,另一个表中不存在数据倾斜的情况,例如一个很大的事实表和一个较大的维度表连接,事实表中存在数据倾斜。但是,对于两个表均存在数据倾斜的情况,也能够有一定的改善。本申请提供的方案适用限制较小。

针对《基于hadoop的连接算法中数据倾斜问题的研究》存在的问题,发明人有如下思考:

1)关于划分粒度问题:现有技术只将数据划分为有倾斜和无倾斜,未对倾斜程度做进一步的细分。如果根据每个key值的数据量做进一步的细分,可以达到更好效果。

2)关于二次传输问题:

现有技术先将数据进行一轮随机分配到k个reduce节点,再根据划分情况进行一轮数据广播,形成了二次数据传输,会额外消耗网络资源,影响执行效率。如果能一次划分分配到位,可以达到更好效果。

3)关于广播大量数据问题:

现有技术将倾斜数据广播到所有k个reduce节点,相当于被广播的数据被复制传输了k份,当倾斜数据量较大时,会消耗很多网络资源,严重情况下甚至会得不偿失,达不到优化效果。如果根据倾斜程度,只广播到k个reduce节点的一个子集,则可以减少数据传输量,提高效率。

基于此,本申请实施例提出了一种表连接处理方法、装置和云计算系统,下面进行说明。

图1示出了本申请实施例表连接处理的方法,如图所示,包括:

步骤101,根据第一表中各关联键对应的数据量在总数据量中的占比以及表连接总分区数确定所述各关联键对应的分区数;

该第一表存在数据倾斜。

步骤102,根据所述各关联键对应的分区数为所述各关联键分配相应数量的分区;

步骤103,将所述第一表中各关联键对应的数据划分到对应的分区,将第二表各关联键对应的数据复制到对应分区;

步骤104,将各分区对应的数据传输到所述各分区对应的reduce节点,供reduce节点进行所述第一表与所述第二表的表连接。

有益效果:

在本申请实施例中,在表连接处理中,对存在数据倾斜问题的表,即第一表进行了相应处理,根据第一表中各关联键对应的数据量在总数据量中的占比以及表连接总分区数来确定各关联键对应的分区数,并根据各关联键对应的分区数为各关联键分配相应数量的分区,从而区分了不同关联键的数据量,可以将数据量更大的关联键对应的数据分配给更多的reduce节点进行处理,从而避免处理数据量非常大的少数节点很长时间都不能执行完成,严重影响执行效率的问题,使得各个reduce节点的处理量比较均匀,提高执行效率。

由于本申请实施例的方案统计了存在倾斜的表每个key值的数据量,并根据数据量大小决定划分到1个reduce节点进行处理,还是n个(n≤k,k为进行表连接的reduce节点总数,n值可变)reduce节点进行处理,对倾斜程度进行细粒度的划分,使得reduce节点进行处理时,更加均匀。

由于本申请实施例中,在步骤103将所述第一表中各关联键对应的数据划分到对应的分区,并将第二表各关联键对应的数据复制到对应分区之后,在步骤104一次性将各分区对应的数据传输到所述各分区对应的reduce节点,避免二次传输,避免了额外的网络资源消耗,同样有助于执行效率的提升。

采用本申请实施例的方案,根据每个key值倾斜程度局部广播到n个(n≤k,k为进行表连接的reduce节点总数,n值可变)reduce节点。某key值的数据量越大则n越大,某key值的数据量越小则n越小,从而减小广播的数据量。

进一步地,为了减少运算量,还可以按以下方式实施。

实施中,对所述第一表进行采样,得到采样后各关联键对应的数据行数与采样总数据行数;

计算所述采样后各关联键对应的数据行数与所述采样总数据行数的比值,以所述比值作为所述各关联键对应的数据量在总数据量中的占比。

有益效果:由于对数据进行了采样,减少了运算量,进一步提升了效率,并降低了处理负担。

为了便于本申请的实施,下面以实例进行说明。

实施例一:

图2示出了本申请实施例一表连接处理的方法,如图所示,包括:

步骤201,接收用户指令,根据用户指令确定表R(第一表);

通常出现数据倾斜的情况为一个事实表一个维度表,事实表的外键与维度表的主键进行关联,事实表中容易出现数据倾斜。由用户来指定哪个表中存在数据倾斜,记为第一表(表R),另一个不倾斜的表记为第二表(表S)。用户指定的好处是对于无数据倾斜的情况,可以采用传统连接算法,不必进行任何额外的运算,对于有数据倾斜的情况,可以只收集倾斜表的统计信息,减少运算量。但是在实际操作时,并不限定一定由用户来进行倾斜表的指定,可以通过对两个表分别进行统计处理,确定是否存在某些key值的数据相比其他key值特别多的情况,若存在,则可以确定该表为表R。

本申请提供的方案尤其适用一个表倾斜,另一个表不倾斜的情况,但在实际应用中,也可以应用于两个表均不倾斜或者两个表均倾斜的情况,由用户来指定,可以根据用户的经验进行判断,在应用于两个表均倾斜的情况时,可以从中指定一个作为表R,使得处理过程中能够降低一定的数据倾斜的情况,若不由用户指定,则可以根据对两个表分别进行的统计处理,判断哪个表的数据倾斜更加严重,以此来确定表R。

步骤202,确定进行表连接的reduce节点总数k;

具体可以采用传统方法根据两个源表的大小确定进行表连接的reduce节点总数k,由于进行表连接的reduce节点总数对应了表连接总分区数,因此表连接总分区数也为k。

步骤203,对表R进行随机采样,对采样子集数据进行聚合,统计采样后总行数记为cnt,以及各key值keyi的数据行数,记为(keyi,cnti);

对采样子集数据进行聚合时也会面临数据倾斜问题,但聚合的倾斜处理已有成熟的解决方案,不再详述。

步骤204,根据cnti在cnt中的占比以及表连接总分区数k计算每个key值keyi的分区数ni,保存数据(keyi,ni);

具体可根据公式(1)进行计算:

ni=四舍五入取整(cnti*k/cnt),当ni<1时取为1;>

其中,cnt为所述采样总数据行数,cnti为关联键i对应的数据行数,k为所述表连接总分区数。

在保存数据(keyi,ni)时,为了减小存储量,可只保存ni>1的数据。具体为,在确定keyi对应的分区数大于1时,保存相应keyi及其对应的分区数ni,在读取keyi对应的分区数时,若没有keyi的数据,则确定keyi对应的分区数为1。

步骤205,根据各key值的哈希值确定各key值的初始分区pi

具体按照传统哈希方法计算每个key值keyi对应的分区pi

步骤206,根据各key值keyi对应的分区数ni和初始分区pi确定keyi的分区集合{pil,…,Pini};

具体可根据公式(2)进行计算:

Pim=四舍五入取整(pi+(m-1)*k/ni))mod>

其中,ni为关联键i对应的分区数,m为小于等于ni的正整数,k为表连接总分区数,pi为关联键i的初始分区。

在本步骤中,确定分区集合具体算法可以不同,只要能达到根据keyt对应的分区数ni为keyi确定出具体的分区即可。

此外,在具体实现时,不需要一定进行步骤205的初始分区再确定分区集合,直接对分区根据分区数ni进行划分也是可以的。

步骤207,将表R中key值为keyi的每行数据随机划分到{pil,…,pini}中的某个分区,将表S中key值为keyi的每行数据复制到{pil,…,pini}中的每个分区,对相同分区的数据进行合并,生成文件保存;

在具体实现是,表R中key值为keyi的每行数据进行划分时可以如本步骤一样随机划分,从而使得数据更均匀,但也可以采用其他的方式进行划分,只要将表R中key值为keyi的每行数据均匀划分到{pil,…,pini}中的某个分区即可。

本步骤是根据步骤206的分区结果,如果表R中某key值数据量很小则会被传输到1个reduce节点处理,如果某key值数据量大则会被传输到多个reduce节点处理。而表S中的数据会被局部广播到对应的reduce节点处理。

步骤208,将各分区对应的数据传输到各分区对应的reduce节点,供reduce节点进行表R与表S的表连接。

基于同一发明构思,本申请实施例中还提供了一种表连接处理装置,以及一种云计算系统,由于本申请实施例中装置、系统解决问题的原理与一种表连接处理方法相似,因此这些装置、系统的实施可以参见方法的实施,重复之处不再赘述。

如图3所示,本申请实施例中的表连接处理装置可以包括:

分区数确定模块301,用于根据第一表中各关联键对应的数据量在总数据量中的占比以及表连接总分区数确定各关联键对应的分区数,该第一表存在数据倾斜;

分区分配模块302,用于根据各关联键对应的分区数为各关联键分配相应数量的分区;

数据分区模块303,用于将第一表中各关联键对应的数据划分到对应的分区,将第二表各关联键对应的数据复制到对应分区;

数据传输模块304,用于将各分区对应的数据传输到各分区对应的reduce节点,供reduce节点进行第一表与第二表的表连接。

进一步地,如图4所示,该装置还可以包括采样模块401,用于对第一表进行采样,得到采样后各关联键对应的数据行数与采样总数据行数;

分区数确定模块301,用于计算采样后各关联键对应的数据行数与采样总数据行数的比值,以该比值作为各关联键对应的数据量在总数据量中的占比。

进一步地,如图5所示,分区分配模块302可以包括初始分区单元3021和分区集合确定单元3022,其中:

初始分区单元3021,用于根据各关联键的哈希值确定各关联键的初始分区;

分区集合确定单元3022,用于根据各关联键对应的分区数确定各关联键的分区集合。

进一步地,如图6所示,该装置还可以包括用户指令接收单元601,用于接收用户指令,根据用户指令确定第一表。

在具体实现时,上述各进一步增加的内容,可以根据实际需求进行配合采用,例如一个表连接处理装置可以同时具有分区数确定模决301、分区分配模块302、数据分区模块303、数据传输模块304、采样模块401、初始分区单元3021、分区集合确定单元3022和用户指令接收单元601,也可以在图3的基础上增加部分单元或模块,具体的配合可参见方法部分的描述。

本申请实施例提供一种云计算系统,包括主控节点、map节点和reduce节点,其中,主控节点用于确定表连接总分区数,reduce节点用于根据接收到的数据进行第一表与第二表的表连接,其特征在于,map节点包括上述的表连接处理装置。

为了描述的方便,以上所述装置的各部分以功能分为各种模块或单元分别描述。当然,在实施本申请时可以把各模块或单元的功能在同一个或多个软件或硬件中实现。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号