一种跨平台统一的分布式图数据处理方法

文档序号:26050429发布日期:2021-07-27 15:25阅读:86来源:国知局
一种跨平台统一的分布式图数据处理方法

本发明涉及分布式数据处理领域,尤其涉及一种跨平台统一分布式图数据处理方法。



背景技术:

分布式图处理系统(又称分布式图计算系统)提升了用户进行大规模图数据分析处理的能力,降低了大规模图数据分析的技术门槛,使用户只需基于系统提供的抽象编程模型和具体的编程接口表达图算法即可,而无需关心图数据的分布式存储、任务分发、网络通信、分布式故障恢复等技术细节。但现有的分布式图处理系统在易用性上仍面临不足。首先,现有分布式图处理系统缺乏统一的编程模型和编程接口,使得用户需要不断学习新的分布式图处理系统的使用方法,才可以将已有程序迁移到新系统上,带来较大的学习成本与程序迁移开销;其次,目前主流的分布式图处理系统(例如giraph、graphx、gemini等)只向用户提供java、scala、c++等编译式程序设计语言的编程接口,并要求用户使用hadoop、spark、mpi等分布式计算框架提供的辅助api进行程序设计,这种要求对于日常使用python语言的数据分析师、算法工程师而言技术门槛较高、易用性较差。

为了提升易用性,一些分布式图处理系统(例如distributedsocialite、pgx.d、graphframes)等提供了基于datalog、green-marl、sparksql等领域特定语言的编程接口,但这些语言难以表达循环、分支等复杂计算逻辑,表达力不足。kdt和piccolo系统虽然允许用户用python语言编写图处理程序,但kdt系统无法处理顶点、边带有属性的图数据,而piccolo系统提供的编程模型与图分析中常见的顶点、边等元素契合性较差。

而目前在python语言环境下能够进行图数据处理的软件库主要有graph-tool、networkx、igraph、snap、scikit-network等。但这些软件库均采用单机串行实现,它们受单机内存容量的限制难以处理大规模图数据集。理论上也可以通过通用分布式数据处理系统ray、pyspark、dask等实现分布式图数据处理,但这些通用系统缺乏对图数据结构的封装和优化,需要用户进行大量的面向图数据的手动管理,依然具有较高的使用门槛和学习负担,易用性依然不足。



技术实现要素:

发明目的:针对现有分布式图处理系统对于数据分析师、算法工程师等普通用户而言易用性较差的缺陷,本发明的目的是提供一种支持python语言编程、能够使用户跨平台统一地进行分布式图数据处理的方法,使用户只需编写一次分布式图处理程序,程序可不经修改地、跨平台地在多个分布式图处理系统中执行。

技术方案:为实现上述发明目的,本发明提出了一种跨平台统一的分布式图数据处理方法,包括以下步骤:

(1)在集群的主节点安装跨平台统一分布式图处理编程框架unigps,所述编程框架unigps向用户提供python语言的应用程序编程接口;

(2)所述编程框架unigps向用户提供跨平台统一分布式图处理编程模型vcprog,所述编程模型将图计算过程表达为顶点属性记录的多轮迭代更新的过程;

(3)所述编程模型vcprog以python语言的抽象基类pregelx的形式向用户提供编程接口,所述抽象基类pregelx包括如下函数:顶点属性初始化、生成空消息、顶点程序、发送消息以及消息合并,用于描述每一轮迭代中对每个顶点属性记录的更新方法;

(4)在集群的主节点上,用户根据其所希望执行的图数据处理算法逻辑,编程实现抽象基类pregelx的一个具体子类;

(5)用户通过调用所述抽象基类pregelx中的函数,将所述具体子类中的一个实例对象提交给所述编程框架unigps;

(6)所述编程框架unigps将用户提供的实例对象序列化到程序文件中并上传至分布式文件系统;

(7)所述编程框架unigps启动分布式图处理系统作业的driver进程;启动后的所述driver进程通过集群资源调度管理器在集群中若干计算节点启动所述分布式图处理系统作业的计算进程;

(8)每个所述计算进程从分布式文件系统下载所述程序文件到本地文件系统;

(9)每个所述计算进程通过python语言解释器启动一个pregelxrunner进程,并与所述pregelxrunner进程建立进程间通信通道,所述pregelxrunner进程从所述程序文件反序列化出一个所述pregelx抽象基类的实例对象o;

(10)各所述计算进程将外部数据源中的输入图数据转换为统一图数据交换格式graphbuffer;graphbuffer格式采用目录的形式存储一张图的数据,所述目录下的.meta元文件存储图的元信息数据,所述目录下的vertex顶点集目录存储顶点属性记录,所述目录下的edge边集目录存储边属性记录;所述计算进程将以graphbuffer格式存储的图数据文件载入分布式图处理系统;

(11)所述计算进程在分布式图处理系统的指导下进行分布式图数据处理,所述分布式图数据处理的过程分为多轮迭代计算;

(12)在所述步骤(11)中,所述计算进程通过进程间通信通道,将需要调用的成员函数编号、成员函数参数传递给所述pregelxrunner进程,所述pregelxrunner进程根据成员函数编号调用所述实例对象o的相应成员函数,所述pregelxrunner进程将成员函数的返回值通过进程间通信通道返回给计算进程,所述计算进程再返回给分布式图处理系统;

(13)当所述分布式图处理系统的迭代次数达到用户给定的上限或者所有顶点均处于未激活状态时,图处理过程的迭代计算终止,所述计算进程将更新后的顶点属性记录和边属性记录以graphbuffer格式文件的形式输出到分布式文件系统;

(14)所述编程框架unigps将所述graphbuffer格式文件在分布式文件系统上的路径返回给用户。

进一步地,所述步骤(1)中所述的编程模型vcprog采用以顶点为中心的方式组织图数据处理算法逻辑;vcprog编程模型同时兼容pregel、gather-apply-scatter和push-pull等多种已有的分布式图处理编程模型,即基于vcprog编程模型编写的程序能够同时转换成基于pregel、gather-apply-scatter、push-pull等编程模型所编写的程序;vcprog编程模型中,图中每一个顶点和每一条边都附加有以记录形式存储的属性信息;vcprog编程模型采用基于超级步的同步迭代方式组织图数据处理的计算逻辑,它将每一轮迭代中各顶点属性记录的更新过程分解为消息合并、顶点计算和消息发送三个阶段;在每一轮迭代中,各顶点之间通过消息传递机制实现数据交换;vcprog编程模型的核心编程接口为抽象基类pregelx,pregelx基类中包括的成员函数有:顶点属性记录初始化、生成空消息、顶点程序、发送消息和消息合并;pregelx基类以python语言中的抽象类的方式提供;跨平台统一分布式图处理编程框架unigps运行在python语言编程环境中。

进一步地,所述步骤(2)中,用户需要在python语言编程环境中实现pregelx抽象基类的一个具体子类,该子类中会重载pregelx抽象基类中所有的抽象成员函数,每个重载后的成员函数的实现方法由用户所需要进行的图数据处理计算逻辑确定。

进一步地,所述步骤(5)中,跨平台统一分布式图处理编程框架unigps通过函数参数获取用户指定的分布式图处理系统引擎;unigps允许用户指定包括但不限于giraph、graphx、gemini在内的多种分布式图处理系统作为引擎;分布式图处理系统引擎可以由java、c++、scala、python等多种程序设计语言开发。

进一步地,所述步骤(8)中的进程间通信通道包括但不限于grpc、内存映射文件(memory-mappedfile)、消息队列等。

进一步地,所述步骤(10)中,输入图数据文件会分别存储顶点属性记录和边属性记录,每一个顶点/边属性记录以一条记录的形式存储;计算进程调用pregelxrunner进程中pregelx实例对象o的成员函数的调用时机、调用参数由分布式图处理系统决定;输出图数据文件也分别存储顶点属性记录和边属性记录。

本发明的有益效果:本发明使用户能够在python语言编程环境中编写分布式图数据处理程序,且用户编写的代码不经修改即可跨平台地被giraph、graphx、gemini等多种分布式图处理系统执行,降低了用户的学习成本和程序迁移开销;用户在程序编写的过程中只需面向跨平台统一图处理编程模型vcprog提供的编程接口pregelx抽象基类进行程序开发,而无需了解各种分布式图处理系统的实现细节和编程接口,降低了分布式图处理程序的开发难度,提升了各种分布式图处理系统面向数据分析师、算法工程师等用户的易用性。

附图说明

图1为本发明的总体流程示意图;

图2为本发明的vcprog编程模型中每个顶点属性记录更新过程示意图;

图3为本发明的跨平台统一图处理编程框架unigps的系统架构示意图;

图4为本发明的计算进程与pregelxrunner进程之间进程间通信实施方法示意图;

图5为本发明的基于统一图数据交换格式graphbuffer的数据图文件输入过程示意图;

图6为本发明的统一图数据交换格式graphbuffer的文件结构示意图;

图7为本发明的genericrecord序列化格式数组中字段布局示意图;

图8(a)为本发明的unigps编程框架与networkx软件库处理同一数据集的pagerank算法执行时间对比图;

图8(b)为本发明的unigps编程框架与networkx软件库处理同一数据集单源最短路径(sssp)算法执行时间对比图;

图8(c)为本发明的unigps编程框架与networkx软件库处理同一数据集连通分量(cc)算法执行时间对比图。

具体实施方式

下面结合附图和具体实施例,进一步阐明本发明,应理解这些实施例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。

本发明所有步骤的整体流程如图1所示。本发明涉及用户、集群主节点、分布式文件系统、若干集群计算节点等实体。其中在集群主节点安装有跨平台统一图处理编程框架unigps,并运行分布式图处理系统的driver进程。在集群的计算节点上会运行分布式图处理系统的计算进程和pregelxrunner进程。

发明内容里的步骤(2)中所述的vcprog编程模型的具体实施方式为:vcprog编程模型采用基于超级步的同步迭代方式组织图数据处理的算法逻辑,它将图数据处理的过程分解为顶点属性记录的多轮迭代更新过程;在迭代开始之前,vcprog编程模型利用输入图数据信息初始化图中各顶点属性记录、边属性记录,并设置所有顶点处于激活状态;在每一轮迭代中,vcprog编程模型要求每一个顶点处于激活或未激活两种状态之一;如果一个顶点选择处于激活状态或者该顶点的入边邻居向其发送了消息,则该顶点在本轮迭代中处于激活状态,否则该顶点处于未激活状态;对于输入图中每一个顶点v,顶点v属性记录的更新过程被分解为消息合并、顶点计算、消息发送三个阶段,如图2所示;在消息合并阶段,每个顶点v接受其入边邻居顶点发送给它的消息,并将收到的消息合并为一条消息;在顶点计算阶段,顶点v根据合并后的消息和v当前的顶点属性记录,调用一个顶点计算函数,获得一条新的顶点属性记录,并用新的顶点属性记录替代v原有的顶点属性记录;在消息发送阶段,顶点v根据自己的顶点属性记录,决定是否向其出边邻居发送消息,对于每一个需要发送消息的出边邻居,顶点v根据自己的顶点属性记录、出边的边属性记录,向对应出边邻居发送消息。

发明内容里的步骤(3)中所述的抽象基类pregelx的具体实施方式为:在python语言下,pregelx抽象基类的定义方式如下文方框中所示(图中的gr表示以genericrecord格式序列化的记录)。

pregelx抽象基类包括initvertexattr、initmsg、vprog、sendmsg、mergemsg等抽象成员函数。initvertexattr抽象成员函数用于描述顶点属性记录的初始化过程,该抽象成员函数将在输入图数据载入之后、所有迭代计算开始之前被调用,该抽象成员函数对每一个顶点调用一次,该函数的参数中id表示顶点id、out_degree表示顶点的出度、attr表示顶点在输入图数据中的顶点属性记录,该函数的返回值为一条属性记录,表示该顶点的初始顶点属性记录;initmsg抽象成员函数用于生成一条空消息,该成员函数将在所有迭代计算开始之前被调用一次,该函数的返回值为空消息对应的属性记录;vprog抽象成员函数对应于vcprog编程模型中的顶点计算函数,该成员函数将在每一轮迭代中对每一个处于激活状态的顶点调用一次,该函数的参数中attr表示上一轮迭代中该顶点的顶点属性记录,msg参数表示该顶点接收到的合并后的消息、iteration参数表示当前迭代轮次,该成员函数的返回值包括两个字段:new_attr表示该顶点本轮迭代更新后的顶点属性记录,is_active表示该顶点下一轮迭代中是否处于激活状态的标志位;sendmsg抽象成员函数用于决定顶点是否向其出边邻居发送消息以及消息的具体内容,在每一轮迭代中,该成员函数将对每一个激活顶点的每一条出边调用一次,该成员函数的参数中src表示源顶点id、dst表示出边邻居顶点id、src_attr表示源顶点的顶点属性记录、edge_attr表示出边的顶点属性记录,该函数返回值包括两个字段:is_emit字段表示对于该出边邻居是否发送消息的标志位,msg字段表示所发送的消息内容;mergemsg抽象成员函数用于将发送给同一个顶点的两条消息合并为一条消息,在每一轮迭代中,该成员函数将对每个顶点接收到的每一条消息调用一次,该函数的参数中m1和m2分别表示两条待合并的消息,该函数的返回值表示合并后的消息。

发明内容里的步骤(3)中所述的vcprog编程模型的执行过程的具体实施方式为:用户根据vcprog编程模型的行为将图数据处理的计算过程表达为顶点属性记录的三阶段更新过程,用户编写程序实现pregelx抽象基类的一个具体子类,并根据图数据处理的算法逻辑实现pregelx抽象基类中所有的抽象成员函数,然后创建一个具体子类的实例对象(即pregelx实例对象);vcprog编程模型的具体执行步骤如下,在每一轮迭代中,对于每一个顶点v,vcprog编程模型通过循环调用pregelx实例对象的mergemsg成员函数,将上一轮迭代中发送给v的所有消息合并为一个msg对象,然后调用pregelx实例对象的vprog成员函数,获得顶点v本轮迭代更新后的顶点属性记录以及下一轮是否激活的标志位is_active,如果标志位is_active为真,则对顶点v的每一条出边e调用pregelx实例对象的sendmsg成员函数获得消息发送标志位is_emit和消息对象msg,如果标志位is_emit为真,则调用分布式图处理系统的消息发送机制完成消息发送;vcprog编程模型的迭代终止条件是达到用户给定的最大迭代轮数max_iter或者在某一轮迭代中所有顶点的激活标志位is_active都为假。

基于vcprog编程模型编写的程序转换为基于pregel编程模型所编写的程序的具体实施方式为:vcprog编程模型编写的程序体现为pregelx实例对象的成员函数;按下文方框中所示的算法逻辑实现pregel编程模型的顶点程序pregelvertexprogram,并在顶点程序的指定代码位置依次调用pregelx实例对象的成员函数;unigps编程框架的计算进程中对pregelx实例对象的成员函数的调用,将被转化为基于进程间通信的方式,对pregelxrunner进程中pregelx实例对象的成员函数的调用。

基于vcprog编程模型编写的程序转换为基于gather-apply-scatter编程模型所编写的程序的具体实施方式为:vcprog编程模型编写的程序体现为pregelx实例对象的成员函数;按下文方框中所示的算法逻辑实现gather-apply-scatter编程模型(即gasvertexprogram)的gather、sum、scatter、apply等函数,各个函数在指定位置依次调用pregelx实例对象的成员函数;unigps编程框架的计算进程中对pregelx实例对象的成员函数的调用,将被转化为基于进程间通信的方式,对pregelxrunner进程中pregelx实例对象的成员函数的调用。

基于vcprog编程模型编写的程序转换为基于push-pull编程模型所编写的

程序的具体实施方式为:对于给定的pregelx实例对象,按下文框中所示的算法逻辑实现push-pull编程模型的work、densesignal、denseslot等函数,并在各个函数的指定位置依次调用pregelx实例对象的成员函数;unigps编程框架的计算进程中对pregelx实例对象的成员函数的调用,将被转化为基于进程间通信的方式,对pregelxrunner进程中pregelx实例对象的成员函数的调用。

发明内容里的步骤(1)中所述的跨平台统一图处理编程框架unigps的具

体实施方式为:unigps编程框架以python语言中的unigps类的形式提供;unigps类包括loadfromcsv、loadfromdb、savetocsv、savetodb等成员函数,这些成员函数用于实现图数据文件格式与外部数据源的双向转换;unigps类包含成员函数pregelx,pregelx成员函数的调用方法如下文框中所示;

pregelx成员函数的参数包括输入图数据文件路径、pregelx实例对象、指示分布式图处理系统引擎的字符串、输出图数据文件路径等,用户通过调用unigps类的pregelx成员函数触发分布式图数据处理的计算作业。

unigps编程框架的架构如图3所示,unigps编程框架由跨平台统一图处理编程模型vcprog、基础算子、分布式图处理系统后端、统一图数据交换格式等四个模块组成;跨平台统一图处理编程模型vcprog模块向用户提供pregelx抽象类编程接口,并利用genericrecord序列化格式表示图中顶点属性记录、边属性记录和消息;pregelx进程间通信接口实现了用户编写的基于pregelx抽象类的图处理程序与分布式图处理系统后端的交互;基础算子模块内置了多种预编译好的典型图算法的算子,用户可以直接调用特定的算子来进行图数据处理,每一个算子都有对应的编程接口,并支持在多个分布式图处理系统上执行;分布式图处理系统后端模块集成了多种主流的分布式图处理系统(例如giraph、graphx和gemini),这些分布式图处理系统负责具体执行用户编写的图处理程序和基础算子模块内置的典型图算法的算子;统一图数据交换格式模块主要实现分布式图处理系统后端与多个外部数据源之间的对接功能,分布式图处理系统后端与外部数据源之间的数据交换均通过统一图数据交换格式graphbuffer进行中转。

发明内容里的步骤(5)的具体实施方式为:用户调用unigps类的pregelx成员函数。

发明内容里的步骤(6)的具体实施方式为:利用python语言提供的pickle序列化机制来将用户提供的pregelx实例对象序列化为字节类型的数组。

发明内容里的步骤(7)的具体实施方式为:用户通过unigps类的pregelx成员函数参数指定分布式图处理系统引擎,unigps编程框架支持giraph、graphx、gemini作为分布式图处理系统引擎;启动giraph计算作业的命令以“hadoopjar”开头,该命令的参数包括序列化文件在hdfs上的路径、输入输出图数据文件路径、giraph配置文件路径、最大迭代轮数、消息记录的结构信息;启动graphx计算作业的命令以“spark-submit”开头;启动gemini计算作业的命令以“mpirun”开头;giraph计算作业的driver进程为mapreduce计算作业的driver进程;graphx计算作业的driver进程为sparkapplication的driver进程;gemini计算作业的driver进程为rank为0的mpi进程。

发明内容里的步骤(9)的具体实施方式为:计算进程与pregelxrunner进程之间的进程间通信通道可以是grpc库,也可以是内存映射文件;计算进程与pregelxrunner进程之间的进程间通信架构如图4所示;计算进程会创建进程间通信客户端对象(ipcclient);根据分布式图处理系统的不同,giraph和graphx系统的计算进程会创建java语言的进程间通信客户端,而gemini系统的计算进程会创建c++语言的进程间通信客户端;pregelxrunner进程会创建python语言的进程间通信服务器端对象(ipcserver);进程间通信服务器端对象会向进程间通信客户端对象暴露pregelx抽象类成员函数的远程方法调用接口;进程间通信客户端对象可以借助进程间通信通道实现对服务器端的远程方法调用功能。

利用python提供的pickle序列化机制实现从字节类型数组反序列化为pregelx实例对象o的功能;pregelx实例对象o将作为一个全局变量保存在pregelxrunner进程中,如图4所示;进程间通信服务器端在接收到进程间通信客户端的远程方法调用之后,会调用pregelx实例对象o对应的成员函数,并将成员函数的返回值通过进程间通信通道返回给进程间通信客户端。

发明内容里的步骤(10)的具体实施方式为:外部数据源中的图数据载入分布式图处理系统的流程如图5所示,对于存储在外部数据源的输入图数据,先通过mapreduce或spark转换为基于统一图数据交换格式graphbuffer的文件并存储在分布式文件系统之中,然后分布式图处理系统再从分布式文件系统载入graphbuffer格式的文件;统一图数据交换格式graphbuffer的文件结构如图6所示;每一张图的数据在graphbuffer格式中均以一个目录的形式存储,该目录下的.meta元文件存储图的元信息数据(例如顶点数、边数、有向性等),该目录下的vertex顶点集目录用于存储顶点属性记录(其中vertex顶点集目录下的schema文件存储顶点属性记录的结构信息,data数据目录存储以genericrecord序列化格式表示的顶点属性记录),该目录下的edge边集目录存储边属性记录(其中edge边集目录下的schema文件存储边属性记录的结构信息,data数据目录存储以genericrecord序列化格式表示的边属性记录,每一条边属性记录至少包含src和dst两个字段,这两个字段表示了一条边的源顶点和目标顶点编号)。

genericrecord序列化格式的实施方式为:一条记录由多个字段构成;一条记录在经过genericrecord格式序列化后得到的字节类型数组的数据布局如图7所示,字节类型数组由record长度、定长字段数据、变长字段偏移量、变长字段数据等四部分构成;record长度为32位整型数,记录了整个字节类型数组的长度;定长字段数据部分按照记录的结构定义,依次存储每一个定长字段序列化后得到的字节类型的子数组;变长字段偏移量部分存储了记录中每一个变长字段在字节类型数组中对应子数组的起始位置的偏移量,每一个偏移量是32位整型数;变长字段数据部分具体存储了每一个变长字段序列化后的字节类型子数组;所有字段采用字段数据类型在x86内存中的表示方式进行序列化,不进行额外的压缩或采用特殊编码;对于基本类型字段采用小端字节序,对于字符串字段采用utf-8格式进行编码。

发明内容里的步骤(12)的具体实施方法为:分布式图处理系统的计算进程按照各自的计算逻辑进行分布式图数据处理;当计算进程需要调用pregelx实例对象的成员函数时,计算进程调用进程间通信客户端对象中相应的pregelx成员函数的远程调用方法,进程间通信客户端对象将远程方法调用的方法编号以及方法参数通过进程间通信通道传递给pregelxrunner进程中的进程间通信服务器端对象,进程间通信服务器端对象根据方法编号以及方法参数,调用pregelxrunner进程中的pregelx实例对象的成员函数,成员函数的返回值通过进程间通信通道传递回计算进程中的进程间通信客户端对象,进程间通信客户端对象再将返回值传递给分布式图处理系统。

发明内容里的步骤(13)中所述的各计算进程将顶点属性记录、边属性记录以文件形式输出到分布式文件系统的具体实施方法为:顶点属性记录、边属性记录以genericrecord格式进行序列化,并将整张图的数据以统一图数据交换格式graphbuffer存储在分布式文件系统上。

本发明提出了一种能够实现跨平台统一分布式图数据处理的方法。该方法使用户能够在jupyternotebook等交互式python程序开发环境中进行分布式图数据处理,而无需学习分布式图处理系统的使用,也无需了解分布式计算框架的技术细节。本发明提出的方法使用户编写的分布式图处理程序能够跨平台地被多个分布式图处理系统执行而无需修改程序代码。本发明提出的方法允许输入图数据来自多个外部数据源(例如csv文件、图数据库等)。为了测试本发明提出的方法的计算性能相比单机图数据处理方法的性能优势,在一个由9个节点组成的集群(1个主节点+8个计算节点)中,通过实验比较了本发明提出的方法和python单机图计算软件库networkx在处理同一个数据集时的执行时间,实验结果如图8所示。图8(a)、图8(b)和图8(c)分别展现了两种方法在pagerank算法、单源最短路径算法(sssp)和弱连通分量算法(cc)的执行时间,其中本发明提出的方法在分布式图处理系统giraph、graphx、gemini上的执行时间分别记作unigps-giraph、unigps-graphx和unigps-gemini。实验结果表明本发明提出的方法使用户编写的程序可以不经修改地、跨平台地在giraph、graphx、gemini等多个分布式图处理系统上执行。实验结果同时表明本发明提出的方法能够比networkx软件库处理更大规模的图数据集,并且本发明提出的方法在分布式图处理系统giraph上的执行时间小于networkx软件库。

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