GraphX的基本介绍
1、GraphX的需要懂的三个问题:
(1)提供给用户的API,各家提供的差不多
(2)图在分布式系统中如何存储?每个机器存哪个边?哪个点?
(3)分布式图是如何通信的呢?(边点确定时)
2、GraphX图引擎
基于Spark,其存的点和边叫分别较做EdgeRDD和VertexRDD,相比于RDD,附加了元信息。
分布式的存储方式会影响后期的执行效率;边和点的存储会影响后期的算法执行。
3、GraphX如何构造图
1)分两步:(1)构造EdgeRDD(2)构造VertexRDD
比如使用GraphLoader加载图信息:(建议)
val graph = GraphLoader.edgeListFile(sc,"da/a.txt")
分析源码就知道先构造的EdgeRDD,然后在构造VertexRDD。(后期会有源码剖析)
4、分割
边分割:每个顶点全部数据在一个机器上,缺点是在读边时会存在跨机器通信。GraphX跨机器通信是Shuffle,是粗粒度的。但是GraphX不支持边分割。
点分割:点跨机器,点还是相同的。当点数据发生变化时,edgeparption都会向VertexPartition更新。好处是边没有冗余,但是点存在冗余。这样点可以并行处理,符合MP用法,所以GraphX采用点分割。
目前点切割有4中方法,分别为:
1D/2D/Random /Canonical Random Partition
1D:把srcID相同的边放在一个partition里
Random:随机存
Canonical:双向边都放在一partition
2D:在1D中若某一个srcID度很大,第一次Shuffle时候很有效,但是在第二次Shuffle时候开销非常大,原因是DSTID是不受控制的。
5、分布式环境的执行?执行
GraphX采用的点分割,在GraphX中提供了Pregel接口,其是BSP接口。对于Pregel接口,其每一次迭代会有多少次Shuffle?两次,分别对边的分布及点的分布影响
第一次是:所有的Edge向所有的VertexRDD汇聚消息时。(EdgePartition与VertexPartition时不同的)
第二次是:每个Vertex更新完自己的信息根据route table向每一个有需要的EdgePartition中发送信息。
这个Shuffle是不可避免的,每次Pregel BSP有两次Shuffle。总会有消息传递的,所不同的是消息传递的是多是少?取决于边的数量、算法的收敛速度、把迭代的边或点进行优化。
6、Spark GraphX概述
GraphX是一个分布式图处理框架,基于Spark平台提供了对图计算和图挖掘简洁易用且丰富多彩的接口,极大的方面了用户对分布式图处理的需求。
图的分布式 或者并行处理其实是把图分成很多的子图,然后分别对这些子图进行计算,计算的时候可以分别迭代分阶段的计算,即对图进行并行计算。
需要知道的是图和表(矩阵)是可以相互转化的。
起初,MapReduce的本身特性很适合处理图计算,但是由于中间迭代过多,以及磁盘落地等因素,使得MapReduce处理图计算的效率过低。
目前的图计算框架狠多,来自Google的Pregel、GraphLab等,都是基于BSP的,
BSP(Bulk Synchronous Parallel)
- 作用于的每个顶点并行完成自己的处理逻辑 vertexProgram
- 消息发送,即每个节点向其相邻节点广播其内容更新 sendMessage,并等待所有节点完成信息交换(超步)
- 用更新的消息重新进行顶点程序的计算;
注:存在由木桶原理引起的性能问题(顶点、边分布不均)。
Graphx利用了Spark这样了一个并行处理框架来实现了图上的一些可并行化执行的算法。
引入triplets,主要是和Pregel这个计算模型相关;
图本身是graphx中一个非常重要的概念。
成员变量
graph中重要的成员变量分别为
- vertices
- edges
- triplets
为什么要引入triplets呢,主要是和Pregel这个计算模型相关,在triplets中,同时记录着edge和vertex. 具体代码就不罗列了。
成员函数
函数分成几大类
- 对所有顶点或边的操作,但不改变图结构本身,如mapEdges, mapVertices
- 子图,类似于集合操作中的filter subGraph
- 图的分割,即paritition操作,这个对于Spark计算来说,很关键,正是因为有了不同的Partition,才有了并行处理的可能, 不同的PartitionStrategy,其收益不同。最容易想到的就是利用Hash来将整个图分成多个区域。
- outerJoinVertices 顶点的外连接操作
看到网上大牛写的一篇很好的GraphX的实现剖析:
http://www.cnblogs.com/hseagle/p/3777494.html
GraphX的基本介绍相关推荐
- 大数据——Spark GraphX中算法介绍
一.ConnectedComponents算法 ConnectedComponents即连通体算法用id标注图中每个连通体,将连通体中序号最小的顶点的id作为连通体的id. 图关系如下时: //创建点 ...
- Spark GraphX图计算入门
一.什么是图计算 图计算,可以简单理解为以图这种数据结构为基础,整合相关算法来实现对应应用的计算模型.社交网络中人与人之间的关系,如果用计算机数据结构表示,最合适的就是图了.其中图的顶点表示社交中的人 ...
- mllib逻辑回归 spark_《Spark大数据分析实战》笔记
写在前面:此书很棒,但需要一定的编程功底,此外强烈建议买书,因为很多架构图.算子列表,我也不会摘抄下来. 第一章 简介 1.Spark执行的特点 Hadoop中包含计算框架MapReduce和分布式文 ...
- Spark入门实战系列--9.Spark图计算GraphX介绍及实例
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送–Spark入门实战系列>获取 1.GraphX介绍 1.1 GraphX应用背景 Spark GraphX是一个分布式图处理 ...
- Graphx图算法介绍
本文介绍的Graphx的图上算法都是基于Pregel模型实现的. 用户图计算的场景: 基于度分布的中枢节点发现 基于最大连通图的社区发现(聚类) 基于三角形计数的关系衡量 基于随机游走的用户属性传播( ...
- GraphX介绍及实例
1.GraphX介绍 1.1 GraphX应用背景 Spark GraphX是一个分布式图处理框架,它是基于Spark平台提供对图计算和图挖掘简洁易用的而丰富的接口,极大的方便了对分布式图处理的需求. ...
- GraphX入门介绍
GraphX原型论文 GraphX是 Spark中用于图(e.g., Web-Graphs and Social Networks)和图并行计算(e.g., PageRank and Collabor ...
- Spark MLlib介绍
Spark MLlib介绍 Spark之所以在机器学习方面具有得天独厚的优势,有以下几点原因: (1)机器学习算法一般都有很多个步骤迭代计算的过程,机器学习的计算需要在多次迭代后获得足够小的误差或者足 ...
- 知识图谱学习笔记-知识图谱介绍
一.什么是知识图谱? 解释1: 知识图谱本质上是语义网络 (本体论是语义网落的重要因素) 解释2: 知识图谱也叫做多关系图,由多种类型的节点和多种类型的边组成 构建知识图谱系统中所涉及到的技术 数据 ...
最新文章
- SuperSocket .net服务框架
- 细说Redis分布式锁
- 关于Could not parse configuration: /hibernate.cfg.xml的问题
- Python的reshape(-1,1)
- python3之MongoDB
- Qt sqlit3的增、删、改、查、判断等基本操作接口
- linux coreutils升级,Coreutils
- mysql cluster常见问题访问_MySQL Cluster的常见问题
- 注册表修改服务器连接数量,如何通过Win10注册表更改时间服务器参数值?
- http权威指南(一)-Http概述
- c语言结构体定义常量,C语言结构体
- 数学建模写作指导20篇(一)-如何写好数学建模论文?
- 数据结构——图——拓扑排序算法
- ubuntu20.0.4系统中安装微信
- 【web攻防】CVE-2020-10487 tomcat 文件包含漏洞 docker 复现学习
- 画圆形图片的几种方式
- 【摘抄】领导力21法则-约翰·C·马克斯韦尔
- 未知USB设备(设备描述符请求失败)
- Easy Connect无法连接的情况,当前IE代理启用了自动配置脚本,不允许使用CS客户端登录
- 贪心算法---礼堂的安排