美文网首页
GraphX构建图的源码详解

GraphX构建图的源码详解

作者: llllqb | 来源:发表于2017-01-14 20:25 被阅读0次

弹性分布式属性图

GraphX的核心抽象是弹性分布式属性图,它是一个有向多重图,带有连接到每个顶点和边的用户定义的对象。 有向多重图中多个并行的边共享相同的源和目的顶点。属性图扩展了Spark RDD的抽象,有Table和Graph两种视图,但是只需要一份物理存储。两种视图都有自己独有的操作符,从而使我们同时获得了操作的灵活性和执行的高效率。

GraphX图的分布式存储采用点分割模式(每条边只存储在一台机器上),用三个RDD存储图数据信息。

1.VertexTable(id, data):id为顶点id, data为顶点属性

2.EdgeTable(pid, src, dst, data):pid 为分区id ,src为源顶点id ,dst为目的顶点id,data为边属性

3.RoutingTable(id, pid):id 为顶点id ,pid 为分区id

图的构建

GraphX的Graph对象是用户操作图的入口。构建图的过程分为三步:构建边EdgeRDD、构建顶点VertexRDD、生成Graph对象。

通过调用GraphImpl的apply方法来构建Graph。

构建边RDD:

在apply调用fromEdgeRDD之前,代码会调用EdgeRDD.fromEdges构建边RDD,分区优化。

遍历RDD[Edge[ED]]每个分区并调用toEdgePartition对分区内的边作相应处理。

toEdgePartition():对边进行排序(按srcId),排序是为了遍历时顺序访问,加快访问速度;填充localSrcIds, localDstIds, data, index, global2local, local2global, vertexAttrs;可以通过根据本地下标取取VertexId,也可以根据VertexId取本地下标,取相应的属性。

构建顶点RDD:

在代码会调用了EdgeRDD.fromEdges后,边RDD就构建完成,此时apply调用fromEdgeRDD中的VertexRDD.fromEdges来构建顶点RDD。

构建的过程如下:

1.创建路由表:根据EdgeRDD,map其分区,对edge partition中的数据转换成RoutingTableMessage数据结构,一个包含vid和int的tuple(VertexId, Int)。 int的32~31位表示一个标志位(01: isSrcId 10: isDstId),30~0位表示边分区ID

2.根据路由表生成分区对象vertexPartitions。在新分区中,map分区中的每条数据,从RoutingTableMessage解出数据:vid, edge pid, isSrcId/isDstId。这个三个数据项重新封装到三个数据结构中:pid2vid,srcFlags,dstFlags

3.生成ShippableVertexPartition:上面routingTables, 重新封装路由表里的数据结构为:ShippableVertexPartition

4.创建VertexRDDImpl对象new VertexRDDImpl(vertexPartitions)

生成Graph对象:

把edgeRDD和vertexRDD拿过来组成Graph GraphImpl(vertices, new ReplicatedVertexView(edges.asInstanceOf[EdgeRDDImpl[ED, VD]]))

相关文章

  • GraphX构建图的源码详解

    弹性分布式属性图 GraphX的核心抽象是弹性分布式属性图,它是一个有向多重图,带有连接到每个顶点和边的用户定义的...

  • Spark GraphX

    Spark GraphX概述 GraphX是Spark的一个组件,专门用来表示图以及进行图的并行计算。GraphX...

  • Graphx 源码剖析-图的生成

    Graphx的实现代码并不多,这得益于Spark RDD niubility的设计。众所周知,在分布式上做图计算需...

  • Spark GraphX图计算框架原理概述

    【转载】原文地址:原文地址 概述   GraphX是Spark中用于图和图计算的组件,GraphX通过扩展Spar...

  • GraphFrames分析豆瓣用户及小组

    上篇已经介绍了通过Spark Graphx构建图,在构图过程中要准备一个Long类型的字段作为节点的VertexI...

  • Spark GraphX

    Spark GraphX GraphX简介 主要特点 演化过程 应用场景 分布式图计算处理技术介绍 下面分别从图数...

  • GraphX之Connected Components

    在Spark Graphx的org.apache.spark.graphx.lib包中有一些常用的图算法,其中一个...

  • Spark-GraphX

    概要 GraphX是Spark的一个新模块,该模块用于图和图并行计算。在更高的层面上,GraphX通过引入一种新的...

  • GraphX 学习笔记

    “像顶点一样思考” ​ Spark GraphX是一个分布式图处理框架,Spark GraphX基于Spark平...

  • GraphX分布式存储

    GraphX分布式存储 GraphX将图数据以RDD分布式地存储在集群的节点上,使用顶点RDD(VertexRDD...

网友评论

      本文标题:GraphX构建图的源码详解

      本文链接:https://www.haomeiwen.com/subject/lxtybttx.html