面向大图分割的分布式动态图管理系统的制作方法

文档序号:11950392阅读:422来源:国知局
面向大图分割的分布式动态图管理系统的制作方法与工艺

本发明属于图数据挖掘领域,特别涉及一种面向大图分割的分布式动态图管理系统。



背景技术:

面对大规模的图数据,常规的处理方法是置之于分布式多机器节点上进行并行处理,则图分割问题的解决是采取该方案的前提。早在1970年代,图分割问题就已经成为图论研究领域的热门话题。经过40余年的发展,传统图分割算法已趋近于成熟。将整个图进行分割,才能够在分布式图计算平台进行分析。然而,图分割算法的好坏会直接影响到分布式计算平台的性能,主要原因包括各机器负载均衡问题和机器间的通信耗时问题。

由于图在现实世界中的广泛应用,近年来学术界和工业界出现了许多分布式的图计算系统。常见的大规模分布式图计算平台有Pregel、Giraph、GraphLab、PowerGraph、GraphX等。若将大规模图数据放置于分布式系统上,首先需对图进行分割。虽然关于图分割技术发展时间较长,但如何高效的分割大规模的图数据,同时建立新的海量图数据处理模型与算法,仍是一个新的研究问题。



技术实现要素:

【要解决的技术问题】

本发明的目的是提供一种面向大图分割的分布式动态图管理系统,以解决大规模的图数据的分割问题。

【技术方案】

本发明是通过以下技术方案实现的。

本发明涉及一种面向大图分割的分布式动态图管理系统,包括至少一个Master主机和若干个Slave主机,所述Master主机上设置有分配逻辑模块,各个Slave主机均设置有动态均衡模块,

所述分配逻辑模块被配置成:读取大图数据流中的一条顶点信息,对该顶点信息中的边进行分配,并将分配结果存储于对应的Slave主机;

所述动态均衡模块被配置成:对于图中的任一顶点v,按照下列第一分配公式进行分配:

<mrow> <mi>I</mi> <mi>n</mi> <mi>d</mi> <mi>e</mi> <mi>x</mi> <mo>=</mo> <msub> <mi>argmax</mi> <mrow> <mi>i</mi> <mo>&Element;</mo> <mo>{</mo> <mn>1</mn> <mo>,</mo> <mo>...</mo> <mo>,</mo> <mi>p</mi> <mo>}</mo> </mrow> </msub> <mo>{</mo> <msub> <mi>&Sigma;</mi> <mrow> <mi>v</mi> <mo>&Element;</mo> <msub> <mi>V</mi> <mrow> <mi>&Gamma;</mi> <mrow> <mo>(</mo> <mi>i</mi> <mo>)</mo> </mrow> </mrow> </msub> </mrow> </msub> <msub> <mi>r</mi> <mi>v</mi> </msub> <mo>}</mo> <mo>,</mo> </mrow>

其中Index i∈{1,…,p}为分区编号,VΓ(i)为其第i个分区上的邻居顶点集合,rv为邻居v对该顶点的读频率为rv;对于图中的任一顶点,如果该顶点的更新频率小于其在某个分区被读的频率,则需要保留该顶点在该分区,反之则不保留该顶点在该分区。

作为一种优选的实施方式,所述各个Slave主机还设置有可视化模块,所述可视化模块用于显示分配逻辑模块的分配结果。

作为另一种优选的实施方式,所述Master主机上还设置有全局信息存储模块,所述全局信息存储模块用于存储分配逻辑模块的分配结果。

作为另一种优选的实施方式,所述Master主机上还设置有路由逻辑模块,所述路由逻辑模块被配置成:接收到外部查询访问请求后,通过查询全局信息存储模块,得到访问请求中顶点或边所在的Slave主机,并将信息返回。

作为另一种优选的实施方式,所述分配逻辑模块具体被配置成:读取大图数据流中的一条顶点信息;在该顶点信息的所有顶点中寻找最小度顶点vmin;将与顶点vmin相关的边e取出;按照下列第二分配公式进行边分配:

Index1hc=arg maxi∈{1,…,k}{|Pt(i)∩Γ(vmin)|w(t,i)},

其中,Index1hc为分配的分区,w(t,i)为权重惩罚函数:ω为预设的惩罚函数参数,Pt(i)为t时刻i分区的顶点集合,Γ(vmin)为顶点vmin的邻居集合,k为总的分区个数;将顶点vmin从Γ(v)中移除,重新从Γ(v)中寻找最小度顶点,再次按照上述第二分配公式分配与该最小度顶点相关的边,直至Γ(v)为空。

作为另一种优选的实施方式,所述分配逻辑模块具体被配置成:读取大图数据流中的一条顶点信息;在该顶点信息的所有顶点中寻找最大度顶点vmax;将与vmax相关的边e取出;按照下列第三分配公式进行边分配:

Index2hc=arg maxi∈{1,…,k}{|Pt(i)∩Γ(vmax)|w(t,i)},

其中,Index2hc为分配的分区,w(t,i)为权重惩罚函数:ω为预设的惩罚函数参数,Pt(i)为t时刻i分区的顶点集合,Γ(vmin)为顶点vmax的邻居集合,k为总的分区个数;将顶点vmax从Γ(v)中移除,重新从Γ(v)中寻找最大度顶点,再次按照上述第三分配公式分配与该最大度顶点相关的边,直至Γ(v)为空。

作为另一种优选的实施方式,所述惩罚函数参数ω取1。

作为另一种优选的实施方式,所述Slave主机设置有图访问接口,所述图访问接口用于上层获取图的相关信息。

下面对本发明进行详细说明。

现实世界中的网络通常可以抽象为由点和边组成的图模型,下面首先介绍图的基本概念和定义。

定义(图)设V为包含nV个元素的集合,E为包含nE个V集合中的元素对,则一个图可以表示为一个二元组(V,E)。其中,V中的元素为图的顶点集合,集合是由两个顶点对组成,表征图中的边。顶点的数目也可记为|V|,边的数目可以记为|E|。

网络中的点常称作节点(node),而图中的点常被称作顶点(vertex)。本发明统一使用“顶点”来代称图中的点。当顶点集合V和边集合E都为有限集合时,此图称为有限图,本发明中的图均为有限图。

设图G=(V,E)是一个非空图。图G中顶点v的所有邻居集合用ΓG(v),或简单的用Γ(v)表示。顶点v的度用dG(v)或d(v)来表示,大小与v的所有邻居数目相等。如果一个顶点的度为0,则这个顶点是一个完全孤立的点。

定义(图的k路边分割,Edge Cut)设图G=(V,E),Pk={V1,V2,…,Vk}包含k个V的子集集合,如果满足以下条件则可称为图G的k路边分割:

(1)Pk中元素不为空:

(2)Pk中的元素不相交:

(3)Pk中元素的并集等于V:

<mrow> <msubsup> <mo>&cup;</mo> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>k</mi> </msubsup> <msub> <mi>V</mi> <mi>i</mi> </msub> <mo>=</mo> <mi>V</mi> <mo>;</mo> </mrow>

其中Pk中元素Vi被称为图的子分区,k为分区的基数,也被称为分区数目。

定义(图的k路顶点分割,Vertex Cut)设图G=(V,E),Pk={E1,E2,…,Ek}包含k个E的子集集合,如果满足以下条件则可称为图G的k路顶点分割:

(1)Pk中的元素不为空:

(2)Pk中元素不相交:

(3)Pk中元素的并集等于:

<mrow> <msubsup> <mo>&cup;</mo> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>k</mi> </msubsup> <msub> <mi>E</mi> <mi>i</mi> </msub> <mo>=</mo> <mi>E</mi> <mo>;</mo> </mrow>

上述定义是常见两类图分割方法:边分割(edge-cut)方法和顶点分割(vertex-cut)方法。边分割尝试通过对图中的边进行切割,将顶点分配到各分区。然而,顶点分割方法均匀的将边分配到各分区。每个分区并不是完全根据顶点数目来确定分区大小,其依据的是对于权重的度量方法。上述定义并非绝对,很多学者提出的顶点冗余的图分割方法,各分区集合之间有很多元素相互重合,这使得图算法过程中的查询延时大大降低。本发明提出的基于局部最小度的贪心分配方法或基于局部最大度的贪心分配方法均基于冗余方法。

下面对本发明中的分布式图系统进行介绍。

本发明中的的分布式图系统主要由1个Master主机和若干个Slave主机组成,Slave主机的数目根据实际应用需求指定。每个Slave主机可被看作图分割后的一个区块。外部请求首先会被发送到Master主机,Master主机根据请求需要将信息分发到对应的Slave主机。

Master主机包括分配逻辑模块,用于读取大图数据流中的一条顶点信息,对该顶点信息中的边进行分配,并将分配结果存储于对应的Slave主机。具体地,分配逻辑模块对顶点信息中的边进行分配的方法可以为基于局部最小度的贪心分配方法(Edge Greedy Based on Local Smallest Degree,EGS)或基于局部最大度的贪心分配方法(Edge Greedy Based on Local Biggest Degree,EGB),下面分别介绍这两种分配方法。

(1)基于局部最小度的贪心分配方法

由于数据流每次读入的信息为某个顶点及该顶点所有邻居信息,本发明认为最大化利用这些局部性信息是图分割的关键大规模自然图数据的顶点度都呈现严重倾斜的幂律分布,因此可以尝试首先寻找局部性的最小度或者最大度顶点,然后利用启发式思想进行分配。

分配逻辑模块首先要从流数据中读入一条信息,这其中包含一个顶点及其邻居的多条边信息。假设v为该行数据流所描述的顶点,Γ(v)为顶点v所有邻居集合。首先,分配逻辑模块在这些所有顶点中寻找最小度顶点vmin。然后将与vmin相关的边e取出,按照下面描述的启发式分割方法进行分配。

启发式方法是指寻找与顶点vmin具有最多邻居的分区。设Pt(i)为t时刻i分区的顶点集合,Γ(vmin)为顶点vmin的邻居集合。边分配则依照下面公式:

<mrow> <mi>I</mi> <mi>n</mi> <mi>d</mi> <mi>e</mi> <mi>x</mi> <msub> <mn>1</mn> <mrow> <mi>h</mi> <mi>c</mi> </mrow> </msub> <mo>=</mo> <mi>arg</mi> <munder> <mi>max</mi> <mrow> <mi>i</mi> <mo>&Element;</mo> <mo>{</mo> <mn>1</mn> <mo>,</mo> <mo>...</mo> <mo>,</mo> <mi>k</mi> <mo>}</mo> </mrow> </munder> <mo>{</mo> <mo>|</mo> <msup> <mi>P</mi> <mi>t</mi> </msup> <mrow> <mo>(</mo> <mi>i</mi> <mo>)</mo> </mrow> <mo>&cap;</mo> <mi>&Gamma;</mi> <mrow> <mo>(</mo> <msub> <mi>v</mi> <mrow> <mi>m</mi> <mi>i</mi> <mi>n</mi> </mrow> </msub> <mo>)</mo> </mrow> <mo>|</mo> <mi>w</mi> <mrow> <mo>(</mo> <mi>t</mi> <mo>,</mo> <mi>i</mi> <mo>)</mo> </mrow> <mo>}</mo> </mrow>

其中,w(t,i)为权重惩罚函数:

<mrow> <mi>w</mi> <mrow> <mo>(</mo> <mi>t</mi> <mo>,</mo> <mi>i</mi> <mo>)</mo> </mrow> <mo>=</mo> <mn>1</mn> <mo>-</mo> <msup> <mrow> <mo>(</mo> <mfrac> <mrow> <msup> <mi>P</mi> <mi>t</mi> </msup> <mrow> <mo>(</mo> <mi>i</mi> <mo>)</mo> </mrow> </mrow> <mi>C</mi> </mfrac> <mo>)</mo> </mrow> <mi>&omega;</mi> </msup> </mrow>

为能够保证分区的均衡性,引入惩罚函数。对于较大分区惩罚力度更大。ω不同则对权重影响不同。若参数ω为0则无任何惩罚,是一种无权重的贪心分割算法。当0<ω<1时,曲线斜率从高逐渐变平缓。这意味着在图分割过程中,开始阶段对已装载一定数目顶点的分区惩罚力度很大,而在分区逐渐饱和阶段,分区大小的惩罚也随之减轻。若ω=1,则惩罚权重函数为线性,斜率为1。这意味着图分割过程中对各分区大小的惩罚力度不变。若ω>1时,惩罚权重函数曲线则从平缓变得陡峭。这意味着图分割初始阶段,对于较小的分区惩罚力度很小,随着分区大小增大,惩罚力度也逐渐变大。随着ω从0逐渐增长,对于分区大小的惩罚也是从“前重后轻”逐渐变为“前轻后重”的效果。不同的ω对于实际分割效果有一定影响。合理的选择ω的值会再一定程度上提高图分割效果。

将边e分配到与顶点vmin具有最多邻居的分区。分配完边e之后,将顶点vmin从Γ(v)中移除。然后重新从Γ(v)中寻找最小度顶点,按照启发式分配方法再次分配与该最小度顶点相关的边。直至Γ(v)为空,也即所有邻居边分配完毕再读入下一行顶点信息进行处理。

(2)基于局部最大度的贪心分配方法

分配逻辑模块首先从数据流中读入一条信息,这其中包含一个顶点及邻居的多条边信息。假设v为该行数据流所描述的顶点,Γ(v)为顶点v所有邻居集合。首先,分配逻辑模块在这些邻居顶点中寻找最大度顶点vmax,然后将待分配边e(v,vmax)按照下述启发式方法进行分配。

与EGS类似,边分配的分区依照下面求得,只不过是依照最大度顶点进行贪心分配。

Index2hc=arg maxi∈{1,…,k}{|Pt(i)∩Γ(vmax)|w(t,i)}

将该边分配到与vmax顶点具有最多邻居的分区分配。分配完该边之后,将该边从Γ(v)中移除。然后重新从Γ(v)中寻找最大度顶点。直至所有邻居边分配完毕再读入下一行顶点信息。

本发明中,各个Slave主机均设置有动态均衡模块。动态均衡模块具体被配置成:根据图中顶点读行为确定每个顶点的主顶点所在分区,然后再根据顶点活动行为确定影子顶点拷贝情况。下面将分别对这两个方面进行详细说明。

(1)主顶点确定方法

图分割需要考虑用户活动行为特征,仅按照图结构进行分割,则顶点的主顶点则有可能会被分配到错误的分区。如图1所示,此图为有向图,带方向的边在社交网络中表示某用户关注另外一个用户。例如边e<A,E>表示A关注了E,或者说A加E为好友。边上权重表示某顶点查看好友的次数,也即边的起点用户活跃程度。例如边e<A,D>的权重为10,表示顶点A每个周期内会查看自己好友D的信息10次。顶点D的主顶点在b分区中,其影子顶点在a分区中。这是因为a分区中,顶点D的邻居只有1个{A},而b分区中D的邻居则有两个{C,G}。因而,按照图结构对图进行分割,则理应将D的主顶点分配到b分区。

在现实世界中,图的访问并不完全依照图自身结构特征,用户读写行为对图的访问有着直接影响。如果参照用户读写行为对图进行分割,则会将顶点D分配到a分区,如图2所示。由于顶点D的信息在a分区内会被访问10次。顶点D的信息在b分区内会被顶点C访问2次,会被顶点G访问3次,共5次。虽然a分区D仅有一个邻居,较b分区两个邻居要少。但a分区的邻居更为活跃,对顶点D的访问频率也更高。因此,有理由将顶点D的主顶点放置在a分区内。

本发明采用如下方法确定主顶点。

对于图中任一顶点,该顶点的主顶点被分配到:

<mrow> <mi>I</mi> <mi>n</mi> <mi>d</mi> <mi>e</mi> <mi>x</mi> <mo>=</mo> <mi>arg</mi> <munder> <mrow> <mi>m</mi> <mi>a</mi> <mi>x</mi> </mrow> <mrow> <mi>i</mi> <mo>&Element;</mo> <mo>&lsqb;</mo> <mi>p</mi> <mo>&rsqb;</mo> </mrow> </munder> <mo>{</mo> <munder> <mo>&Sigma;</mo> <mrow> <mi>v</mi> <mo>&Element;</mo> <msub> <mi>V</mi> <mrow> <mi>&Gamma;</mi> <mrow> <mo>(</mo> <mi>i</mi> <mo>)</mo> </mrow> </mrow> </msub> </mrow> </munder> <msub> <mi>r</mi> <mi>v</mi> </msub> <mo>}</mo> </mrow>

其中i∈{1,…,p}为分区编号,VΓ(i)为其第i个分区上的邻居顶点集合。rv为其邻居v对该顶点的读频率。通过计算所有分区对每个顶点的读频率,选择值最大的分区作为该顶点的主分区。

(2)影子顶点确定方法

确定了主顶点后,动态均衡模块还需要确定影子顶点,具体的确定方法如下:

对于图中任一顶点v,其影子顶点所在分区i→{1,…,k}。如果wv<rv(i),则需要保留影子顶点在i分区;如果wv≥rv(i),则不需要在i分区保留此影子顶点,其中wv为顶点v的更新频率,rv(i)为顶点v在i分区被读的频率。即:如果该顶点的更新频率小于其在某个分区被读的频率,则需要保留该顶点在该分区,反之则不保留该顶点在该分区,可予以删除,通过该方法减轻了网络负载,节省了顶点信息所占用的存储空间。

【有益效果】

本发明提出的技术方案具有以下有益效果:

(1)本发明提供的分布式图管理系统实现了图的导入、分割和访问,且实现了分割结果的可视化,使用户一目了然的观察到图分割的结果,知晓分割的好坏。

(2)本发明的动态均衡模块通过根据图中顶点读行为确定每个顶点的主顶点所在分区,然后再根据顶点活动行为确定影子顶点拷贝情况,减轻了网络负载,节省了顶点信息所占用的存储空间。

(3)本发明的分配逻辑模块采用的基于局部最小度的贪心分配方法或基于局部最大度的贪心分配方法,对于复制因子和跨分区通信两方面的降低都有非常好的效果。

附图说明

图1为基于图结构分割的主顶点位置图。

图2为基于读频率图分割主顶点位置图。

图3为本发明的实施例一提供的分布式图管理系统的原理框图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将对本发明的具体实施方式进行清楚、完整的描述。

实施例一

图3为本发明实施例一提供的分布式图管理系统的原理框图。如图3所示,该系统包括1个Master主机和k个Slave主机。

Master主机上设置有分配逻辑模块、路由逻辑模块、全局信息存储模块。

本实施例中,分配逻辑模块的分配方法为基于局部最小度的贪心分配方法,具体地,分配逻辑模块被配置成:读取大图数据流中的一条顶点信息,对该顶点信息中的边进行分配,并将分配结果存储于对应的Slave主机。本实施例中,分配逻辑模块具体被配置成:读取大图数据流中的一条顶点信息;在该顶点信息的所有顶点中寻找最小度顶点vmin;将与顶点vmin相关的边e取出;按照下列第二分配公式进行边分配:

Index1hc=arg maxi∈{1,…,k}{|Pt(i)∩Γ(vmin)|w(t,i)},

其中,Index1hc为分配的分区,w(t,i)为权重惩罚函数:ω为预设的惩罚函数参数,本实施例中的惩罚函数参数ω取1,Pt(i)为t时刻i分区的顶点集合,Γ(vmin)为顶点vmin的邻居集合,k为总的分区个数;将顶点vmin从Γ(v)中移除,重新从Γ(v)中寻找最小度顶点,再次按照上述第二分配公式分配与该最小度顶点相关的边,直至Γ(v)为空。

全局信息存储模块用于存储分配逻辑模块的分配结果。

各个Slave主机均设置有动态均衡模块、可视化模块和图访问接口。

动态均衡模块具体被配置成:对于图中的任一顶点v,按照下列第一分配公式进行分配:

<mrow> <mi>I</mi> <mi>n</mi> <mi>d</mi> <mi>e</mi> <mi>x</mi> <mo>=</mo> <msub> <mi>argmax</mi> <mrow> <mi>i</mi> <mo>&Element;</mo> <mo>{</mo> <mn>1</mn> <mo>,</mo> <mo>...</mo> <mo>,</mo> <mi>p</mi> <mo>}</mo> </mrow> </msub> <mo>{</mo> <msub> <mi>&Sigma;</mi> <mrow> <mi>v</mi> <mo>&Element;</mo> <msub> <mi>V</mi> <mrow> <mi>&Gamma;</mi> <mrow> <mo>(</mo> <mi>i</mi> <mo>)</mo> </mrow> </mrow> </msub> </mrow> </msub> <msub> <mi>r</mi> <mi>v</mi> </msub> <mo>}</mo> <mo>,</mo> </mrow>

其中Indexi∈{1,…,p}为分区编号,VΓ(i)为其第i个分区上的邻居顶点集合,rv为邻居v对该顶点的读频率为rv;对于图中任一顶点v,其影子顶点所在分区i→{1,…,k}。如果wv<rv(i),则需要保留影子顶点在i分区;如果wv≥rv(i),则不需要在i分区保留此影子顶点,其中wv为顶点v的更新频率,rv(i)为顶点v在i分区被读的频率,即:如果该顶点的更新频率小于其在某个分区被读的频率,则需要保留该顶点在该分区,反之则不保留该顶点在该分区,可予以删除,通过该方法减轻了网络负载,节省了顶点信息所占用的存储空间。

路由逻辑模块被配置成:接收到外部查询访问请求后,通过查询全局信息存储模块,得到访问请求中顶点或边所在的Slave主机,并将信息返回。

可视化模块用于显示分配逻辑模块的分配结果。具体地,本发明通过d3.js引擎对分割结果可视化,d3.js引擎是一个可视化相关的javascript库,通过操作数据来进行可视化展示。其中,通过不同颜色来表征不同的顶点特征,顶点名称信息也可通过设置来确定显示与否。通过可视化之后,可对分割好坏一目了然。此外,可视化模块通过每个顶点的度来决定顶点圆圈大小。度越大圆圈半径也越大,否则越小。这使得顶点重要性也可通过可视化表现出来。可视化模块会自动根据力学原理确定整个图布局,用户也可通过拖拽顶点来重新调整顶点位置。

图访问接口用于上层获取图的相关信息。

实施例二

实施例二同样提供一种分布式图管理系统,其原理图与实施例一的原理图相同,其不同之处仅在于分配逻辑模块采用的分配方法不同。

特别地,本实施例中,分配逻辑模块采用基于局部最大度的贪心分配方法,具体地,分配逻辑模块被配置成:读取大图数据流中的一条顶点信息;在该顶点信息的所有顶点中寻找最大度顶点vmax;将与vmax相关的边e取出;按照下列第三分配公式进行边分配:

Index2hc=arg maxi∈{1,…,k}{|Pt(i)∩Γ(vmax)|w(t,i)},

其中,Index2hc为分配的分区,w(t,i)为权重惩罚函数:ω为预设的惩罚函数参数,Pt(i)为t时刻i分区的顶点集合,Γ(vmin)为顶点vmax的邻居集合,k为总的分区个数;将顶点vmax从Γ(v)中移除,重新从Γ(v)中寻找最大度顶点,再次按照上述第三分配公式分配与该最大度顶点相关的边,直至Γ(v)为空。

从以上实施例可以看出,本发明实施例提供的分布式图管理系统实现了图的导入、分割和访问,且实现了分割结果的可视化,使用户一目了然的观察到图分割的结果,知晓分割的好坏。另外,本发明实施例中的动态均衡模块通过根据图中顶点读行为确定每个顶点的主顶点所在分区,然后再根据顶点活动行为确定影子顶点拷贝情况,减轻了网络负载,节省了顶点信息所占用的存储空间。最后,本发明实施例中的分配逻辑模块采用的基于局部最小度的贪心分配方法或基于局部最大度的贪心分配方法,对于复制因子和跨分区通信两方面的降低都有非常好的效果。

需要说明,上述描述的实施例是本发明的一部分实施例,而不是全部实施例,也不是对本发明的限制。基于本发明的实施例,本领域普通技术人员在不付出创造性劳动前提下所获得的所有其他实施例,都属于本发明的保护范围。

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