大规模图数据处理方法

文档序号:6543715阅读:220来源:国知局
大规模图数据处理方法
【专利摘要】本发明公开了一种大规模图数据处理方法,用于解决现有大规模图数据处理方法效率低的技术问题。技术方案是将每个并行作业转换为一系列全局迭代作业,每次迭代分为计算、全局通信和栅栏同步三个有序阶段。计算分为全局计算和本地计算,其中本地计算由一系列连续的内部迭代组成;全局通信阶段每个工作节点把当前全局迭代的消息发送给进行下一次全局迭代的工作节点;栅栏同步阶段主节点等待所有工作节点消息传递完成,然后开始下一次全局迭代。由于处理过程采用了多次内部迭代,减少了全局迭代次数。对美国东北地区的公路数据处理单源最短路径需要迭代次数由【背景技术】的3800多次降低到25次;执行时间从【背景技术】的1200s减少为60s。
【专利说明】大规模图数据处理方法
【技术领域】
[0001]本发明涉及一种数据处理方法,特别是涉及一种大规模图数据处理方法。
【背景技术】
[0002]随着社交网络分析、生物信息网络分析、机器学习等新兴应用的快速增长,对上亿顶点级别大规模图的处理能力的需求愈加迫切。现有的大规模图数据处理方法主要有基于MapReduce模型和基于BSP模型的方法。
[0003]文献“Pregel:A System for Large-Scale Graph Processing, SIGMOD, 2010,P135-145”公开了一种基于BSP模型的方法。该方法由一系列全局迭代组成,在每次迭代过程中,每个图顶点接受上一次迭代发送的消息,然后修改自己的值,最后发送消息给邻接顶点。该方法能有效解决大规模图数据的处理问题,但收敛性较慢,并且通信代价很大。例如执行单源最短路径算法时,同步和通信时间要占总时间的80-90%,导致运行总时间过长,效率较低。
[0004]该方法对美国东北地区的公路数据处理单源最短路径需要迭代3800多次,执行时间为1200s。

【发明内容】

[0005]为了解决现有大规模图数据处理方法效率低的技术问题,本发明提供一种大规模图数据处理方法。该方法将每个并行作业转换为一系列全局迭代作业,每次迭代分为计算、全局通信和栅栏同步三个有序阶段。计算阶段分为全局计算和本地计算两部分,其中本地计算由一系列连续的内部迭代组成;全局通信阶段每个工作节点把当前全局迭代的消息发送给进行下一次全局迭代的工作节点;栅栏同步阶段主节点等待所有工作节点消息传递完成,然后开始下一次全局迭代。由于处理过程采用了多次内部迭代,减少了全局迭代次数;在全局通信时,只需要向临界顶点发送消息,降低了通信代价,减少了执行时间。
[0006]本发明解决其技术问题所采用的技术方案是:一种大规模图数据处理方法,其特点是采用以下步骤:
[0007]步骤一、数据分区和数据加载。输入有向图或无向图,采用邻接表形式存储,每个顶点有一个全局唯一的顶点ID。G=〈V,E>表示原图,V是顶点的集合,E是边的集合。在分区后把G分为k个子图分区=PpPfPk,并且P1 U P2 U…U Pk=V, V ,尸?ΠΡ广0。METIS
分区的结果是给每个顶点一个分区ID,为了保证数据加载时,每个分区上的子图能加载到同一个工作节点上,需要按照公式(I)对顶点ID进行修改。
[0008]U,=u*k+p(I)
[0009]式中,u为 顶点的ID,k为分区的数目,P表示顶点的分区ID,u’是修改后的顶点ID0
[0010]数据分区后进行数据加载。每个工作节点加载一个子图,k个子图分区对应k个工作节点。对各个工作节点进行一次数据再分布的过程,使工作节点Wi加载子图分区Pi的数据。
[0011]每个工作节点首先加载本地的子图数据加载到内存中,然后对加载的图数据进行一次再分布的过程,以确定消息通信时的路由地址。
[0012]工作节点Wi可能存储的是子图分区Pp再分布时按照公式(2)对匕上的每个顶点得到目的工作节点的序号i,然后把该顶点及其邻接表发送给目的工作节点Wi。
[0013]i=u’modk (I ^ i ^ k)(2)
[0014]步骤二、数据加载成功后,每个工作节点开始计算。计算阶段分为全局计算和本地计算两部分,其中本地计算由一系列连续的内部迭代组成。本地顶点参与本地计算,临界顶点参与全局计算。根据图顶点的定义,本地计算不需要与其他工作节点进行通信,全局计算需要与其他工作节点进行通信。
[0015]第一次全局迭代的全局计算时,每个顶点都是活跃的,调用它的compute方法。后续迭代的全局计算,只考虑临界顶点,每个临界顶点接受其他工作节点上的顶点在上一次全局迭代发送的消息,然后调用它的compute方法,最后向邻接顶点发送消息。全局计算完成后,每个工作节点不需要进行全局同步就直接进入本地计算阶段,开始对本地节点进行处理。
[0016]全局计算只有一次,而本地计算是由一系列连续的内部迭代组成,每个工作节点独立的进行内部迭代,不需要与其他工作节点进行消息传递和同步。当前内部迭代完成后,若还有活跃顶点或者有消息传递时,则直接开始下一次内部迭代;否则每个分区上本地计算就终止,开始进行全局通信。
[0017]步骤三、全局通信阶段。当本地计算完成后,就开始进行全局通信,每个顶点利用消息传递机制把当前全局迭代的消息发送给进行下一次全局迭代的顶点。在全局计算和本地计算过程中,缓存了向临界顶点发送的消息。在内部迭代完成后,只需要把所有缓存的消息在下一次全局迭代开始前发送到目的临界顶点。
[0018]步骤四、栅栏同步阶段。每个工作节点发送完消息后,就开始进入全局同步阶段。发送完消息的节点进入全局的栅栏,然后开始等待其他工作节点进入。等所有节点都进入全局的栅栏后,每个节点把收到的消息队列赋值给参与下一次计算的顶点,然后离开栅栏进入步骤二,开始进行下一次全局迭代的计算。后续迭代和第一次迭代相同,都有多次内部迭代。在同步完成后,若主节点发现每个工作节点上的顶点都不活跃并且工作节点间没有消息传递时,就结束整个作业,输出计算结果。
[0019]本发明的有益效果是:该方法将每个并行作业转换为一系列全局迭代作业,每次迭代分为计算、全局通信和栅栏同步三个有序阶段。计算阶段分为全局计算和本地计算两部分,其中本地计算由一系列连续的内部迭代组成;全局通信阶段每个工作节点把当前全局迭代的消息发送给进行下一次全局迭代的工作节点;栅栏同步阶段主节点等待所有工作节点消息传递完成,然后开始下一次全局迭代。由于处理过程采用了多次内部迭代,减少了全局迭代次数;在全局通信时,只需要向临界顶点发送消息,降低了通信代价。对美国东北地区的公路数据处理单源最短路径需要迭代次数由【背景技术】的3800多次降低到25次;同时通信量减少1000倍,执行时间从【背景技术】的1200s减少为60s。
[0020]下面结合附图和【具体实施方式】对本发明作详细说明。【专利附图】

【附图说明】
[0021]图1是本发明大规模图数据处理方法的流程图。
【具体实施方式】
[0022]参照图1。
[0023]该方法中有一个主节点和多个工作节点。主节点负责各工作节点的管理;分配和调度任务到所有工作节点;控制全局同步,在栅栏同步成功后,主节点会指示工作节点进行下一次全局迭代。工作节点用于执行具体的任务,同时负责消息的发送和接收;工作节点定期向主节点发送“心跳”信息,该信息包含每个工作节点的状态,可用的系统内存等。
[0024]该方法采用以顶点为中心进行编程,需要用户书重写顶点的compute方法,每个顶点的compute方法相同。针对不同的算法,顶点的compute方法不尽相同。但总体上分为三大步骤:(I)接收上一次迭代发送的消息;(2)更新顶点的值和状态;(3)向邻接顶点发送消息。在该方法中,用户只需要为顶点编程,不需要考虑整个分布式架构,该方法会自动调用用户书写的compute方法来完成对整个大图的计算。
[0025]1、数据分区和数据加载。输入有向图或无向图,采用邻接表形式存储,每个顶点有一个全局唯一的顶点ID。G=〈V, E>表不原图,V是顶点的集合,E是边的集合。在分区后把
G分为k个子图分区=PliPfPk,并且P1 U P2 U…U Pk=V, /i句’ PiO尸广0。METIS分区
的结果是给每个顶点一个分区ID,为了保证数据加载时,每个分区上的子图能加载到同一个工作节点上,需要按照公式(I)对顶点ID进行修改。
[0026]U,=u*k+p(I)
[0027]式中,u为顶点的ID,k为分区的数目,P表示顶点的分区ID,u’是修改后的顶点ID0
[0028]数据分区后,然后进行数据加载。每个工作节点加载一个子图,那么k个子图分区就对应k个工作节点。由于在分布式环境下,数据是分块后随机存储在工作节点上的,不能保证分区Pi的数据正好加载到工作节点Wi上,因此各个工作节点要进行一次数据再分布的过程,使工作节点Wi加载子图分区Pi的数据。
[0029]每个工作节点首先加载本地的子图数据加载到内存中,然后对加载的图数据进行一次再分布的过程,以确定消息通信时的路由地址。该步骤是根据哈希映射策略,将读入的数据重新分发到对应的工作节点,此后在该工作节点上参与计算。
[0030]工作节点Wi可能存储的是子图分区P」,再分布时按照公式(2)对Pj上的每个顶点得到目的工作节点的序号i,然后把该顶点及其邻接表发送给目的工作节点Wi。
[0031]i=u’modk (I ^ i ^ k)(2)
[0032]数据迁移过程中既有磁盘1/0又有网络通信,开销很大。但是一个作业仅需要一次数据迁移,在之后的迭代计算过程中,除了消息通信之外,不再需要进行数据的迁移。
[0033]2、数据加载成功后,每个工作节点开始计算。计算阶段分为全局计算和本地计算两部分,其中本地计算由一系列连续的内部迭代组成。根据图顶点的定义可知,本地计算不需要与其他工作节点进行通信,但全局计算恰恰相反。全局计算的计算过程和通信机制如下:
[0034](I)第一次全局迭代的全局计算时,每个顶点都是活跃的,调用它的compute方法。后续迭代的全局计算,只考虑临界顶点,每个临界顶点接受其他工作节点上的顶点在上一次全局迭代发送的消息,然后调用它的compute方法,最后向邻接顶点发送消息。
[0035](2)临界顶点计算完成后可能向本地顶点或临界顶点发送消息。若目标顶点是本地顶点,该消息会被本地计算的第I次内部迭代处理;若目标顶点是临界顶点,该消息会被缓存下来,等到当前全局迭代完成后进行全局通信时再发送,将在下一次全局迭代的全局计算阶段处理。
[0036](3)在该计算方法中,任何顶点收到消息后都会被自动激活,然后参与计算。由于临界顶点只能在全局同步后收到其他子图分区发送的消息,因此每次全局迭代的全局计算只有一次。
[0037]全局计算完成后,每个工作节点不需要进行全局同步就直接进入本地计算阶段,开始对本地节点进行处理。本地计算的计算过程和通信机制如下:
[0038](I)本地计算由一系列连续的内部迭代组成,每个工作节点独立的进行内部迭代,不需要与其他工作节点进行消息传递和同步。
[0039](2)第I次内部迭代接受来自该工作节点全局计算阶段的消息,调用本地顶点的compute方法,然后向邻接顶点发送消息。若目标顶点是本地顶点,该消息会被下一次内部迭代处理,与全局通信阶段不同,内部迭代直接通过内存完成消息传递;若目标顶点是临界顶点,则与全局计算阶段的处理相同。后续的内部迭代则接受该工作节点上一次内部迭代的消息。
[0040](3)当前内部迭代完成后,若还有活跃顶点或者有消息传递时,则直接开始下一次内部迭代;否则每个分区上本地计算就终止,开始进行全局通信。
[0041]3、全局通信阶段。当本地计算完成后,就开始进行全局通信,每个顶点利用消息传递机制把当前全局迭代的消息发送给进行下一次全局迭代的顶点。在全局计算和本地计算过程中,缓存了向临界顶点发送的消息。因此,在内部迭代完成后,只需要把所有缓存的消息在下一次全局迭代开始前发送到目的临界顶点。所以,该方法只需要为每次全局迭代进行一次分布式通信。
[0042]4、栅栏同步阶段。每个工作节点发送完消息后,就开始进入全局同步阶段。发送完消息的节点进入全局的栅栏,然后开始等待其他工作节点进入。等所有节点都进入全局的栅栏后,每个节点把收到的消息队列赋值给参与下一次计算的顶点,然后离开栅栏进入第2步,开始进行下一次全局迭代的计算。后续迭代和第一次迭代相同,都有多次内部迭代。在同步完成后,若主节点发现每个工作节点上的顶点都不活跃并且工作节点间没有消息传递时,就结束整个作业,输出计算结果。图1中进行了 m次全局迭代.[0043]总之,本方法采用多次内部迭代来减少全局迭代次数和通信量,与现在方法相比,计算效率提高很大。
【权利要求】
1.一种大规模图数据处理方法,其特征在于包括以下步骤: 步骤一、数据分区和数据加载;输入有向图或无向图,采用邻接表形式存储,每个顶点有一个全局唯一的顶点ID ;G=<V, E>表示原图,V是顶点的集合,E是边的集合;在分区后把G分为k个子图分区=P1, P2...Pk,并且P1 U P2 U…U Pk=V, V的,PiHi5广0; METIS分区的结果是给每个顶点一个分区ID,为了保证数据加载时,每个分区上的子图能加载到同一个工作节点上,需要按照公式(I)对顶点ID进行修改; U,=U 氺 k+p(I)式中,u为顶点的ID, k为分区的数目,P表示顶点的分区ID, U’是修改后的顶点ID ;数据分区后进行数据加载;每个工作节点加载一个子图,k个子图分区对应k个工作节点;对各个工作节点进行一次数据再分布的过程,使工作节点Wi加载子图分区Pi的数据;每个工作节点首先加载本地的子图数据加载到内存中,然后对加载的图数据进行一次再分布的过程,以确定消息通信时的路由地址; 工作节点Wi可能存储的是子图分区Pp再分布时按照公式(2)对&上的每个顶点得到目的工作节点的序号i,然后把该顶点及其邻接表发送给目的工作节点Wi ;i=u’modk (I ≤ i ≤ k)(2) 步骤二、数据加载成功后,每个工作节点开始计算;计算阶段分为全局计算和本地计算两部分,其中本地计算由一系列连续的内部迭代组成;本地顶点参与本地计算,临界顶点参与全局计算;根据图顶点的定义,本地计算不需要与其他工作节点进行通信,全局计算需要与其他工作节点进行通信; 第一次全局迭代的全局计算时,每个顶点都是活跃的,调用它的compute方法;后续迭代的全局计算,只考虑临界顶点,每个临界顶点接受其他工作节点上的顶点在上一次全局迭代发送的消息,然后调用它的compute方法,最后向邻接顶点发送消息;全局计算完成后,每个工作节点不需要进行全局同步就直接进入本地计算阶段,开始对本地节点进行处理; 全局计算只有一次,而本地计算是由一系列连续的内部迭代组成,每个工作节点独立的进行内部迭代,不需要与其他工作节点进行消息传递和同步;当前内部迭代完成后,若还有活跃顶点或者有消息传递时,则直接开始下一次内部迭代;否则每个分区上本地计算就终止,开始进行全局通信; 步骤三、全局通信阶段;当本地计算完成后,就开始进行全局通信,每个顶点利用消息传递机制把当前全局迭代的消息发送给进行下一次全局迭代的顶点;在全局计算和本地计算过程中,缓存了向临界顶点发送的消息;在内部迭代完成后,只需要把所有缓存的消息在下一次全局迭代开始前发送到目的临界顶点; 步骤四、栅栏同步阶段;每个工作节点发送完消息后,就开始进入全局同步阶段;发送完消息的节点进入全局的栅栏,然后开始等待其他工作节点进入;等所有节点都进入全局的栅栏后,每个节点把收到的消息队列赋值给参与下一次计算的顶点,然后离开栅栏进入步骤二,开始进行下一次全局迭代的计算;后续迭代和第一次迭代相同,都有多次内部迭代;在同步完成后,若主节点发现每个工作节点上的顶点都不活跃并且工作节点间没有消息传递时,就结束整个作业,输出计算结果。
【文档编号】G06F17/30GK103914556SQ201410148977
【公开日】2014年7月9日 申请日期:2014年4月15日 优先权日:2014年4月15日
【发明者】陈群, 白松, 李战怀, 勾志营, 索勃, 潘巍 申请人:西北工业大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1