一种基于流水线的分布式多表连接方法及系统与流程

文档序号:11177300阅读:933来源:国知局
一种基于流水线的分布式多表连接方法及系统与流程

本发明涉及分布式数据计算技术,尤其涉及一种基于流水线的分布式多表连接方法及系统。



背景技术:

大数据时代的到来,带动了数据量的迅猛增长,急需一种技术来存储和处理如此庞大的数据量,由此,谷歌的dfs(分布式文件系统)和分布式计算模型mapreduce(映射和规约)应运而生,如今分布式计算技术已成为海量数据存储分析的主流技术。对于海量数据分析,连接查询是一种重要的操作,并且在实际应用时,所需的数据可能不仅仅局限于某一个表,而是涉及到多个表,这给连接操作带来了一定的难度。

在执行连接查询之前,首先要对相应数据进行分割,通常的做法是对数据进行哈希分割或范围分割。现有技术中提出了一种自适应的分割方法。此方法使用了一种双阶段的分割算法对数据进行了基于属性的分割:第一阶段,依据连接属性对最顶层数据进行分割;第二阶段,依据数据规模和规约器(reduce)个数对底层数据进行进一步的分割。这样的分割算法保证了每一个分割树都包含单一的连接属性。当这种自适应的分割算法检测到一个包含着新的连接属性的输入查询时,它将以同样的双阶段方法生成一个新的分割树,该分割树以新的查询操作包含的连接属性为划分依据,并且初始状态为空。随着查询操作的进行,这种分割算法将随机地从旧的分割树中选取适当规模的数据进行重分割,并逐渐地将数据移动到新的分割树中,直至新的分割树中包含的数据满足新的查询操作。这种基于双阶段的自适应分割算法可以有效地对数据进行基于连接属性的分割,并且避免了出现包含新的连接属性的查询操作时,全部数据的重新分割,实现了自适应。

然而,这种自适应分割算法主要针对两表连接的情况,如将其应用于多表连接上,则需要首先执行前两个表的连接操作,再把连接的结果看作一个新的表,和下一个表进行连接,以此类推,直到完成所有表的连接。显然这会产生大量的中间结果,造成很大的i/o开销,是一种效率极低的方法,而在实际应用中,多表连接又是非常常见的操作。



技术实现要素:

本发明要解决的技术问题是,针对现有的数据分割方法在应用于对多表进行连接时效率低的缺陷,提供一种基于流水线的分布式多表连接方法及系统。

为了解决上述技术问题,本发明提供了一种基于流水线的分布式多表连接方法,该方法包括并行执行的以下步骤:

a、映射处理单元从分布式文件系统读取待连接表,将所述待连接表进行映射处理后得到对应的数据块,并以每两个待连接表为一组,将第一组表的数据块输出至第一规约处理单元,将第二组至末尾组表的数据块按序输出至第二规约处理单元;

b、第二规约处理单元按序读取第二组至末尾组表的数据块,并对每组表的两个数据块进行哈希连接得到每组表的两表连接结果;

c、第一规约处理单元读取第一组表的两个数据块进行哈希连接后作为初始的多表连接结果,并在等待第二规约处理单元完成一组表的哈希连接后,将当前的多表连接结果与该组表的两表连接结果进行顺序连接以更新多表连接结果,直至所有组表完成连接后输出多表连接结果。

在根据本发明所述的基于流水线的分布式多表连接方法中,所述步骤a包括以下步骤:

在t1时刻,映射处理单元读取待连接表t1至t4,对所述待连接表t1至t4进行映射处理后得到对应的数据块b1至b4,并将第一组表的数据块b1和b2输出至所述第一规约处理单元,将第二组表的数据块b3和b4输出至所述第二规约处理单元;

在ti时刻,其中i=2,3,…,j-1,j为待连接表的组数;映射处理单元读取待连接表t2i+1和t2i+2,对所述待连接表t2i+1和t2i+2进行映射处理后得到第i+1组表的数据块b2i+1至b2i+2,并输出至第二规约处理单元。

在根据本发明所述的基于流水线的分布式多表连接方法中,所述步骤b包括以下步骤:在ti时刻,其中i=2,3,…,j;第二规约处理单元读取第i组表的数据块b2i-1至b2i进行哈希连接后得到第i组表的两表连接结果hi。

在根据本发明所述的基于流水线的分布式多表连接方法中,所述步骤c包括以下步骤:

在t2时刻,第一规约处理单元读取第一组表的数据块b1至b2进行哈希连接后作为初始的多表连接结果s1;

在ti时刻,其中i=3,4,…,j+1;第一规约处理单元在等待第二规约处理单元完成第i-1组表的哈希连接后,将当前的多表连接结果si-2与第i-1组表的两表连接结果hi-1进行顺序连接得到更新的多表连接结果si-1。

在根据本发明所述的基于流水线的分布式多表连接方法中,所述步骤a中还包括:在判断待连接表的总数n为奇数时,在待连接表中增加一个空表,且待连接表的组数在判断待连接表的总数n为偶数时,待连接表的组数

在根据本发明所述的基于流水线的分布式多表连接方法中,所述步骤a的映射处理为自适应的双阶段分割。

在根据本发明所述的基于流水线的分布式多表连接方法中,所述自适应的双阶段分割包括:在第一阶段依据连接属性对顶层数据进行分割;在第二阶段依据数据规模和规约器的个数对底层数据进行分割。

本发明还提供了一种基于流水线的分布式多表连接系统,包括:

映射处理单元,用于从分布式文件系统读取待连接表,将所述待连接表进行映射处理后得到对应的数据块,并以每两个待连接表为一组,将第一组表的数据块输出至第一规约处理单元,将第二组至末尾组表的数据块按序输出至第二规约处理单元;

第二规约处理单元,用于按序读取所述第二组至末尾组表的数据块,并对每组表的两个数据块进行哈希连接得到每组表的两表连接结果;

第一规约处理单元,用于读取第一组表的两个数据块进行哈希连接后作为初始的多表连接结果,并在等待第二规约处理单元完成一组表的哈希连接后,将当前的多表连接结果与该组表的两表连接结果进行顺序连接以更新多表连接结果,直至所有组表完成连接后输出多表连接结果。

在根据本发明所述的基于流水线的分布式多表连接系统中,所述映射处理单元还在判断待连接表的总数n为奇数时,在待连接表中增加一个空表,则待连接表的组数在判断待连接表的总数n为偶数时,待连接表的组数

在根据本发明所述的基于流水线的分布式多表连接系统中,所述映射处理单元执行的映射处理为自适应的双阶段分割。

实施本发明的基于流水线的分布式多表连接方法及系统,具有以下有益效果:本发明通过并行执行的流水线实现多表连接,采用调度器对流水线中的多个任务进行有序、高效的调度,避免了两两连接中产生过多中间结果、i/o开销过大的情况,可以快速高效地实现多个表的连接。

附图说明

图1为根据本发明的基于流水线的分布式多表连接系统的结构图;

图2为根据本发明的基于流水线的分布式多表连接方法的任务流水线图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明提供了一种基于流水线的分布式多表连接方法,通过并行执行两条流水线,既实现了查询操作时的自适应分割,又能快速高效的完成。

请参阅图1,为根据本发明的基于流水线的分布式多表连接系统的结构图。mapreduce(映射规约)是现有应用于大规模数据处理的一种系统架构,至少包括映射处理(map)和规约处理(reduce)。该基于流水线的分布式多表连接系统至少包括:映射处理单元map、第一规约处理单元r1和第二规约处理单元r2。其中映射处理单元map用于从分布式文件系统hdfs读取初始数据,并进行映射处理后,产生中间数据存入随机存储器(ram),随后通过合并(combine)和分区(partitioner),输出中间结果至对应规约分区的对应缓冲区,如图1中的d1和d2。第一规约处理单元r1和第二规约处理单元r2分别从各自对应的分区读取数据并完成规约处理。本发明中的映射处理单元map、第一规约处理单元r1和第二规约处理单元r2均可以由各自的机器集群实现,分别称为映射机器群、第一规约机器群和第二规约机器群。

本发明第一方面,提供了一种基于流水线的分布式多表连接方法。主要包括并行执行的以下步骤:

a、映射处理单元map从分布式文件系统读取待连接表,将待连接表进行映射处理后得到对应的数据块,并以每两个待连接表为一组,将第一组表的数据块输出至第一规约处理单元r1,将第二组至末尾组表的数据块按序输出至第二规约处理单元r2。该步骤中映射处理为,所述步骤a的映射处理为自适应的双阶段分割。该自适应的双阶段分割包括:首先,在第一阶段依据连接属性对顶层数据进行分割;其次,在第二阶段依据数据规模和规约(reduce)器的个数对底层数据进行进一步的分割。这样的分割算法保证了每一个分割树都包含单一的连接属性。当查询操作中出现新的连接属性时,以同样的双阶段方法生成一个包含新连接属性的分割树,随着查询操作的进行随机地从旧的分割树中选取适当规模的数据进行重分割,并逐渐地将数据移动到新的分割树中,直至新的分割树中包含的数据满足新的查询操作。

假设读取的待连接表为t1、t2、t3、t4……tn,n为待连接表的总数,将待连接表以两个为一组划分为j组表。在本发明的一种优选实施方式中,在向分布式文件系统输入待连接表t1至tn时,便检测如n是否为奇数,如果是则增加一个空表。在本发明的另一种优选实施方式中,步骤a在分组时还包括以下步骤:在判断待连接表的总数n为奇数时,在待连接表中增加一个空表,则待连接表的组数当判断待连接表的总数n为偶数时,待连接表的组数随后,分时将各组表进行映射处理后输出,例如采用双阶段分割后得到各自的数据块并输出。具体步骤如下:

在t1时刻,映射处理单元map读取待连接表t1至t4,对待连接表t1至t4进行自适应的双阶段分割后得到对应的数据块b1至b4,并将第一组表的数据块b1和b2输出至第一规约处理单元r1,将第二组表的数据块b3和b4输出至所述第二规约处理单元r2。

在ti时刻,其中i=2,3,…,j-1,j为待连接表的组数;映射处理单元map读取待连接表t2i+1和t2i+2,对所述待连接表t2i+1和t2i+2进行映射处理后得到第i+1组表的数据块b2i+1至b2i+2,并输出至第二规约处理单元r2。

b、第二规约处理单元r2按序读取第二组至末尾组表的数据块,并对每组表的两个数据块进行哈希连接得到每组表的两表连接结果。

该步骤b包括分时执行的以下步骤:

在ti时刻,其中i=2,3,…,j;第二规约处理单元r2读取第i组表的数据块b2i-1至b2i进行哈希连接后得到第i组表的两表连接结果hi。

c、第一规约处理单元r1读取第一组表的两个数据块进行哈希连接后作为初始的多表连接结果,并在等待第二规约处理单元r2完成一组表的哈希连接后,将当前的多表连接结果与该组表的两表连接结果进行顺序连接以更新多表连接结果,直至所有组表完成连接后输出多表连接结果。

该步骤c包括分时执行的以下步骤:

在t2时刻,第一规约处理单元r1读取第一组表的数据块b1至b2进行哈希连接后作为初始的多表连接结果s1。

在ti时刻,其中i=3,4,…,j+1;第一规约处理单元r1在等待第二规约处理单元r2完成第i-1组表的哈希连接后,将当前的多表连接结果si-2与第i-1组表的两表连接结果hi-1进行顺序连接得到更新的多表连接结果si-1。该顺序连接是指先读取待连接表中的所有key值,再选择key值相同的进行连接操作。

因此,本发明通过双阶段的方法对数据进行动态的划分,并且并行执行两条mapreduce任务流水线,采用调度器对流水线中的多个mapreduce任务进行有序、高效的调度,最终实现自适应的多表连接。本发明的任务流水线图如图2所示,包括以下步骤:

步骤一:在t1时刻,映射处理单元map从hdfs上读取待连接表t1、t2、t3、t4,在t1时间段内完成对这四个表的自适应的双阶段分割,得到对应的数据块b1、b2、b3、b4,并将第一组表的数据块b1和b2输出至所述第一规约处理单元r1,将第二组表的数据块b3和b4输出至所述第二规约处理单元r2。

步骤二:在t2时刻,映射处理单元map完成对待连接表t5、t6的双阶段分割得到数据块b5、b6,同时第一规约处理单元r1完成对数据块b1、b2的哈希连接,得到第1组表的两表连接结果作为初级的多表连接结果s1;第二规约处理单元r2完成对数据块b3、b4的哈希连接操作,得到第2组表的两表连接结果h2。

步骤四:在t3时刻,映射处理单元map完成对待连接表t7、t8的双阶段分割得到数据块b7、b8;同时第一规约处理单元r1将初级的多表连接结果s1和两表连接结果h2进行顺序连接后得到多表连接结果s2;同时在第二规约处理单元r2上完成对b5、b6的哈希连接,得到第3组表的两表连接结果h3。

步骤五:在t4时刻,映射处理单元map完成对待连接表t9、t10的双阶段分割得到数据块b9、b10;同时第一规约处理单元r1完成s2和h3的顺序连接得到多表连接结果s3;同时第二规约处理单元r2上完成对b7、b8的哈希连接,得到第4组表的两表连接结果h4。

步骤六:以此类推,流水线一直运行下去,直到完成所有表的连接。

也就是说,为了控制集群中机器的任务分配,本发明引入一个调度器来控制流水线上各个操作执行的时间点,该调度器维护着一个记录集群中所有机器信息的调度表,该调度表记录着机器执行何种任务以及机器是否忙碌等信息。映射处理单元执行的是所有表的双阶段分割操作,当映射处理单元执行完一组表的分割操作后,调度器按顺序把下一组表发送给它继续执行。第一规约处理单元r1执行的是b1、b2数据块的哈希连接和所有表的顺序连接操作。当第一规约处理单元r1完成b1、b2的哈希连接后,它向调度器询问第二规约处理单元r2上b3、b4的哈希连接是否也已完成连接,若完成则第一规约处理单元r2接着执行s1和h2的顺序连接,否则进入等待状态,并持续向调度器发起询问,直到第二规约处理单元r2完成连接。第二规约处理单元r2执行的是除b1、b2外其他所有表的哈希连接。

本发明还相应提供了上述基于流水线的分布式多表连接系统。

其中映射处理单元map从分布式文件系统读取待连接表,将待连接表进行映射处理后得到对应的数据块,并以每两个待连接表为一组,将第一组表的数据块输出至第一规约处理单元r1,将第二组至末尾组表的数据块按序输出至第二规约处理单元r2。该映射处理单元map的实现原理及过程与前述方法中步骤a一致。

第二规约处理单元r2与映射处理单元map连接,用于按序读取第二组至末尾组表的数据块,并对每组表的两个数据块进行哈希连接得到每组表的两表连接结果。该第二规约处理单元r2的实现原理及过程与前述方法中步骤b一致。

第一规约处理单元r1与映射处理单元map连接,用于读取第一组表的两个数据块进行哈希连接后作为初始的多表连接结果,并在等待第二规约处理单元r2完成一组表的哈希连接后,将当前的多表连接结果与该组表的两表连接结果进行顺序连接以更新多表连接结果,直至所有组表完成连接后输出多表连接结果。该第一规约处理单元r1的实现原理及过程与前述方法中步骤c一致。

在本发明优选地实施方式中,该系统中还可以包括作业调度单元,用于存储调度表,并根据该调度表发送指令控制系统中其它单元的任务调度,实现调度器的功能。相应地,第二规约处理单元r2在对每组表的两个数据块进行哈希连接得到每组表的两表连接结果后返回完成信息给作业调度单元。第一规约处理单元r1在读取第一组表的两个数据块进行哈希连接后作为初始的多表连接结果后,向作业调度单元询问第二规约处理单元r2是否完成一组表的哈希连接,否则继续等待,是则将当前的多表连接结果与该组表的两表连接结果顺序连接以更新多表连接结果,直至所有组表完成连接后输出多表连接结果。

综上所述,本发明在规约机器群中进行的哈希连接不同于传统的依据key值进行的顺序连接,而是将待连接的数据库bi、bi+1中的bi构建哈希表,再将哈希表与bi+1进行连接,这将大大减少读取磁盘的次数。因此本发明采用流水线模型将自适应的双阶段分割方法应用于多表连接上,通过并行执行两条任务流水线,采用调度器对流水线中的多个mapreduce任务进行有序、高效的调度,避免了两两连接中产生过多中间结果,i/o开销过大的情况,可以快速高效地实现多个表的连接。并且与传统的依据key值或依据范围的分割算法相比,这种方法既保证了每一个数据树都有唯一的连接属性,又具有自适应的特点。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

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