Graphx ~1:原理

零. 写在前面

简单来说,graphx 就是spark封装对图计算的抽象封装,这里的图计算主要是指 多重图 的计算,多重图的概念请看后面会讲到;phx继承自rdd,所以有分布式计算的特性;其中非常重要的2个概念是顶点(vertex)和边(edge)

vertex和edge

  • vertex表示顶点,举个例子,一个一个的人就是一个一个的顶点,人有许多属性,比如姓名、年龄等等,vertex也有很多属性
  • edge表示边,也可以理解成点和点之间的关系,比如人与人之间的关系:父亲、老师、妻子、p友等等

多重图

  • 含有平行边的图称为多重图。也称若图中某两个结点之间的边数多于一条,又允许顶点通过同一条边和自己关联,则称为多重图
  • 如何理解2个节点之间的边数多于1条?举例人与人之间的关系可以既是同事又是朋友
    在这里插入图片描述

spark graphx能做什么

  • PageRank
    这个应该都知道吧,搜索引擎计算网页得分用的

  • 最短路径
    计算点与点之间最小的路径,比如把世界上所有人和人的关系弄成图后,通过计算最短路径,你就能知道你走什么关系能最快联系到特朗普

  • 社群发现
    计算社区中三角形的个数,三角形越多,表示关系越稳固

  • ALS
    做推荐要用到

GraphX 中的一些图算子

在这里插入图片描述

一. GraphX应用背景

Spark GraphX是一个分布式图处理框架,它是基于Spark平台提供对图计算和图挖掘简洁易用的而丰富的接口,极大的方便了对分布式图处理的需求。

众所周知·,社交网络中人与人之间有很多关系链,例如Twitter、Facebook、微博和微信等,这些都是大数据产生的地方都需要图计算,现在的图处理基本都是分布式的图处理,而并非单机处理。Spark GraphX由于底层是基于Spark来处理的,所以天然就是一个分布式的图处理系统。

图的分布式或者并行处理其实是把图拆分成很多的子图,然后分别对这些子图进行计算,计算的时候可以分别迭代进行分阶段的计算,即对图进行并行计算。下面我们看一下图计算的简单示例:
在这里插入图片描述

从图中我们可以看出:拿到Wikipedia的文档以后,可以变成Link Table形式的视图,然后基于Link Table形式的视图可以分析成Hyperlinks超链接,最后我们可以使用PageRank去分析得出Top Communities。在下面路径中的Editor Graph到Community,这个过程可以称之为Triangle Computation,这是计算三角形的一个算法,基于此会发现一个社区。从上面的分析中我们可以发现图计算有很多的做法和算法,同时也发现图和表格可以做互相的转换。

二. GraphX的框架

设计GraphX时,点分割和GAS都已成熟,在设计和编码中针对它们进行了优化,并在功能和性能之间寻找最佳的平衡点。如同Spark本身,每个子模块都有一个核心抽象。GraphX的核心抽象是Resilient Distributed Property Graph,一种点和边都带属性的有向多重图。它扩展了Spark RDD的抽象,有Table和Graph两种视图,而只需要一份物理存储。两种视图都有自己独有的操作符,从而获得了灵活操作和执行效率。

在这里插入图片描述

如同Spark,GraphX的代码非常简洁。GraphX的核心代码只有3千多行,而在此之上实现的Pregel模式,只要短短的20多行。GraphX的代码结构整体下图所示,其中大部分的实现,都是围绕Partition的优化进行的。这在某种程度上说明了点分割的存储和相应的计算优化,的确是图计算框架的重点和难点。

2.1.1图存储模式

l边分割(Edge-Cut):每个顶点都存储一次,但有的边会被打断分到两台机器上。这样做的好处是节省存储空间;坏处是对图进行基于边的计算时,对于一条两个顶点被分到不同机器上的边来说,要跨机器通信传输数据,内网通信流量大。

l点分割(Vertex-Cut):每条边只存储一次,都只会出现在一台机器上。邻居多的点会被复制到多台机器上,增加了存储开销,同时会引发数据同步问题。好处是可以大幅减少内网通信量。

2.1.2GraphX存储模式

Graphx借鉴PowerGraph,使用的是Vertex-Cut(点分割)方式存储图,用三个RDD存储图数据信息:

lVertexTable(id, data):id为Vertex id,data为Edge data

lEdgeTable(pid, src, dst, data):pid为Partion id,src为原定点id,dst为目的顶点id

lRoutingTable(id, pid):id为Vertex id,pid为Partion id

点分割存储实现如下图所示:

在这里插入图片描述

2.1.3图计算模式

目前基于图的并行计算框架已经有很多,比如来自Google的Pregel、来自Apache开源的图计算框架Giraph/HAMA以及最为著名的GraphLab,其中Pregel、HAMA和Giraph都是非常类似的,都是基于BSP(Bulk Synchronous Parallell)模式。

BulkSynchronous Parallell,即整体同步并行,它将计算分成一系列的超步(superstep)的迭代(iteration)。从纵向上看,它是一个串行模式,而从横向上看,它是一个并行的模式,每两个superstep之间设置一个栅栏(barrier),即整体同步点,确定所有并行的计算都完成后再启动下一轮superstep。

在这里插入图片描述

每一个超步(superstep)包含三部分内容:

1.计算compute:每一个processor利用上一个superstep传过来的消息和本地的数据进行本地计算;

2.消息传递:每一个processor计算完毕后,将消息传递个与之关联的其它processors

3.整体同步点:用于整体同步,确定所有的计算和消息传递都进行完毕后,进入下一个superstep。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值