本发明涉及计算机技术领域,尤其涉及一种基于多核cpu的分布式集群系统及数据连接方法。
背景技术:
互联网技术和相关应用的飞速发展带来了数据的爆炸式增长,数据库规模从千比特(kb)、兆比特(mb)级飞跃到吉比特(gb)、太比特(tb)级甚至到皆比特(eb)、佑比特(zb)级,海量的数据给数据分析相关工作带来了巨大的挑战,其中连接查询又是大规模数据分析中最重要和最基本操作之一,其性能直接关系到数据库的查询效率。
现有技术中提出了一种将哈希连接应用于大规模集群计算的方法,该方法利用mpi(message-passing-interface消息传递接口)和rdma(remotedirectmemoryaccess,远程直接数据存取)技术,在超大规模计算机集群上进行哈希连接操作,使得数据可以直接通过网络进行传递而不对操作系统造成任何影响,消除了外部存储器复制和文本交换操作。这种算法使得哈希连接在计算机集群系统上得以更高效地应用,大大提高了计算机处理海量数据的能力。
然而,这种方法提高了集群系统整体的并行处理能力,重点在于利用rdma技术降低了计算机间的数据交流代价,而没有挖掘单个处理节点的并行处理能力。但随着多核cpu的普及和并行处理技术的成熟,单机系统的并行处理能力已不容小视,单个处理节点的性能提升也将对整个集群系统的提升有着巨大的推动作用。
技术实现要素:
本发明要解决的技术问题是,针对现有大规模集群数据处理方法没有挖掘单个处理节点的并行处理能力的缺陷,提供一种基于多核cpu的分布式集群系统及数据连接方法,将映射规约模型应用于多核cpu上,将单机的多线程并行连接算法与已有的分布式集群系统上的并行运算模型相结合,提高分布式集群系统的计算能力。
本发明第一方面,提供了一种基于多核cpu的分布式集群系统,包括:
映射服务器,包括至少一台具有多核cpu的计算机,用于在映射任务的进程内部启动n个映射线程,并以所述映射服务器中每个核心作为一个对应计算节点对所述n个映射线程进行并行计算;其中每个映射线程从共享内存预先分配的缓冲区中读取对应的数据分片vi,1≤i≤n,记录源表的连接属性和查询属性,生成键值对,并对所述连接属性建立各自的哈希表;
规约服务器,包括至少一台具有多核cpu的计算机,用于在规约任务的进程内部启动m个规约线程,并以所述规约服务器中每个核心作为一个对应计算节点对所述m个规约线程进行并行计算;其中每个规约线程用于查找所述哈希表,从多个哈希表中分别获取属于自己的中间数据集,并对所述中间数据集进行比较连接。
在根据本发明所述的基于多核cpu的分布式集群系统中,所述映射服务器预先将输入数据分成n等份,并分别存储至n个缓冲区,使每个映射线程对应一个缓冲区。
在根据本发明所述的基于多核cpu的分布式集群系统中,所述分布式集群系统内计算机之间的数据迁移采用远程直接数据存取方式,并采用消息传递接口进行编程实现通信。
在根据本发明所述的基于多核cpu的分布式集群系统中,所述映射服务器还用于对映射服务器的集群中空闲资源cpu核数进行采集统计,并实时更新空闲资源cpu核数,对映射线程进行并行处理。
在根据本发明所述的基于多核cpu的分布式集群系统中,所述规约服务器还用于对规约服务器的集群中空闲资源cpu核数进行采集统计,并实时更新空闲资源cpu核数,对规约线程进行并行处理。
本发明第二方面,提供了一种基于多核cpu的分布式集群系统的数据连接方法,所述基于多核cpu的分布式集群系统包括映射服务器和规约服务器,且所述映射服务器包括至少一台具有多核cpu的计算机,所述规约服务器包括至少一台具有多核cpu的计算机,所述数据连接方法包括:
映射步骤,在映射任务的进程内部启动n个映射线程,并以所述映射服务器中每个核心作为一个对应计算节点对所述n个映射线程进行并行计算;其中每个映射线程从共享内存预先分配的缓冲区中读取对应的数据分片vi,1≤i≤n,记录源表的连接属性和查询属性,生成键值对,并对所述连接属性建立各自的哈希表;
规约步骤,在规约任务的进程内部启动m个规约线程,并以规约服务器中每个核心作为一个对应计算节点对所述m个规约线程进行并行计算;其中每个规约线程用于查找所述哈希表,从多个哈希表中分别获取属于自己的中间数据集,并对所述中间数据集进行比较连接。
在根据本发明所述的基于多核cpu的分布式集群系统的数据连接方法中,所述映射步骤还包括:预先将输入数据分成n等份,并分别存储至n个缓冲区,使每个映射线程对应一个缓冲区。
在根据本发明所述的基于多核cpu的分布式集群系统的数据连接方法中,所述分布式集群系统内计算机之间的数据迁移采用远程直接数据存取方式,并采用消息传递接口进行编程实现通信。
在根据本发明所述的基于多核cpu的分布式集群系统的数据连接方法中,所述映射步骤还包括对映射服务器的集群中空闲资源cpu核数进行采集统计,并实时更新空闲资源cpu核数,对映射线程进行并行处理。
在根据本发明所述的基于多核cpu的分布式集群系统的数据连接方法中,所述规约步骤还包括对规约服务器的集群中空闲资源cpu核数进行采集统计,并实时更新空闲资源cpu核数,对规约线程进行并行处理。
实施本发明的基于多核cpu的分布式集群系统系统及数据连接方法,具有以下有益效果:本发明将单机的多线程并行连接算法与分布式集群系统上的并行运算模型相结合,使得多核计算机更能有效利用其硬件资源,最大限度地挖掘集群系统的运算潜能,发挥出更多的性能优势;进一步地,本发明在单机系统上应用多线程并行操作时,为了避免共用内存产生的操作竞争,采用了预先划分数据片,每个线程独占一个缓存区的方式来避免线程间产生竞争,这种方式较之于传统的加锁方式,减小了开销。
附图说明
图1为根据本发明优选实施例的基于多核cpu的分布式集群系统的结构图;
图2为根据本发明优选实施例的基于多核cpu的分布式集群系统的数据连接方法示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
哈希连接(hashjoin)是连接操作中广泛使用的一种简单高效的算法,在映射规约(mapreduce)计算框架中一个完整的hashjoin包括映射(map)、混洗(shuffle)和规约(reduce)三个阶段。本发明在多核cpu中,可采用多线程的方式完成每一个阶段,提高了cpu的利用率。混洗(shuffle)用于将数据从映射端输出到规约端。
请参阅图1,为根据本发明优选实施例的基于多核cpu的分布式集群系统的结构图。如图1所示,该实施例提供的基于多核cpu的分布式集群系统包括:映射服务器100和规约服务器200。下面结合参阅图2对本发明的系统进行详细描述,该图2为根据本发明优选实施例的基于多核cpu的分布式集群系统的数据连接方法示意图。
映射服务器100包括至少一台具有多核cpu的计算机。映射服务器100用于在映射任务的进程内部启动n个映射线程,如图2中映射线程1至映射线程n,并以映射服务器100中每个核心作为一个对应计算节点对这n个映射线程进行并行计算。其中每个映射线程从共享内存预先分配的缓冲区中读取对应的数据分片,例如映射线程i从预先分配的缓冲区中读取对应的数据分片vi,1≤i≤n,n为映射线程的总数。映射线程在读取各自的数据分片后记录源表的连接属性和查询属性,生成键值对,并对连接属性建立各自的哈希表。如图2中映射线程1至映射线程n分别独立建立了哈希表1至哈希表n。也就是说,在多线程连接操作过程中,映射任务(maptask)在其进程内部启动n个线程,又称为规约线程,通过这n个规约线程并行地进行连接操作来实现映射(map)端连接操作的多线程化。即在映射(map)阶段中,每个线程维护一个独立的哈希表,并行地从任务队列中取出任务,对元组在连接属性上做哈希运算,并存入到对应的哈希桶中。
由于所有线程共享同一内存,因此在读取数据时存在严重的竞争。为了避免竞争,本发明在映射操作前首先对数据进行预处理:假设共有n个映射线程同时工作,则将输入数据分成n等份,并维护n个缓冲区,每个映射线程独占一个缓冲区。这是一种空间换时间的策略,既避免了多个线程间的读冲突,而且较之于传统的加锁操作节省了同步开销。
规约服务器200包括至少一台具有多核cpu的计算机。该规约服务器200与映射服务器100连接,使得映射服务器100产生哈希表的数据可通过例如混洗(shuffle)操作传输到规约服务器200。用于在规约任务的进程内部启动m个规约线程,如图2中规约线程1至规约线程n,并以规约服务器中每个核心作为一个对应计算节点对这m个规约线程进行并行计算。其中每个规约线程用于查找映射服务器100建立的所有哈希表,如哈希表1至哈希表n,从所有哈希表中分别获取属于自己的中间数据集,并对该中间数据集进行比较连接。多个规约线程在运行完成后得到最终关系表。也就是说,在规约(reduce)阶段,每个规约任务(reducetasek)从存储着多个哈希表的中间缓冲区中分别拉取属于自己的中间数据集,对中间数据集进行排序、连接等规约操作。
因此,本发明在整个数据连接过程中,映射服务器100和规约服务器200的每个核心都被当作一个对应计算节点进行并行计算,并且多个线程共享同一内存,降低了数据间的通信代价。
在本发明中,分布式集群系统内各个计算机之间的数据迁移可以采用远程直接数据存取(rdma,remotedirectmemoryaccess)方式,并采用消息传递接口(mpi,message-passing-interface)进行编程实现通信。使得数据可以直接通过网络进行传递而不对操作系统造成任何影响,消除了外部存储器复制和文本交换操作,加快了集群系统的运算速度。
在本发明更优选的实施例中,映射服务器100还可以对映射服务器100的集群中空闲资源cpu核数进行采集统计,并实时更新空闲资源cpu核数,对映射线程进行并行处理。例如发现有新任务到达时,首先判断是否当前集群是否有空闲cpu核可以利用,如果没有,则回到线程继续等待;如果有可以利用的空闲核资源,则将新任务加上任务名后连同数据一起打包到计算节点请求计算,更新平台总空闲资源cpu核数为当前集群中空闲资源cpu核数减去该任务占用核数。同样地,规约服务器200也可以对规约服务器200的集群中空闲资源cpu核数进行采集统计,并实时更新空闲资源cpu核数,对规约线程进行并行处理。
本发明还提供了一种基于多核cpu的分布式集群系统的数据连接方法,其中基于多核cpu的分布式集群系统如前所述,包括映射服务器100和规约服务器200,且映射服务器100包括至少一台具有多核cpu的计算机,规约服务器200包括至少一台具有多核cpu的计算机。该基于多核cpu的分布式集群系统的数据连接方法包括:
(1)映射步骤:由映射服务器100在映射任务的进程内部启动n个映射线程,并以映射服务器100中每个核心作为一个对应计算节点对所述n个映射线程进行并行计算;其中每个映射线程从共享内存预先分配的缓冲区中读取对应的数据分片vi,1≤i≤n,记录源表的连接属性和查询属性,生成键值对,并对所述连接属性建立各自的哈希表。优选地,该映射步骤还包括:预先将输入数据分成n等份,并分别存储至n个缓冲区,使每个映射线程对应一个缓冲区。
(2)规约步骤:由规约服务器200在规约任务的进程内部启动m个规约线程,并以规约服务器200中每个核心作为一个对应计算节点对所述m个规约线程进行并行计算;其中每个规约线程用于查找所述哈希表,从多个哈希表中分别获取属于自己的中间数据集,并对中间数据集进行比较连接。
在本发明更优选的实施例中,映射步骤中还可以对映射服务器100的集群中空闲资源cpu核数进行采集统计,并实时更新空闲资源cpu核数,对映射线程进行并行处理。同样地,规约步骤中也可以对规约服务器200的集群中空闲资源cpu核数进行采集统计,并实时更新空闲资源cpu核数,对规约线程进行并行处理。并且分布式集群系统内计算机之间的数据迁移采用远程直接数据存取方式,并采用消息传递接口进行编程实现通信。
综上所述,本发明将单机的多线程并行连接算法与分布式集群系统上的并行运算模型相结合,使得多核计算机更能有效利用其硬件资源,最大限度地挖掘集群系统的运算潜能,发挥出更多的性能优势。对于每一台计算机,将cpu上的每个核心或者硬件线程都当作一个对应计算节点,在映射规约(mapreduce)框架下进行多线程并行计算充分利用了每台计算机的储存能力和多核cpu的并行处理能力,提高了对每个计算节点的利用率;对于整个集群系统,采用mpi和rdma技术进行通信,消除外部存储器的存储、复制和交换操作。二者结合,大大提高了整个集群系统的运算能力。进一步地,本发明在单机系统上应用多线程并行操作时,为了避免共用内存产生的操作竞争,采用了预先划分数据片,每个线程独占一个缓存区的方式来避免线程间产生竞争,这种方式较之于传统的加锁方式,减小了开销。
应该理解地是,本发明的基于多核cpu的分布式集群系统以及其数据连接方法的实现原理与过程相同,因此对基于多核cpu的分布式集群系统的实施例的具体描述也适用于基于多核cpu的分布式集群系统的数据连接方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。