1. 整体架构
  GraphX 的整体架构(如图 1所示)可以分为三部分。

  

                图 1  GraphX 架构

  存储和原语层: Graph 类是图计算的核心类。内部含有 VertexRDD、 EdgeRDD 和RDD[EdgeTriplet] 引用。 GraphImpl 是 Graph 类的子类,实现了图操作。
‰   接口层:在底层 RDD 的基础之上实现了 Pregel 模型, BSP 模式的计算接口。
‰   算法层:基于 Pregel 接口实现了常用的图算法。包括: PageRank、 SVDPlusPlus、TriangleCount、 ConnectedComponents、 StronglyConnectedConponents 等算法。
  2. 存储结构
  在正式的工业级的应用中,图的规模极大,上百万个节点是经常出现的。为了提高处理速度和数据量,希望能够将图以分布式的方式来存储、处理图数据。图的分布式存储大致有两种方式,边分割( Edge Cut)和点分割( Vertex Cut),如图 2所示。最早期的图计算的框架中,使用的是 Edge Cut(边分割)的存储方式。而 GraphX 的设计者考虑到真实世界中的大规模图大多是边多于点的图,所以采用点分割方式存储。点分割能够减少网络传输和存储开销。底层实现是将边放到各个节点存储,而在进行数据交换时将点在各个机器之间广播进行传输。对边进行分区和存储的算法主要基于 PartitionStrategy中封装的分区方法。这里面的几种分区方法分别是对不同应用情景的权衡,用户可以根据具体的需求进行分区方式的选择。用户可以在程序中指定边的分区方式。例如:
  val g = Graph(vertices, partitionBy(edges, PartitionStrategy.EdgePartition2D))
  

                              图 2   GraphX 存储模型

   一旦边已经在集群上分区和存储,大规模并行图计算的关键挑战就变成了如何将点的属性连接到边。 GraphX 的处理方式是集群上移动传播点的属性数据。由于不是每个分区都需要所有的点属性(因为每个分区只是一部分边), GraphX 内部维持一个路由表(routing table),这样当需要广播点到需要这个点的边的所在分区时就可以通过路由表映射,将需要的点属性传输到指定的边分区。

  点分割的好处是在边的存储上是没有冗余数据的,而且对于某个点与它的邻居的交互操作,只要满足交换律和结合律。例如,求顶点的邻接顶点权重的和,可以在不同的节点进行并行运算,最后把每个节点的运行结果进行汇总,网络开销较小。代价是每个顶点属性可能要冗余存储多份,更新点数据时要有数据同步开销。
  3. 使用技巧
  采样观察可以通过不同的采样比例,先从小数据量进行计算、观察效果、调整参数,再逐步增加数据量进行大规模的运算。可以通过 RDD 的 sample 方法进行采样。同
时通过 Web UI 观察集群的资源消耗。
  1)内存释放:保留旧图对象的引用,但是尽快释放不使用的图的顶点属性,节省空间占用。通过 unPersistVertices 方法进行顶点释放。
  2) GC 调优,请读者参考性能调优章节介绍。
  3)调试:在各个时间点可以通过 graph.vertices.count() 进行调试,观测图现有状态。进行问题诊断和调优。
  GraphX 通过提供简洁的 API 以及优化的图数据管理,简化了用户开发分布式图算法的复杂度。在大数据分析中更多的应用场景是进行机器学习。

  Spark 之上的 MLlib 进行复杂的机器学习。详细见 http://www.cnblogs.com/zlslch/p/5726346.html

Apache Spark GraphX的体系结构的更多相关文章

  1. Apache Spark GraphX

    GraphX基于BSP模型,在Spark之上封装类似Pregel的接口,进行大规模同步全局的图计算,尤其是当用户进行多轮迭代时,基于Spark内存计算的优势尤为明显.

  2. Apache Spark GraphX的使用简介

    类似 Spark 在 RDD 上提供了一组基本操作符(如 map, f ilter, reduce), GraphX 同样也有针对 Graph 的基本操作符,用户可以在这些操作符传入自定义函数和通过修 ...

  3. Apache Spark GraphX的简介

    简单地说,GraphX是大规模图计算框架. GraphX 是 Spark 中的一个重要子项目,它利用 Spark 作为计算引擎,实现了大规模图计算的功能,并提供了类似 Pregel 的编程接口. Gr ...

  4. Apache Spark GraphX的特点

    GraphX 的特点是离线计算.批量处理,基于同步的 BSP 模型(Bulk Synchronous Parallel Computing Model,整体同步并行计算模型),这样的优势在于可以提升数 ...

  5. Apache Spark 2.2.0 中文文档 - GraphX Programming Guide | ApacheCN

    GraphX Programming Guide 概述 入门 属性 Graph 示例属性 Graph Graph 运算符 运算符的汇总表 Property 运算符 Structural 运算符 Joi ...

  6. Spark Graphx编程指南

    问题导读1.GraphX提供了几种方式从RDD或者磁盘上的顶点和边集合构造图?2.PageRank算法在图中发挥什么作用?3.三角形计数算法的作用是什么?Spark中文手册-编程指南Spark之一个快 ...

  7. Spark GraphX图处理编程实例

    所构建的图如下: Scala程序代码如下: import org.apache.spark._ import org.apache.spark.graphx._ // To make some of ...

  8. 大数据技术之_19_Spark学习_05_Spark GraphX 应用解析 + Spark GraphX 概述、解析 + 计算模式 + Pregel API + 图算法参考代码 + PageRank 实例

    第1章 Spark GraphX 概述1.1 什么是 Spark GraphX1.2 弹性分布式属性图1.3 运行图计算程序第2章 Spark GraphX 解析2.1 存储模式2.1.1 图存储模式 ...

  9. 十、spark graphx的scala示例

    简介 spark graphx官网:http://spark.apache.org/docs/latest/graphx-programming-guide.html#overview spark g ...

随机推荐

  1. PHP程序员的40点陋习,我几乎全部中枪

    1.不写注释 2.不使用可以提高生产效率的IDE工具 3.不使用版本控制 4.不按照编程规范写代码 5.不使用统一的方法 6.编码前不去思考和计划 7.在执行sql前不执行编码和安全检测 8.不使用测 ...

  2. Ubuntu下MySQL数据库安装与配置与卸载

    安装: sudo apt-get install mysql-server mysql-client 一旦安装完成,MySQL 服务器应该自动启动.您可以在终端提示符后运行以下命令来检查 MySQL ...

  3. js 中 typeof 的使用

    js中的变量是松散类型(即弱类型)的,可以用来保存任何类型的数据. typeof 可以用来检测给定变量的数据类型,可能的返回值: 'undefined' --- 这个值未定义 'boolean' -- ...

  4. hdu 4143 A Simple Problem (变形)

    题目 题意:给n,求x; 直接枚举肯定超时, 把给的式子变形, (y+x)(y-x) = n; 令y-x = b, y+x = a; 枚举b, b 的范围肯定是sqrt(n),  y = (a+b)/ ...

  5. 严重: Catalina.stop: java.net.ConnectException: Connection refused: connect

    原因: 1.连接被拒绝,关闭的时候报错.是不是已经关闭了,你又关闭,他当然找不到了. 2.连接被拒绝有可能是服务端连接数到达最高了 3.服务器拒绝连接,ip地址是否写对,端口号正确与否,网络是否通畅, ...

  6. UVA 11396 Claw Decomposition(二分图)

    以“爪”形为单元,问所给出的无向图中能否被完全分割成一个个单元. 分析图的性质,由于已知每个点的度是3,所以“爪”之间是相互交错的,即把一个“爪”分为中心点和边缘点,中心点被完全占据,而边缘点被三个“ ...

  7. Android进度加载的Loading效果

    网上看到的一个开源项目的loading效果,效果很赞,记录一下: 开源项目地址如下:https://github.com/RomainPiel/Titanic

  8. (2)Spring集成Quartz定时任务框架介绍和Cron表达式详解

    在JavaEE系统中,我们会经常用到定时任务,比如每天凌晨生成前天报表,每一小时生成汇总数据等等.我们可以使用java.util.Timer结合java.util.TimerTask来完成这项工作,但 ...

  9. java classpath、path用法

    java环境配置classpath和path变量的作用: path:指定cmd中命令执行文件所在的路径.比如javac.java两个可执行文件在jdk的bin目录下,如果path值含有这个bin目录, ...

  10. 如何获取数据块结构信息dump

    有个pub_department的表,索引为PK_PUB_DEPARTMENT. 1.找到object_id select   object_id from dba_objects s  where  ...