CN111309976B - 一种面向收敛型图应用的GraphX数据缓存方法 - Google Patents
一种面向收敛型图应用的GraphX数据缓存方法 Download PDFInfo
- Publication number
- CN111309976B CN111309976B CN202010112523.0A CN202010112523A CN111309976B CN 111309976 B CN111309976 B CN 111309976B CN 202010112523 A CN202010112523 A CN 202010112523A CN 111309976 B CN111309976 B CN 111309976B
- Authority
- CN
- China
- Prior art keywords
- vertex
- data
- active
- edge
- partition
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/9035—Filtering based on additional data, e.g. user or group profiles
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种面向收敛型图应用的GraphX数据缓存方法,分为9个步骤:初始化、顶点计算与标识更新,活跃顶点信息收集、过滤时机判断、顶点属性同步、顶点活跃状态同步、过期数据过滤、判断迭代计算是否结束和结束。本发明针对图中边规模远大于顶点规模的特点,着眼于边数据的缓存优化,将应用运行过程中不再使用的边定义为过期数据,通过以顶点为中心的间接标识方法,标识应用运行过程中的过期数据。本发明设计基于活跃顶点规模变化趋势的数据过滤方法,当活跃顶点规模显著减小时,进行过期数据的过滤,降低数据过滤的性能开销,同时保障应用在内存配置受限的情况下,系统能将计算所需的图数据完整缓存于内存空间,提升应用的执行效率。
Description
技术领域
本发明属于分布式图计算领域,具体涉及分布式内存图计算系统的缓存优化技术。
背景技术
GraphX是图计算领域被广泛使用的分布式图处理系统。GraphX构建于分布式计算引擎Spark之上,通过利用Spark提供的丰富的数据操作算子和计算引擎,获得较好的图数据计算效率。GraphX借助Spark弹性分布式数据集RDD进行大规模图数据的表达,将图中顶点与边表达为VertexRDD与EdgeRDD,降低用户的操作门槛。GraphX利用Spark的数据操作算子作用于VertexRDD与EdgeRDD上来执行迭代图处理操作,并利用Spark提供的基于内存的数据缓存方法,将待处理的图数据完全缓存于内存中,以加速数据处理。
在大规模图处理中,收敛型图应用是一类典型图分析应用,其特点是在图数据迭代处理过程中,迭代轮次间活跃的图顶点规模呈现逐渐缩小的趋势,且任意顶点一旦从活跃状态转为非活跃状态,则保持非活跃状态直至应用结束。收敛型图应用广泛存在,如单源最短路径SSSP、宽度优先遍历BFS、deltaPageRank等。
然而,GraphX在处理收敛型图应用时会出现如下问题:既有GraphX采用静态的数据缓存方法,即在每轮迭代处理时将图数据完整地缓存于内存中,并未考虑实际参与计算的数据规模。这使得收敛型图应用在GraphX系统中运行时,缓存中存在非活跃顶点数据以及大量与之关联的、不再参与计算的边数据,降低了缓存空间的有效利用率。同时在应用内存配置受限的情况下,系统无法完整缓存图数据,将数据以分区为单位进行丢弃,在计算时需根据RDD的血缘技术进行数据恢复。数据恢复会造成分区数据重计算现象的发生,增加处理开销,大大降低了收敛型图应用的执行效率。
发明内容
针对上述问题,本发明设计一种面向收敛型图应用的GraphX数据缓存方法。针对图数据边规模远大于顶点规模的特点,本方法着眼于图边数据的缓存优化,将收敛型图应用运行过程中不再使用的边数据定义为过期数据。本方法在实时监测过期数据的基础上,通过以顶点为中心的间接标识方法,标识应用运行过程中的过期数据,并设计基于活跃顶点规模变化趋势的过期数据过滤方法,当活跃顶点规模显著减小时,进行过期数据的过滤,降低图数据过滤的性能开销。
本发明所述的数据缓存方法分为9个步骤:初始化、顶点计算与标识更新,活跃顶点信息收集、过滤时机判断、顶点属性同步、顶点活跃状态同步、过期数据过滤、判断迭代计算是否结束和结束。在本数据缓存方法中,有3个基本参数:活跃顶点信息收集周期阈值K、收敛程度下限区间Min、收敛程度上限区间Max。K一般取值在3~5之间,Min一般取值在0.25~0.5之间,Max一般取值在0.75~0.85之间。
在执行本方法前,系统需对图数据进行预处理操作,即将图数据加载、划分、格式化操作形成顶点集合VertexRDD和边集合EdgeRDD。VertexRDD与EdgeRDD内部由VertexPartition顶点分区与EdgePartition边分区构成,分别存储顶点数据与边数据,分布在各任务执行器内。每个VertexPartition顶点分区中除了存储顶点数据外,还额外存储RoutingTable路由表信息,即顶点对应边所属的分区信息,用于建立顶点与边分区的映射关系。同时,VertexRDD与EdgeRDD内部均存储分区器Partitioner,记录了VertexRDD与EdgeRDD的数据分区策略。
上述步骤在计算机上按以下步骤实现:
(1)初始化:
根据应用的初始化消息为以及具体的操作语义,对图数据进行初始化操作。系统遍历VertexRDD中每个顶点分区的顶点,将应用的初始化消息和具体的处理语义作用于顶点上,初始化顶点属性。初始化的顶点属性具体值依赖于具体的收敛型图应用。将参与第1轮迭代计算的顶点的状态初始化为活跃状态。同时根据顶点状态是否为活跃,初始化顶点标识,将活跃顶点的标识初始化为0,其他的顶点初始化为-1。然后,将顶点的属性值与活跃状态同步到EdgeRDD中以完成初始化。
(2)顶点计算与标识更新
2.1)遍历EdgeRDD每个边分区中包含活跃顶点的边数据,执行用户定义的SendMsg()消息发送函数与MergeMsg()消息聚合函数,进行消息的发送与消息的本地聚合,形成局部消息LocalMessage,LocalMessage可表示为RDD[(vid,msg)],(vid,msg)二元组为局部消息内部数据的具体展现形式,其中vid为顶点ID,msg为计算所产生的消息。
2.2)LocalMessage利用VertexRDD的分区器进行数据重分区操作,然后与VertexRDD进行连接操作,遍历LocalMessage中每条记录,执行用户定义的MergeMsg()消息聚合函数进行消息聚合以及顶点标注。消息聚合以及顶点标注操作使每个接收到消息的顶点仅存储一条消息,仅产生一个标识。若迭代轮次为iter,标识方法将收到消息的顶点标注为iter+1,与消息一同存储于MessageRDD中。MessageRDD类型为VertexRDD,内部存储顶点接收到的消息以及顶点标识。
2.3)VertexRDD与MessageRDD进行连接操作,遍历顶点分区中的每个顶点,执行用户定义vPorg()顶点计算函数,完成应用的计算。同时,比较VertexRDD中顶点v的标识flag1与MessageRDD中顶点v的标识flag2,若flag1小于flag2则将flag1更新为flag2。顶点计算与标识更新完成后,形成新的VertexRDD并缓存于内存中。
(3)活跃顶点信息收集
3.1)定义长度为K的队列ActiveVQueue用于存储最近K轮迭代活跃顶点的规模信息。K为活跃顶点信息收集周期阈值,由用户设定。K值不宜过大,否则体现不出活跃顶点规模的变化趋势,也不宜过小,否则体现出来的活跃顶点规模的变化趋势具有随机性,不准确。K一般取值在3~5之间。
3.2)统计本轮迭代活跃顶点的规模actvieVerts,将actvieVerts加入ActiveVQueue。当队列ActiveVQueue数据未满,即ActiveVQueue的长度小于K,则将actvieVerts直接加入,当队列ActiveVQueue数据已满,即ActiveVQueue的长度等于K,则先执行出队操作,丢弃离当前本轮迭代轮次最远的那轮迭代活跃顶点的规模数据,再将actvieVerts加入ActiveVQueue。
(4)过滤时机判断
4.1)定义历史活跃顶点规模AvGHisHertex:收敛型图应用在最近K轮迭代内活跃顶点的平均规模。并利用公式1计算:
其中,activeVertex翐指第i轮迭代的活跃顶点规模,K为活跃顶点信息收集周期阈值,i≥K。
4.2)定义收敛率convergentRate,用于描述历史活跃顶点规模的收缩情况,并利用公式2计算:
收敛率convergentRate描述了收敛型图应用活跃顶点规模的变化趋势,当convergentRate>1时,说明活跃顶点的规模在增长,convergentRate<1时,说明活跃顶点的规模在收缩。Min与Max定义了活跃顶点规模收缩情况的变化区间,即下限与上限。Min与Max通过用户来设定,Min与Max均小于1。Max取值不宜过大,否则系统则会频繁进行过期数据过滤操作,影响应用执行效率;Min取值不宜过小,否则系统在应用迭代计算尾期仍会进行过期数据过滤操作,降低本方法带来的性能提升。Min一般取值在0.25~0.5之间,Max一般取值为0.75~0.85之间。当convergentRate在收敛区间内,即convergentRate大于等于Min,且小于等于Max,则本轮迭代进行过期数据过滤,记过滤迭代轮次为curIter,过滤标识isFilter为true,清空ActiveVQueue,将本轮迭代的actvieVerts重新加入ActiveVQueue中。
当convergentRate不在收敛区间内,即convergentRate大于Max或小于Min,则本轮迭代不进行过期数据过滤,令过滤标识isFilter为false。
(5)顶点属性同步
5.1)步骤2.3)计算所产生的VertexRDD与原VertexRDD进行连接操作,遍历顶点分区中的每个顶点,比较两个RDD中顶点的属性值,若不相等则记录该顶点及其对应的属性,形成顶点改变集合ChangedRDD。ChangedRDD类型为VertexRDD,内部存储了属性发生改变的顶点信息。
5.2)遍历ChangedRDD每个顶点分区中的顶点,利用路由表内顶点所对应边分区的映射关系,将顶点属性信息加入对应边分区的顶点属性块VertexAttributeBlock中,形成顶点属性集合ShipVertexs。ShipVertexs类型为RDD[(pid,VertexAttributeBlock)],(pid,VertexAttributeBlock)二元组为顶点属性集合内部数据的具体展现形式,其中pid为边分区对应的分区ID,VertexAttributeBlock为该边分区内需要更新的顶点属性信息。
5.3)ShipVertexs利用EdgeRDD的分区器对数据进行重分区操作,然后与EdgeRDD进行连接操作,更新EdgeRDD每个边分区中顶点的属性值,形成新的EdgeRDD。
(6)顶点活跃状态同步
6.1)在计算过程中,顶点通过接收消息执行顶点计算将状态转为活跃状态,这些顶点作为活跃顶点参与下一轮迭代的计算。遍历步骤2.2)所产生的MessageRDD每个顶点分区中的顶点,利用路由表内顶点所对应边分区的映射关系,将顶点ID加入对应边分区的活跃顶点集中,形成活跃顶点集合ShippedActives。ShippedActives类型为RDD[(pid,Array[vid])],(pid,Array[vid])二元组为活跃顶点集合内部数据的具体展现形式,pid为边分区对应的分区ID,Array[vid]为活跃顶点信息数组,vid为顶点ID。
6.2)ShippedActives利用EdgeRDD的分区器,对数据进行重分区操作,然后与步骤5.3)所产生的EdgeRDD进行连接操作,更新EdgeRDD每个边分区内的活跃顶点集activeSet,形成新的EdgeRDD。若步骤4.2)中计算产生的isfilter为true,则执行步骤(7),若isfilter为false,则将计算产生的新的EdgeRDD缓存于内存中,然后执行步骤(8)。
(7)过期数据过滤
7.1)遍历步骤2.3)产生的VertexRDD每个顶点分区中的顶点,比较顶点标识与步骤4.2)记录的过滤迭代轮次curIter,若顶点标识小于curIter,则表明该顶点为过期顶点,记录该顶点ID,利用路由表内顶点所对应边分区的映射关系,将顶点ID加入对应边分区的过期顶点数据集expiredIds中,形成过期顶点集合ExpiredIDs。ExpiredIDs类型为RDD[(pid,Array[vid])],(pid,Array[vid])二元组为过期顶点集合内部数据的具体展现形式,pid为边分区对应的分区ID,Array[vid]为过期顶点信息数组,vid为顶点ID。
7.2)ExpiredIDs利用EdgeRDD的分区器,对数据进行重分区操作,然后与步骤6.2)所产生的EdgeRDD进行连接操作,遍历边分区中的每条边数据,结合应用的传播方向edgeDirection以及每个边分区对应的过期顶点集expiredIds进行过期数据的判断。对于沿出边方向传播的应用,当边上源顶点过期时,该边即为过期数据;对于沿入边方向传播的应用,当边上目标顶点过期时,该边即为过期数据;对于双向传播的应用,仅当边上源顶点与目标顶点均过期时,该边为过期数据。记录未过期的边数据集EdgeSet。遍历EdgeSet,重新构建边分区,形成新的EdgeRDD,并缓存于内存中。
(8)判断迭代计算是否结束
8.1)清除旧的VertexRDD与EdgeRDD数据。
8.2)步骤2.2)所产生的MessageRDD执行count算子,统计下一轮迭代活跃顶点的数量。根据下一轮迭代的活跃顶点的数量判断迭代计算是否结束,若下一轮迭代活跃顶点的数量>0,则表明下一轮迭代仍有数据需要进行处理,迭代计算未完成进行下一轮迭代,执行步骤(2)。若下一轮迭代活跃顶点的数量=0,则表明迭代计算已完成,则执行步骤(9)。
(9)结束:结束计算,输出结果
为实现上述方法,本发明需要修改GraphX系统中的编程抽象,在VertexRDD增添顶点标识属性,用于进行顶点标注(步骤1)。同时,增加额外的操作算子用于执行顶点标识的标注与更新,并嵌入到顶点计算阶段中(步骤2)。在GraphX系统的每个任务执行器上增加活跃顶点信息收集模块,用于收集应用每轮迭代的活跃顶点规模。在客户端增加活跃顶点信息汇总模块与过期数据过滤判断模块,将任务执行器内收集的活跃顶点信息进行汇总,计算历史活跃顶点规模与收敛率,并利用收敛率判断应用是否需要进行数据过滤(步骤3-4)。若不需要数据过滤,则进行顶点属性与顶点活跃状态的同步(步骤5-6)后执行步骤(8)。在GraphX的每个任务执行器上增加过期数据过滤模块,当需要进行数据过滤时,则在进行顶点属性与顶点活跃状态的同步操作后,过滤过期数据,重构边分区(步骤7)。接下来判断迭代计算是否结束,若迭代计算未完成则进行下一轮迭代,执行步骤(2),若已完成则执行步骤(9),结束计算流程。
附图说明
图1为本发明方法所依附的GraphX系统的部署图
图2为本发明方法的总体流程图
图3为初始化的流程图
图4为顶点计算与状态标识的流程图
图5为过滤时机判断的流程图
图6为顶点属性同步的流程图
图7位顶点活跃状态同步的流程图
图8为数据过滤的流程图
具体实施方式
下面结合附图和具体实施方式对本发明加以说明。图1为本发明所依附的GraphX系统的部署图。该系统由多个计算机服务器(系统节点)组成,服务器间通过网络连接。系统节点分为三类,包括一个管理节点、一个客户端节点和多个计算节点。管理节点负责应用计算资源的分配。客户端节点与计算节点一同负责应用的执行与计算,在应用运行过程中,计算节点进行图应用的迭代处理并收集每轮迭代活跃信息,客户端汇总活跃顶点信息,计算历史活跃顶点规模与收敛率,判断应用是否需要进行数据过滤,若需要进行数据过滤,则通知计算节点进行过期数据的过滤。图2为本发明的总流程。
为了便于说明,具体实施方式以表1所对应的示例图为例,在示例图上运行收敛型图应用单源最短路径SSSP来解释具体的步骤流程。其中,活跃顶点信息收集周期阈值K为3、收敛程度下限区间Min为0.5、收敛程度上限区间Max为0.8。
表1 示例图边信息
源顶点ID | 目标顶点ID | 边权重attr |
1 | 2 | 3 |
1 | 3 | 2 |
1 | 4 | 1 |
1 | 8 | 3 |
3 | 5 | 1 |
3 | 6 | 1 |
4 | 5 | 1 |
5 | 6 | 2 |
6 | 7 | 1 |
7 | 9 | 2 |
9 | 10 | 4 |
9 | 11 | 2 |
11 | 10 | 1 |
在执行本方法前,系统需对示例图进行预处理操作,即将示例图加载、划分、格式化操作形成顶点集合VertexRDD和边集合EdgeRDD。
本实施方法可以分为以下步骤
(1)初始化:
遍历VertexRDD每个顶点分区中的顶点,将顶点ID为1的点属性初始化为0.0,顶点状态修改为活跃状态,其余顶点初始化为Double.PositiveInfinity。根据顶点的活跃状态,将顶点ID为1的标识初始化为0,其余顶点初始化为-1。然后,将顶点的属性值与活跃状态同步到EdgeRDD。
为了凸显本数据缓存方法的标识更新流程与数据过滤流程,后续步骤选定应用第5轮迭代进行阐述,第5轮迭代活跃顶点为9。
(2)顶点计算与标识更新
2.1)遍历EdgeRDD每个边分区中包含活跃顶点的边数据,比较边上目标顶点的属性值与边上源顶点属性值加边权重之和,若小于则向目标顶点发送消息。若顶点收到多条消息,则选取数值最小的那一条作为顶点的消息。消息的发送与消息的本地聚合后,形成局部消息LocalMessage,LocalMessage可表示为RDD[(vid,msg)],(vid,msg)二元组为局部消息内部数据的具体展现形式,其中vid为顶点ID,msg为计算所产生的消息,第5轮迭代产生的消息msg为(10,10.0)、(11,8.0)。
2.2)LocalMessage利用VertexRDD的分区器对数据进行重分区操作,然后与VertexRDD进行连接操作,遍历LocalMessage中每条记录,若顶点收到多条消息,则选取数值最小的那一条作为顶点的消息,同时更新顶点的标识。迭代轮次iter为5,顶点10收到消息,则修改顶点标识为6,顶点仅更改一次。顶点消息聚合与标识更新完成后形成最终消息MessageRDD,MessageRDD类型为VertexRDD,内部存储顶点接收到的消息以及顶点标识。
2.3)VertexRDD与MessageRDD进行连接操作,遍历每个顶点分区中的顶点,比较VertexRDD中顶点的属性值value1与MessageRDD中顶点的属性值value2,若value1>value2,则将顶点的属性值更改为value2,完成应用的计算。同时,比较VertexRDD中顶点v的标识flag1与MessageRDD中顶点v的标识flag2,若flag1小于flag2则将flag1更新为flag2。顶点计算与标识更新完成后,形成新的VertexRDD并缓存于内存中。第5轮迭代VertexRDD中顶点10的属性值为Double.PositiveInfinity,MessageRDD中顶点10的属性值为10.0,则将顶点10的属性值更改为10.0。VertexRDD中顶点10的标识flag1为-1,MessageRDD中顶点10的标识flag2为6,则将flag1更新为6。顶点计算与标识更新完成后,形成新的VertexRDD并缓存于内存中。
(3)活跃顶点信息收集
3.1)定义长度为K的队列ActiveVQueue用于存储最近K轮迭代活跃顶点的规模信息。K为3,因此定义长度为3的队列ActiveVQueue用于存储最近3轮迭代活跃顶点的规模信息
3.2)统计本轮迭代活跃顶点的规模actvieVerts,将actvieVerts加入ActiveVQueue。当队列ActiveVQueue数据未满,即ActiveVQueue的长度小于K,则将actvieVerts直接加入,如第2轮迭代时ActiveVQueue={1,4},当队列ActiveVQueue数据已满,即ActiveVQueue的长度等于K,则先执行出队操作,丢弃离当前本轮迭代轮次最远的那轮迭代活跃顶点的规模数据,再将actvieVerts加入ActiveVQueue。如第4轮迭代时ActiveVQueue={4,2,1},第5轮迭代时ActiveVQueue={2,1,1}。
(4)过滤时机判断
4.1)计算历史活跃顶点规模AvGHisVertex
4.2)计算收敛率convergentRate
convergentRate大于0.5,且小于0.8,则记录迭代过滤轮次curIter为5,isFilter为true,清空ActiveVQueue,将第5轮迭代的actvieVerts重新加入ActiveQueue中,即ActiveQueue={1}。
(5)顶点属性同步
5.1)步骤2.3)计算所产生的VertexRDD与原VertexRDD进行连接操作,遍历每个顶点分区中的顶点,比较两个RDD中顶点的属性值,若不相等则记录该顶点及其对应的属性,形成顶点改变集合ChangedRDD。ChangedRDD类型为VertexRDD,内部存储了属性发生改变的顶点信息。第五轮迭代变化的顶点信息为(10,10.0)、(11,8.0)。
5.2)遍历ChangedRDD每个顶点分区中的顶点,利用路由表内顶点与对应边分区的映射关系,将顶点属性信息加入对应边分区的顶点属性块VertexAttributeBlock中,形成顶点属性集合ShipVertexs。ShipVertexs类型为RDD[(pid,VertexAttributeBlock)],(pid,VertexAttributeBlock)二元组为顶点属性集合内部数据的具体展现形式,其中pid为边分区对应的分区ID,VertexAttributeBlock为该边分区内需要更新的顶点属性信息,第5轮迭代VertexAttributeBlock内部存储的信息为(10,10.0)、(11,8.0)。
5.3)ShipVertexs利用EdgeRDD的分区器,对数据进行重分区操作,然后与EdgeRDD进行连接操作,更新EdgeRDD中每个边分区内部顶点的属性值,形成新的EdgeRDD。
(6)顶点活跃状态同步
6.1)遍历步骤2.2)所产生的MessageRDD每个顶点分区中的顶点,利用路由表内顶点与对应边分区的映射关系,将顶点ID加入对应边分区的活跃顶点集中,形成活跃顶点集合ShippedActives。ShippedActives类型为RDD[(pid,Array[vid])],(pid,Array[vid])二元组为活跃顶点集合内部数据的具体展现形式,pid为边分区对应的分区ID,Array[vid]为活跃顶点信息数组,vid为顶点ID。第5轮迭代产生的活跃顶点信息:(0,{10,11})
6.2)ShippedActives利用EdgeRDD的分区器,对数据进行重分区操作,然后与步骤5.3)所产生的EdgeRDD进行连接操作,更新边分区内的活跃顶点集activeSet,形成新的EdgeRDD。步骤4.2)中计算产生的过滤标识isFilter为true,执行步骤(7)。
(7)过期数据过滤
7.1)遍历步骤2.3)产生的VertexRDD每个顶点分区中的顶点,比较顶点标识与步骤4.2)记录的过期迭代轮次curIter,若顶点标识小于curIter,则表明该顶点为过期顶点,记录该顶点ID,利用路由表内顶点与对应边分区的映射关系,将顶点ID加入对应边分区的过期顶点数据集expiredIds中,形成过期顶点集合ExpiredIDs。ExpiredIDs类型为RDD[(pid,Array[vid])],(pid,Array[vid])二元组为过期顶点集合内部数据的具体展现形式,pid为边分区对应的分区ID,Array[vid]为过期顶点信息数组,vid为顶点ID。过期迭代轮次curIter为5,产生的过期顶点信息(0,{1,2,3,4…})。
7.2)ExpiredIDs利用EdgeRDD的分区器,对数据进行重分区操作,然后与步骤6.2)所产生的EdgeRDD进行连接操作,遍历边分区中的每条边数据,结合应用的传播方向edgeDirection以及每个边分区对应的过期顶点集expiredIds进行过期数据的判断,单源最短路径应用是沿出边方向进行传播的,因此当边上源顶点过期时,该边即为过期数据。记录未过期的边数据集EdgeSet。EdgeSet={(9->10)、(9->11)、(10->11)}。遍历EdgeSet,重新构建边分区,形成新的EdgeRDD,并缓存于内存中。
(8)判断迭代计算是否结束
8.1)清除旧的VertexRDD与EdgeRDD数据。
8.2)步骤2.2)所产生的MessageRDD执行count算子,统计下一轮迭代活跃顶点的数量。根据下一轮迭代活跃顶点的数量判断迭代计算是否结束,若下一轮迭代活跃顶点的数量>0,则表明下一轮迭代仍有数据需要进行处理,迭代计算未完成则进行下一轮迭代,执行步骤(2)。若下一轮迭代活跃顶点的数量=0,则表明迭代计算已完成,则执行步骤(9)。第6轮迭代活跃顶点的数量为2,大于0,迭代计算未完成进行下一轮迭代,执行步骤(2)。
(9)结束:结束计算,输出结果
为了评估面向收敛型图应用的GraphX数据缓存方法的性能,选取的性能测试指标为收敛型图应用的执行时间。性能测试选取5台服务器作为实验集群,其中1台作为管理节点,4台作为工作节点。每台服务器的硬件配置包括:Intel(R)Xeon(R)CPU E5-2660@2.20GHz*6Core,24GB DDR3 RAM,1TB SATA,节点间采用千兆以太网互联,操作系统为Centos6.5。实验选取典型的收敛型图应用单源最短路径SSSP与宽度优先遍历BFS作为实验测试负载。实验采用Stanford Large Network Dataset Collection提供的真实数据集soc-Pokec、soc-LiveJournal作为实验数据集,数据集的具体规模如表2所示。
表2 实验数据集规模信息
实验比较在不同的内存配置下,分别采用既有的数据缓存方法的原生GraphX系统与本方法的GraphX系统,收敛型图应用的计算效率。在运行应用时,实验为每个应用分配4个任务执行器,每个任务执行器配置2个cpu core。
在soc-Pokec数据集上执行单源最短路径应用的实验结果如表3所示。
表3 soc-Pokec数据集单源最短路径应用的实验结果
从以上实验结果可以看出,相较于原生GraphX系统,采用了面向收敛型图应用数据缓存方法的GraphX系统在执行单源最短路径应用时,在不同内存配置下应用的执行时间分别缩短了3.70%、30.72%、34.53%和35.53%。
在soc-LiveJournal数据集上执行单源最短路径应用的实验结果如表4所示。
表4 soc-LiveJournal数据集单源最短路径应用的实验结果
从以上实验结果可以看出,相较于原生GraphX系统,采用了面向收敛型图应用数据缓存方法的GraphX系统在执行单源最短路径应用时,在不同内存配置下应用的执行时间分别缩短了6.45%、82.22%、74.70%和75.30%。
在soc-Pokec数据集上执行宽度优先遍历应用的实验结果如表5所示。
表5 soc-Pokec数据集宽度优先遍历应用的实验结果
从以上实验结果可以看出,相较于原生GraphX系统,采用了面向收敛型图应用数据缓存方法的GraphX系统在执行宽度优先遍历应用时,在不同内存配置下应用的执行时间分别缩短了20.26%、40.81%、34.89%和19.41%。
在soc-LiveJournal数据集上执行宽度优先遍历应用的实验结果如表6所示。
表6 soc-LiveJournal数据集宽度优先遍历应用的实验结果
从以上实验结果可以看出,相较于原生GraphX系统,采用了面向收敛型图应用数据缓存方法的GraphX系统在执行宽度优先遍历应用时,在不同内存配置下应用的执行时间分别缩短了76.47%、77.96%、76.71%和73.71%。
实验表明,在不同内存配置下,采用面向收敛型图应用数据缓存方法的GraphX系统在处理收敛型图应用时,应用执行时间均明显缩短。这是因为在上述内存配置下运行收敛型图应用时,原生GraphX系统无法完整缓存迭代处理的图数据,造成数据重计算现象的发生,降低了应用的执行效率。相较于原生GraphX系统,采用面向收敛型图应用的数据缓存方法的GraphX系统过滤过期数据,节省内存空间,使系统能完整缓存计算所需数据,减少数据发生重计算的次数,提升了应用的执行效率。
最后应说明的是:以上示例仅用以说明本发明而并非限制本发明所描述的技术,而一切不脱离发明的精神和范围的技术方案及其改进,其均应涵盖在本发明的权利要求范围当中。
Claims (1)
1.一种面向收敛型图应用的GraphX数据缓存方法,其特征在于:该数据缓存方法分为9个步骤:初始化、顶点计算与标识更新,活跃顶点信息收集、过滤时机判断、顶点属性同步、顶点活跃状态同步、过期数据过滤、判断迭代计算是否结束和结束;
在本数据缓存方法中,有3个基本参数:活跃顶点信息收集周期阈值K、收敛程度下限区间Min、收敛程度上限区间Max;K取值在3~5之间,Min取值在0.25~0.5之间,Max取值为0.75~0.85之间;
在执行本方法前,对图数据进行预处理操作,即将图数据加载、划分、格式化操作形成顶点集合VertexRDD和边集合EdgeRDD;
(1)初始化:
根据应用的初始化消息以及具体的操作语义,对图数据进行初始化操作;系统遍历VertexRDD中每个顶点分区的顶点,将应用的初始化消息和具体的操作语义作用于顶点上,初始化顶点属性;将参与第1轮迭代计算的顶点的状态初始化为活跃状态;同时根据顶点状态是否为活跃,初始化顶点标识,将活跃顶点的标识初始化为0,其他的顶点初始化为-1;然后,将顶点的属性值与活跃状态同步到EdgeRDD中以完成初始化;
(2)顶点计算与标识更新
2.1)遍历EdgeRDD每个边分区中包含活跃顶点的边数据,执行用户定义的SendMsg()消息发送函数与MergeMsg()消息聚合函数,进行消息的发送与消息的本地聚合,形成局部消息LocalMessage,LocalMessage表示为RDD[(vid,msg)],(vid,msg)二元组为局部消息内部数据的具体展现形式,其中vid为顶点ID,msg为计算所产生的消息;
2.2)LocalMessage利用VertexRDD的分区器进行数据重分区操作,然后与VertexRDD进行连接操作,遍历LocalMessage中每条记录,执行用户定义的MergeMsg()消息聚合函数进行消息聚合以及顶点标注;消息聚合以及顶点标注操作使每个接收到消息的顶点仅存储一条消息,仅产生一个标识;若迭代轮次为iter,标识方法将收到消息的顶点标注为iter+1,与消息一同存储于MessageRDD中;MessageRDD类型为VertexRDD,内部存储顶点接收到的消息以及顶点标识;
2.3)VertexRDD与MessageRDD进行连接操作,遍历顶点分区中的每个顶点,执行用户定义vPorg()顶点计算函数,完成应用的计算;同时,比较VertexRDD中顶点v的标识flag1与MessageRDD中顶点v的标识flag2,若flag1小于flag2则将flag1更新为flag2;顶点计算与标识更新完成后,形成新的VertexRDD并缓存于内存中;
(3)活跃顶点信息收集
3.1)定义长度为K的队列ActiveVQueue用于存储最近K轮迭代活跃顶点的规模信息;K为活跃顶点信息收集周期阈值;
3.2)统计本轮迭代活跃顶点的规模actvieVerts,将actvieVerts加入ActiveVQueue;当队列ActiveVQueue数据未满,即ActiveVQueue的长度小于K,则将actvieVerts直接加入,当队列ActiveVQueue数据已满,即ActiveVQueue的长度等于K,则先执行出队操作,丢弃离当前本轮迭代轮次最远的那轮迭代活跃顶点的规模数据,再将actvieVerts加入ActiveVQueue;
(4)过滤时机判断
4.1)定义历史活跃顶点规模AvGHisVertex:收敛型图应用在最近K轮迭代内活跃顶点的平均规模;并利用公式1计算:
其中,activeVertexi指第i轮迭代的活跃顶点规模,K为活跃顶点信息收集周期阈值,i≥K;
4.2)定义收敛率convergentRate,用于描述历史活跃顶点规模的收缩情况,并利用公式2计算:
收敛率convergentRate描述了收敛型图应用活跃顶点规模的变化趋势,当convergentRate>1时,说明活跃顶点的规模在增长,convergentRate<1时,说明活跃顶点的规模在收缩;Min与Max定义了活跃顶点规模收缩情况的变化区间,即下限与上限;当convergentRate在收敛区间内,即convergentRate大于等于Min,且小于等于Max,则本轮迭代进行过期数据过滤,记过滤迭代轮次为curIter,过滤标识isFilter为true,清空ActiveVQueue,将本轮迭代的actvieVerts重新加入ActiveVQueue中;
当convergentRate不在收敛区间内,即convergentRate大于Max或小于Min,则本轮迭代不进行过期数据过滤,令过滤标识isFilter为false;
(5)顶点属性同步
5.1)步骤2.3)计算所产生的VertexRDD与原VertexRDD进行连接操作,遍历顶点分区中的每个顶点,比较两个RDD中顶点的属性值,若不相等则记录该顶点及其对应的属性,形成顶点改变集合ChangedRDD;ChangedRDD类型为VertexRDD,内部存储了属性发生改变的顶点信息;
5.2)遍历ChangedRDD每个顶点分区中的顶点,利用路由表内顶点所对应边分区的映射关系,将顶点属性信息加入对应边分区的顶点属性块VertexAttributeBlock中,形成顶点属性集合ShipVertexs;ShipVertexs类型为RDD[(pid,VertexAttributeBlock)],(pid,VertexAttributeBlock)二元组为顶点属性集合内部数据的具体展现形式,其中pid为边分区对应的分区ID,VertexAttributeBlock为该边分区内需要更新的顶点属性信息;
5.3)ShipVertexs利用EdgeRDD的分区器对数据进行重分区操作,然后与EdgeRDD进行连接操作,更新EdgeRDD每个边分区中顶点的属性值,形成新的EdgeRDD;
(6)顶点活跃状态同步
6.1)在计算过程中,顶点通过接收消息执行顶点计算将状态转为活跃状态,这些顶点作为活跃顶点参与下一轮迭代的计算;遍历步骤2.2)所产生的MessageRDD每个顶点分区中的顶点,利用路由表内顶点所对应边分区的映射关系,将顶点ID加入对应边分区的活跃顶点集中,形成活跃顶点集合ShippedActives;ShippedActives类型为RDD[(pid,Array[vid])],(pid,Array[vid])二元组为活跃顶点集合内部数据的具体展现形式,pid为边分区对应的分区ID,Array[vid]为活跃顶点信息数组,vid为顶点ID;
6.2)ShippedActives利用EdgeRDD的分区器,对数据进行重分区操作,然后与步骤5.3)所产生的EdgeRDD进行连接操作,更新EdgeRDD每个边分区内的活跃顶点集activeSet,形成新的EdgeRDD;若步骤4.2)中计算产生的isfilter为true,则执行步骤(7),若isfilter为false,则将计算产生的新的EdgeRDD缓存于内存中,然后执行步骤(8);
(7)过期数据过滤
7.1)遍历步骤2.3)产生的VertexRDD每个顶点分区中的顶点,比较顶点标识与步骤4.2)记录的过滤迭代轮次curIter,若顶点标识小于curIter,则表明该顶点为过期顶点,记录该顶点ID,利用路由表内顶点所对应边分区的映射关系,将顶点ID加入对应边分区的过期顶点数据集expiredIds中,形成过期顶点集合ExpiredIDs;ExpiredIDs类型为RDD[(pid,Array[vid])],(pid,Array[vid])二元组为过期顶点集合内部数据的具体展现形式,pid为边分区对应的分区ID,Array[vid]为过期顶点信息数组,vid为顶点ID;
7.2)ExpiredIDs利用EdgeRDD的分区器,对数据进行重分区操作,然后与步骤6.2)所产生的EdgeRDD进行连接操作,遍历边分区中的每条边数据,结合应用的传播方向edgeDirection以及每个边分区对应的过期顶点集expiredIds进行过期数据的判断;对于沿出边方向传播的应用,当边上源顶点过期时,该边即为过期数据;对于沿入边方向传播的应用,当边上目标顶点过期时,该边即为过期数据;对于双向传播的应用,仅当边上源顶点与目标顶点均过期时,该边为过期数据;记录未过期的边数据集EdgeSet;遍历EdgeSet,重新构建边分区,形成新的EdgeRDD,并缓存于内存中;
(8)判断迭代计算是否结束
8.1)清除旧的VertexRDD与EdgeRDD数据;
8.2)步骤2.2)所产生的MessageRDD执行count算子,统计下一轮迭代活跃顶点的数量;根据下一轮迭代的活跃顶点的数量判断迭代计算是否结束,若下一轮迭代活跃顶点的数量>0,则表明下一轮迭代仍有数据需要进行处理,迭代计算未完成进行下一轮迭代,执行步骤(2);若下一轮迭代活跃顶点的数量=0,则表明迭代计算已完成,则执行步骤(9);
(9)结束:结束计算,输出结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010112523.0A CN111309976B (zh) | 2020-02-24 | 2020-02-24 | 一种面向收敛型图应用的GraphX数据缓存方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010112523.0A CN111309976B (zh) | 2020-02-24 | 2020-02-24 | 一种面向收敛型图应用的GraphX数据缓存方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111309976A CN111309976A (zh) | 2020-06-19 |
CN111309976B true CN111309976B (zh) | 2021-06-25 |
Family
ID=71156814
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010112523.0A Active CN111309976B (zh) | 2020-02-24 | 2020-02-24 | 一种面向收敛型图应用的GraphX数据缓存方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111309976B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112257865B (zh) * | 2020-09-09 | 2023-11-03 | 中国科学院信息工程研究所 | 一种gpu上的基于着色优化的置信传播方法 |
CN112765177B (zh) * | 2021-01-26 | 2022-04-29 | 武汉大学 | 一种基于负载驱动的分布式图数据分割和复制方法 |
CN113672590B (zh) * | 2021-07-22 | 2024-06-07 | 浙江大华技术股份有限公司 | 一种数据清理方法、图数据库装置和计算机可读存储介质 |
CN113726342B (zh) * | 2021-09-08 | 2023-11-07 | 中国海洋大学 | 面向大规模图迭代计算的分段差值压缩与惰性解压方法 |
CN117271834A (zh) * | 2022-06-15 | 2023-12-22 | 华为技术有限公司 | 图的处理方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103885856A (zh) * | 2014-03-10 | 2014-06-25 | 北京大学 | 一种基于消息再生机制的图计算容错方法及系统 |
CN104780213A (zh) * | 2015-04-17 | 2015-07-15 | 华中科技大学 | 一种主从分布式图处理系统负载动态优化方法 |
CN105069039A (zh) * | 2015-07-22 | 2015-11-18 | 山东大学 | 一种基于spark平台的内存迭代的重叠社区并行发现方法 |
CN109919826A (zh) * | 2019-02-02 | 2019-06-21 | 西安邮电大学 | 一种用于图计算加速器的图数据压缩方法及图计算加速器 |
CN110737804A (zh) * | 2019-09-20 | 2020-01-31 | 华中科技大学 | 一种基于活跃度布局的图处理访存优化方法及系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105224528B (zh) * | 2014-05-27 | 2019-12-17 | 华为技术有限公司 | 基于图计算的大数据处理方法和装置 |
US10120956B2 (en) * | 2014-08-29 | 2018-11-06 | GraphSQL, Inc. | Methods and systems for distributed computation of graph data |
-
2020
- 2020-02-24 CN CN202010112523.0A patent/CN111309976B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103885856A (zh) * | 2014-03-10 | 2014-06-25 | 北京大学 | 一种基于消息再生机制的图计算容错方法及系统 |
CN104780213A (zh) * | 2015-04-17 | 2015-07-15 | 华中科技大学 | 一种主从分布式图处理系统负载动态优化方法 |
CN105069039A (zh) * | 2015-07-22 | 2015-11-18 | 山东大学 | 一种基于spark平台的内存迭代的重叠社区并行发现方法 |
CN109919826A (zh) * | 2019-02-02 | 2019-06-21 | 西安邮电大学 | 一种用于图计算加速器的图数据压缩方法及图计算加速器 |
CN110737804A (zh) * | 2019-09-20 | 2020-01-31 | 华中科技大学 | 一种基于活跃度布局的图处理访存优化方法及系统 |
Non-Patent Citations (2)
Title |
---|
Graphicionado: A High-Performance and Energy-Efficient Accelerator for Graph Analytics;Tae Jun Ham;《2016 49th Annual IEEE/ACM International Symposium on Microarchitecture (MICRO)》;20161215;全文 * |
分布式图处理系统技术综述;王童童;《软件学报》;20180331;第29卷(第3期);第569-586页 * |
Also Published As
Publication number | Publication date |
---|---|
CN111309976A (zh) | 2020-06-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111309976B (zh) | 一种面向收敛型图应用的GraphX数据缓存方法 | |
CN105630955B (zh) | 一种高效动态的数据集合成员管理方法 | |
JP5427640B2 (ja) | 決定木生成装置、決定木生成方法、及びプログラム | |
US8229968B2 (en) | Data caching for distributed execution computing | |
CN105550225B (zh) | 索引构建方法、查询方法及装置 | |
CN109522428B (zh) | 一种基于索引定位的图计算系统的外存访问方法 | |
CN112287182A (zh) | 图数据存储、处理方法、装置及计算机存储介质 | |
CN104156380A (zh) | 一种分布式存储器哈希索引方法及系统 | |
Patwary et al. | Window-based streaming graph partitioning algorithm | |
CN109033340A (zh) | 一种基于Spark平台的点云K邻域的搜索方法及装置 | |
CN113867627B (zh) | 一种存储系统性能优化方法及系统 | |
CN106407224A (zh) | 一种键值存储系统中文件压实的方法和装置 | |
CN110018997B (zh) | 一种基于hdfs的海量小文件存储优化方法 | |
CN112015765B (zh) | 基于缓存价值的Spark缓存淘汰方法及系统 | |
CN111382320A (zh) | 一种面向知识图谱的大规模数据增量处理方法 | |
CN105205052A (zh) | 一种数据挖掘方法及装置 | |
CN105701128A (zh) | 一种查询语句的优化方法和装置 | |
CN108334532B (zh) | 一种基于Spark的Eclat并行化方法、系统及装置 | |
CN107341193B (zh) | 路网中移动对象查询方法 | |
CN103699653A (zh) | 数据聚类方法和装置 | |
CN116089414B (zh) | 基于海量数据场景的时序数据库写入性能优化方法及装置 | |
CN105824737B (zh) | 用于大数据处理系统的内存数据集置换系统与置换方法 | |
CN110222055B (zh) | 一种动态图下多边更新的单轮核值维护方法 | |
CN108897820B (zh) | 一种denclue算法的并行化方法 | |
CN113360551B (zh) | 一种靶场中时序数据的存储与快速统计方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |