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)

  1. 作用于的每个顶点并行完成自己的处理逻辑 vertexProgram
  2. 消息发送,即每个节点向其相邻节点广播其内容更新 sendMessage,并等待所有节点完成信息交换(超步)
  3. 用更新的消息重新进行顶点程序的计算;

注:存在由木桶原理引起的性能问题(顶点、边分布不均)。

Graphx利用了Spark这样了一个并行处理框架来实现了图上的一些可并行化执行的算法。

引入triplets,主要是和Pregel这个计算模型相关;

图本身是graphx中一个非常重要的概念。

成员变量

graph中重要的成员变量分别为

  1. vertices
  2. edges
  3. triplets

为什么要引入triplets呢,主要是和Pregel这个计算模型相关,在triplets中,同时记录着edge和vertex. 具体代码就不罗列了。

成员函数

函数分成几大类

  1. 对所有顶点或边的操作,但不改变图结构本身,如mapEdges, mapVertices
  2. 子图,类似于集合操作中的filter subGraph
  3. 图的分割,即paritition操作,这个对于Spark计算来说,很关键,正是因为有了不同的Partition,才有了并行处理的可能, 不同的PartitionStrategy,其收益不同。最容易想到的就是利用Hash来将整个图分成多个区域。
  4. outerJoinVertices 顶点的外连接操作

看到网上大牛写的一篇很好的GraphX的实现剖析:

http://www.cnblogs.com/hseagle/p/3777494.html

GraphX的基本介绍相关推荐

  1. 大数据——Spark GraphX中算法介绍

    一.ConnectedComponents算法 ConnectedComponents即连通体算法用id标注图中每个连通体,将连通体中序号最小的顶点的id作为连通体的id. 图关系如下时: //创建点 ...

  2. Spark GraphX图计算入门

    一.什么是图计算 图计算,可以简单理解为以图这种数据结构为基础,整合相关算法来实现对应应用的计算模型.社交网络中人与人之间的关系,如果用计算机数据结构表示,最合适的就是图了.其中图的顶点表示社交中的人 ...

  3. mllib逻辑回归 spark_《Spark大数据分析实战》笔记

    写在前面:此书很棒,但需要一定的编程功底,此外强烈建议买书,因为很多架构图.算子列表,我也不会摘抄下来. 第一章 简介 1.Spark执行的特点 Hadoop中包含计算框架MapReduce和分布式文 ...

  4. Spark入门实战系列--9.Spark图计算GraphX介绍及实例

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送–Spark入门实战系列>获取 1.GraphX介绍 1.1 GraphX应用背景 Spark GraphX是一个分布式图处理 ...

  5. Graphx图算法介绍

    本文介绍的Graphx的图上算法都是基于Pregel模型实现的. 用户图计算的场景: 基于度分布的中枢节点发现 基于最大连通图的社区发现(聚类) 基于三角形计数的关系衡量 基于随机游走的用户属性传播( ...

  6. GraphX介绍及实例

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

  7. GraphX入门介绍

    GraphX原型论文 GraphX是 Spark中用于图(e.g., Web-Graphs and Social Networks)和图并行计算(e.g., PageRank and Collabor ...

  8. Spark MLlib介绍

    Spark MLlib介绍 Spark之所以在机器学习方面具有得天独厚的优势,有以下几点原因: (1)机器学习算法一般都有很多个步骤迭代计算的过程,机器学习的计算需要在多次迭代后获得足够小的误差或者足 ...

  9. 知识图谱学习笔记-知识图谱介绍

    一.什么是知识图谱? 解释1:  知识图谱本质上是语义网络 (本体论是语义网落的重要因素) 解释2: 知识图谱也叫做多关系图,由多种类型的节点和多种类型的边组成 构建知识图谱系统中所涉及到的技术 数据 ...

最新文章

  1. SuperSocket .net服务框架
  2. 细说Redis分布式锁
  3. 关于Could not parse configuration: /hibernate.cfg.xml的问题
  4. Python的reshape(-1,1)
  5. python3之MongoDB
  6. Qt sqlit3的增、删、改、查、判断等基本操作接口
  7. linux coreutils升级,Coreutils
  8. mysql cluster常见问题访问_MySQL Cluster的常见问题
  9. 注册表修改服务器连接数量,如何通过Win10注册表更改时间服务器参数值?
  10. http权威指南(一)-Http概述
  11. c语言结构体定义常量,C语言结构体
  12. 数学建模写作指导20篇(一)-如何写好数学建模论文?
  13. 数据结构——图——拓扑排序算法
  14. ubuntu20.0.4系统中安装微信
  15. 【web攻防】CVE-2020-10487 tomcat 文件包含漏洞 docker 复现学习
  16. 画圆形图片的几种方式
  17. 【摘抄】领导力21法则-约翰·C·马克斯韦尔
  18. 未知USB设备(设备描述符请求失败)
  19. Easy Connect无法连接的情况,当前IE代理启用了自动配置脚本,不允许使用CS客户端登录
  20. 贪心算法---礼堂的安排

热门文章

  1. 情感分析项目基础知识总结二
  2. 关于DNS、HTTP劫持的一些事
  3. GPS经纬度数值格式化
  4. android漏洞 锁屏,Android 5.x 锁屏绕过 (CVE-2015-3860)
  5. 老司机出招: 程序员如何写简历和面试?
  6. 忍不住推荐的小程序海报裂变秘籍
  7. codeforces #737(div.2)
  8. Python触发win10通知栏通知提醒
  9. [网摘收藏]10款超实用的服务器监控工具和软件
  10. 啸叫抑制SDK原理简介和解决办法