一种基于映射归约的数据处理方法及装置与流程

文档序号:18142140发布日期:2019-07-10 11:11阅读:241来源:国知局
一种基于映射归约的数据处理方法及装置与流程

本申请涉及云计算技术领域,尤其涉及一种基于映射归约的数据处理方法及装置。



背景技术:

在云计算技术领域,mapreduce(映射归约)是一种重要的计算框架,它提供了一个庞大但设计精良的并行计算软件框架,能自动完成计算任务的并行化处理,自动划分计算数据和计算任务,在集群节点上自动分配和执行任务以及收集计算结果,将数据分布存储、数据通信、容错处理等并行计算涉及到的很多系统底层的复杂细节交由系统负责处理,大大减少了软件开发人员的负担。

但通过对传统mapreduce框架下多路数据集的关联方法进行分析,发明人发现其存在以下两个方面的问题:

(1)每一次mapreduce任务完成两个数据集的连接后,都要先将得到的中间结果集写入hadoop分布式文件系统(hadoopdistributedfilesystem,hdfs)中,再由下个mapreduce任务从hdfs中重新读取,这样,当需要连接的数据集较多或者中间结果集的数据量很大时,则会带来巨大的磁盘i/o开销。

(2)前一个mapreduce任务得到的中间结果集会作为下一个mapreduce任务的输入项,经mapper处理后经网络再传输到reducer,这样,中间结果集会随着mapreduce任务个数的递增而不断地增大,进而带来巨大的网络通信代价。

举例说明,三个数据集的连接任务为r∞s∞t,基于mapreduce编程框架系统将该任务分解为三个顺序连接的mapreduce子任务,如图1所示,三路连接被转化为两个二路连接,具体地:

第一个子任务将r和s连接,此过程包括map和reduce操作,得到的中间结果集u输出到hdfs中;

第二个子任务从hdfs中读取u与t连接,此过程又包括map和reduce操作,得到的中间结果集v输出到hdfs中;

第三个子任务读取hdfs中的两个中间结果集u和v进行合并,将合并后的结果再写入hdfs中。

由此可见,在多数据集连接处理任务当中,如果连接条件中含有两个或者两个以上不同的连接字段时,mapreduce框架处理数据集的效率将会非常低。



技术实现要素:

本申请实施例提供一种基于映射归约的数据处理方法及装置,用以解决现有技术中mapreduce框架在对多路数据集进行连接时存在着连接效率比较低的问题。

本申请实施例提供的一种基于映射归约的数据处理方法,包括:

接收多路数据集和对所述多路数据集进行关联查询的连接字段信息;

对每一路数据集执行映射操作得到多个中间结果集,对每个中间结果集,根据为各连接字段设置的分区函数,确定该中间结果集对应的至少一个reduce节点,将该中间结果集发送给所述至少一个reduce节点中的每一个reduce节点;

对各reduce节点中的中间结果集进行汇总,得到所述多路数据集中满足所有连接字段的数据集。

本申请实施例提供的一种基于映射归约的数据处理装置,包括:

接收模块,用于接收多路数据集和对所述多路数据集进行关联查询的连接字段信息;

发送模块,用于对每一路数据集执行映射操作得到多个中间结果集,对每个中间结果集,根据为各连接字段设置的分区函数,确定该中间结果集对应的至少一个reduce节点,将该中间结果集发送给所述至少一个reduce节点中的每一个reduce节点;

汇总模块,用于对各reduce节点中的中间结果集进行汇总,得到所述多路数据集中满足所有连接字段的数据集.

本申请实施例提供的一种电子设备,包括至少一个处理单元、以及至少一个存储单元,其中,所述存储单元存储有程序代码,当所述程序代码被所述处理单元执行时,使得所述电子设备执行上述基于映射归约的数据处理方法的步骤。

本申请实施例提供的一种计算机可读存储介质,包括程序代码,当所述程序代码在电子设备上运行时,使所述电子设备执行上述基于映射归约的数据处理方法的步骤。

本申请实施例中,接收多路数据集和对这多路数据集进行关联查询的连接字段信息,之后,对每一路数据集执行映射操作得到多个中间结果集,对每个中间结果集,根据为各连接字段设置的分区函数,确定该中间结果集对应的至少一个reduce节点,将该中间结果集发送给确定出的每一个reduce节点,最后对各reduce节点中的中间结果集进行汇总,得到这多路数据集中满足所有连接字段的数据集,其中,每一中间结果集都对应至少一个reduce节点,这至少一个reduce节点中的每一个reduce节点都有可能需要该中间结果集,因此,将该中间结果集发送给确定出每一个reduce节点,可以节省后续对中间结果集进行反复地读取和传送的操作,进而节省磁盘的io开销、降低网络通信代价,并且,本申请实施例中在一次mapreduce任务中可以完成多路数据集的连接任务,因此还可以显著提升mapreduce的作业效率。

附图说明

图1为现有技术中基于mapreduce编程框架对三路数据集进行连接的示意图;

图2为本申请实施例提供的基于映射归约的数据处理方法流程图;

图3为本申请实施例提供的对三路数据集进行处理的示意图;

图4为本申请实施例提供的又一对三路数据集进行处理的示意图;

图5为本申请实施例提供的基于映射归约的数据处理装置结构图;

图6为本申请实施例提供的用于实现基于映射归约的数据处理方法的电子设备的硬件结构示意图。

具体实施方式

本申请实施例中,接收多路数据集和对这多路数据集进行关联查询的连接字段信息,之后,对每一路数据集执行映射操作得到多个中间结果集,对每个中间结果集,根据为各连接字段设置的分区函数,确定该中间结果集对应的至少一个reduce节点,将该中间结果集发送给确定出的每一个reduce节点,最后对各reduce节点中的中间结果集进行汇总,得到这多路数据集中满足所有连接字段的数据集,其中,每一中间结果集都对应至少一个reduce节点,这至少一个reduce节点中的每一个reduce节点都有可能需要该中间结果集,因此,将该中间结果集发送给确定出每一个reduce节点,可以节省后续对中间结果集进行反复地读取和传送的操作,进而节省磁盘的io开销、降低网络通信代价,并且,本申请实施例中在一次mapreduce任务中可以完成多路数据集的连接任务,因此还可以显著提升mapreduce的作业效率。

下面结合说明书附图对本申请实施例作进一步详细描述。

实施例一

如图2所示,为本申请实施例提供的基于映射归约的数据处理方法流程图,包括以下步骤:

s201:接收多路数据集和对这多路数据集进行关联查询的连接字段信息。

这里,多路数据集如r、s、t等,进行关联查询时的连接字段如年龄、姓名等。

s202:对每一路数据集执行映射操作得到多个中间结果集,对每个中间结果集,根据为各连接字段设置的分区函数,确定该中间结果集对应的至少一个reduce节点,将该中间结果集发送给确定出的每一个reduce节点。

在具体实施过程中,执行映射操作得到多个中间结果集均为键值(key-value)对,因此,对每一中间结果集,可以将该中间结果集代入为每一连接字段设置的分区函数,得到该中间结果集对应的分区函数值,然后根据该中间结果集对应的各分区函数值确定其对应的至少一个分区编号,进一步地,根据预先设置的分区编号与reduce节点之间的对应关系,确定该中间结果集对应的至少一个reduce节点,这里,确定出的每一个reduce节点在后续的reduce阶段都有可能需要该中间结果集,为了避免后续对中间结果集的反复读取和传输,这里将该中间结果集发送给可能需要该中间结果集的每一个reduce节点。

其中,对每一中间结果集,分区函数用于确定可能需要该中间结果集的reduce节点,分区函数的个数等于连接字段的个数,并且,各分区函数的取值个数的乘积等于reduce节点的总个数。

可选地,假设连接字段为m个,则为m个连接字段中第k个连接字段设置的分区函数hk(x)可以为:

hk(x)=hk(x)modnk;

其中,x为中间结果集中连接字段的取值,hk(x)为对x求的哈希值,nk为对中间结果集进行分区所选择的哈希值。

由上述公式可知,hk(x)的取值范围为0~nk-1,即hk(x)的取值个数为nk,这里,每一连接字段对应的分区函数的取值个数不是任意的,而是必须满足各分区函数的取值个数的乘积等于reduce节点的总个数。

并且,每一中间结果集对应的分区编号是按照指定顺序对h1(x)…hk(x)…hn(x)的取值进行组合得到的,其中,n为分区函数的个数,等于连接字段的个数m。

比如,可以按照<h1(x)…hk(x)…hn(x)>的顺序确定每一中间结果集对应的分区编号。

特别地,当某中间结果集中不包含第k个连接字段时,对该中间结果集求取的分区函数hk(x)的取值为nk种,依次为0,1,2…nk-1。

假设除了hk(x),其它分区函数都只有一种取值,则根据<h1(x)…hk(x)…hn(x)>的顺序确定中间结果集对应的分区编号时,中间结果集对应nk个分区编号,这nk个分区编号分别为:<h1(x)…0…hn(x)>,<h1(x)…1…hn(x)>…<h1(x)…nk-1…hn(x)>。

进一步地,根据预先设置的分区编号与reduce节点之间的对应关系,确定中间结果集对应的nk个可能需要该中间结果集的reduce节点,将中间结果集分别发送给nk个reduce节点中的每一个reduce节点。

s203:对各reduce节点中的中间结果集进行汇总,得到多路数据集中满足所有连接字段的数据集。

这里,因为每一reduce节点中种包含有自己可能需要的所有中间结果集,因此,可以直接对各reduce节点中的中间结果集进行汇总,进而得到多路数据集中满足所有连接字段的数据集。在此过程中,不再存在从其它mapreduce任务中读取中间结果集的问题,并且能够在一次mapreduce任务中快速地完成对多路数据集的连接,显著提高mapreduce的作业效率。

本申请实施例中,接收多路数据集和对这多路数据集进行关联查询的连接字段信息,之后,对每一路数据集执行映射操作得到多个中间结果集,对每个中间结果集,根据为各连接字段设置的分区函数,确定该中间结果集对应的至少一个reduce节点,将该中间结果集发送给确定出的每一个reduce节点,最后对各reduce节点中的中间结果集进行汇总,得到这多路数据集中满足所有连接字段的数据集,其中,每一中间结果集都对应至少一个reduce节点,这至少一个reduce节点中的每一个reduce节点都有可能需要该中间结果集,因此,将该中间结果集发送给确定出每一个reduce节点,可以节省后续对中间结果集进行反复地读取和传送的操作,进而节省磁盘的io开销、降低网络通信代价,并且,本申请实施例中在一次mapreduce任务中可以完成多路数据集的连接任务,因此还可以显著提升mapreduce的作业效率。

实施例二

为了解决传统mapreduce框架在实现多路数据集的连接时存在的磁盘i/o开销大和网络通信代价大的问题,本申请实施例对现有mapreduce框架中的分区函数接口进行改造,改造后一个mapreduce任务可以完成多数据集的连接任务,并且满足所有连接字段的中间结果集都发送到同一个reduce节点中,以节省io开销和网络资源,算法效率显著提升。

本申请实施例的基本思想是:在利用mapreduce框架进行多路数据集的连接时,可以将多路数据集中满足连接条件的中间结果集都能发送到同一个reduce节点中进行连接处理,而不需要再将这多路数据集的连接任务进行拆分处理。

具体地,使用“一对多分区”策略改进的mapreduce框架在执行表的连接过程如图3所示,开始时,将对rst三个表的连接任务提交给mapreduce框架,在map阶段并行处理表rst中的数据:mapper_r类中的map()方法处理来自表r中的数据,mapper_s类中的map()方法处理来自表s中的数据,mapper_t类中的map()方法处理来自表t中的数据;在patition阶段,getpartition()方法对map()方法输出的键值对进行一对多分区;在reduce阶段,reducer对分到同一分区的数据执行连接操作,最后,reducer将连接结果写入hdfs文件中,流程结束。

下面以三个表的连接为例,对上述过程进行说明。

当前mapreduce任务中存在两个不同的连接字段a和b,在将mapper的输出向reducer的定向过程中,可以定义两个分区函数<h1(x),h2(x)>对三个数据集进行分区,分区函数的结果为reduce的序号,这里,具有相同reduce序号代表将多个mapper的中间结果集合并到一起,即将满足r.a=s.a并且s.b=t.b的mapper结果分到同一个reduce任务当中进行合并处理。

其中,h1(x)=h1(x)modn1,负责对字段r.a和s.a进行分区,x为表r和表s中字段a的取值,h1(x)代表对x求哈希值,n1代表对该key/value进行分区时选择的哈希桶值,且n1取值小于等于reduce的任务数n。

类似地,h2(x)=h2(x)modn2,负责对字段s.b和t.b进行分区,x为表s和表t中字段b的取值,h2(x)代表对x求哈希值,n2代表对该key/value进行分区时选择的哈希桶值,且n2取值小于等于reduce的任务数n。

由上述公式可知,h1(x)的个数有n1个、且取值范围为0~n1-1,h2(x)的个数有n2个、且取值范围为0~n2-1,此时,<h1(x),h2(x)>存在(n1×n2)种不同组合,这里,哈希值n1和n2不是随便取的,而是必须满足:n1×n2=n。

在具体实施过程中,若<h1(x),h2(x)>每一种取值对应同一个reduce节点,就可以将表r、s和t中满足a、b这两个连接字段的中间结果集都发送到同一个reduce节点上,从而节省了等待中间结果集、从磁盘中读取中间结果集的时间,因此,可以节省io开销和网络资源,提高mapreduce框架的计算效率。

下面结合具体的实施例对上述过程进行说明。

假设n=4,n1=2,n2=2,这里以最简单的情况h(x)=x,x表示连接字段的取值,对表r和表s而言连接字段就是a,对表s和表t而言连接字段就是b,那么<h1(x),h2(x)>存在<0,0>、<0,1>、<1,0>、<1,1>四种情况,每种情况代表一个reduce任务r0,r1,r2,r3。

如图4所示,假设<1,null>为r表中的键(key)值(value)对,可以理解为r表中的一行记录,其中,1为连接字段a的值,类似地,<1,(0,22.34)>为表s中的一个键值对,1为连接字段a的值,value中0为连接字段b的值,<0,’data’>为表t中的值,0为连接字段b的值。

根据上面分析可知h1(x)=1,由于表r中不存在h2(x)对应的分区字段,这时需要考虑h2(x)所有可能的情况,因此,可以将键值对<1,null>同时发送到r2:<1,0>和r3:<1,1>中。类似地,表s输出的键值对<1,(0,22.34)>中s.a=1,s.b=0,得h1(x)=1,h2(x)=0,因此,键值对<1,(0,22.34)>只需发送给r2:<1,0>中,表t的输出<0,’data’>被发送到r0:<0,0>和r2:<1,0>中。

也就是说,表r和表s只有一个共同的列,即第一列,表r中的一条记录<1,null>对应的h1(x)=1,对应h2(x)为字段b的所有可能,即h2(x)=0和h2(x)=1,所以<1,null>被同时分配到了reduce<1,0>和<1,1>组当中。

以此类推,如果是m个数据集关联查询,当连接条件中包含有m个不同的字段,可以用m个分区函数:

h(x)=<h1(x),…hm(x)>;

其中,每个分区函数hi(x)=hi(x)modni,i∈{1,2…m},负责对一个字段进行分区,并且所有哈希值ni必须满足以下条件:

n为reduce任务个数。

实施例三

基于同一发明构思,本申请实施例中还提供了一种与基于映射归约的数据处理方法对应的基于映射归约的数据处理装置,由于该装置解决问题的原理与本申请实施例基于映射归约的数据处理方法相似,因此该装置的实施可以参见方法的实施,重复之处不再赘述。

如图5所示,为本申请实施例提供的基于映射归约的数据处理装置结构图,包括:

接收模块501,用于接收多路数据集和对所述多路数据集进行关联查询的连接字段信息;

发送模块502,用于对每一路数据集执行映射操作得到多个中间结果集,对每个中间结果集,根据为各连接字段设置的分区函数,确定该中间结果集对应的至少一个reduce节点,将该中间结果集发送给所述至少一个reduce节点中的每一个reduce节点;

汇总模块503,用于对各reduce节点中的中间结果集进行汇总,得到所述多路数据集中满足所有连接字段的数据集。

可选地,发送模块502具体用于:

将所述中间结果集代入为每一连接字段设置的分区函数,得到所述中间结果集对应的分区函数值;

根据所述中间结果集对应的各分区函数值,确定所述中间结果集对应的至少一个分区编号;

根据所述中间结果集对应的至少一个分区编号、以及预先设置的分区编号与reduce节点之间的对应关系,确定所述中间结果集对应的至少一个reduce节点;

其中,分区函数的个数等于连接字段的个数,且各分区函数的取值个数的乘积等于reduce节点的总个数。

可选地,所述连接字段为m个,为m个连接字段中第k个连接字段设置的分区函数hk(x)为:

hk(x)=hk(x)modnk;

其中,x为中间结果集中所述连接字段的取值,hk(x)为对x求的哈希值,nk为对所述中间结果集进行分区所选择的哈希值。

可选地,当中间结果集中不包含第k个连接字段时,分区函数hk(x)的取值为nk种,依次为0,1,2…nk-1。

可选地,所述中间结果集对应的分区编号是按照指定顺序对h1(x)…hk(x)…hn(x)的取值进行组合得到的,其中,n为分区函数的个数。

实施例四

如图6所示,为本申请实施例提供的用于实现基于映射归约的数据处理方法的电子设备的硬件结构示意图,包括至少一个处理单元601、以及至少一个存储单元602,其中,存储单元存储有程序代码,当程序代码被所述处理单元执行时,使得电子设备执行上述基于映射归约的数据处理方法的步骤。

实施例五

本申请实施例提供的一种计算机可读存储介质,包括程序代码,当所述程序代码在电子设备上运行时,使电子设备执行上述基于映射归约的数据处理方法的步骤。

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

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

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

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

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

显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1