|NO.Z.00069|——————————|BigDataEnd|——|Hadoop&Spark.V01|——|Spark.v01|Spark GraphX|概述|
一、Spark GraphX
### --- Spark GraphX概述
~~~ GraphX 是 Spark 一个组件,专门用来表示图以及进行图的并行计算。
~~~ GraphX 通过重新定义了图的抽象概念来拓展了 RDD: 定向多图,其属性附加到每个顶点和边。
~~~ 为了支持图计算,
~~~ GraphX 公开了一系列基本运算符(比如:mapVertices、mapEdges、subgraph)
~~~ 以及优化后的 Pregel API 变种。此外,还包含越来越多的图算法和构建器,以简化图形分析任务。
~~~ GraphX在图顶点信息和边信息存储上做了优化,
~~~ 使得图计算框架性能相对于原生RDD实现得以较大提升,
~~~ 接近或到达 GraphLab 等专业图计算平台的性能。
~~~ GraphX最大的贡献是,在Spark之上提供一栈式数据解决方案,
~~~ 可以方便且高效地完成图计算的一整套流水作业。
二、Spark GraphX架构

三、图形相关数据
### --- 图的相关术语
~~~ 图是一种较线性表和树更为复杂的数据结构,图表达的是多对多的关系。
~~~ 如下图所示,G1 是一个简单的图,其中 V1、V2、V3、V4 被称作顶点(Vertex),
~~~ 任意两个顶点之间的通路被称为边(Edge),
~~~ 它可以由(V1、V2)有序对来表示,这时称 G1 为有向图,意味着边是有方向的,
~~~ 若以无序对来表示图中一条边,则该图为无向图,如 G2。

### --- 图形相关术语说明
~~~ 在 G1 中,与顶点相关联的边的数量被称为顶点的度(Degree)。
~~~ 其中,以顶点为起点的边的数量被称为该顶点的出度(OutDegree),
~~~ 以顶点为终点的边的数量被称为该顶点的入度(InDegree)。
~~~ 以 G1 中的 V1 举例,V1 的度为 3,其中出度为 2,入度为 1。
~~~ 在无向图 G2 中,如果任意两个顶点之间是连通的,则称 G2 为连通图(Connected Graph)。
~~~ 在有向图中 G1 中,如果任意两个顶点 Vm、Vn 且 m ≠ n,
~~~ 从 Vm 到 Vn 以及从 Vn 到 Vm 之间都存在通路,
~~~ 则称 G1 为强连通图(Strongly Connected Graph)。
~~~ 任意两个顶点之间若存在通路,则称为路径(Path),用一个顶点序列表示,
~~~ 若第一个顶点和最后一个顶点相同,则称为回路或者环(Cycle)。
四、图数据库与图计算
### --- Neo4j
~~~ Neo4j 是一个比较老牌的开源图数据库,目前在业界的使用也较为广泛,
~~~ 它提供了一种简单易学的查询语言 Cypher。
~~~ Neo4j 支持交互式查询,查询效率很高。
~~~ 能够迅速从整网中找出符合特定模式的子网,供随后分析之用,适用于OLTP 场景。
~~~ Neo4j 是图数据库,偏向于存储和查询。能存储关联关系比较复杂,实体之间的连接丰富。
~~~ 比如社交网络、知识图谱、金融风控等领域的数据。
~~~ 擅长从某个点或某些点出发,根据特定条件在复杂的关联关系中找到目标点或边。
~~~ 如在社交网络中找到某个点三步以内能认识的人,这些人可以认为是潜在朋友。
~~~ 数据量限定在一定范围内,能短时完成的查询就是所谓的OLTP操作。
~~~ Neo4j 查询与插入速度较快,没有分布式版本,
~~~ 容量有限,而且一旦图变得非常大,如数十亿顶点,数百亿边,查询速度将变得缓慢。
~~~ Neo4j 分为社区版和企业版,企业版有一些高级功能,需要授权,价格昂贵。
### --- neo4说明
~~~ 比较复杂的分析和算法,如基于图的聚类,PageRank 算法等,
~~~ 这类计算任务对于图数据库来说就很难胜任了,主要由一些图挖掘技术来负责。
~~~ Pregel 是 Google 于 2010 年在 SIGMOD
~~~ 会议上发表的《Pregel: A System forLarge-Scale Graph Processing》
~~~ 论文中提到的海量并行图挖掘的抽象框架,Pregel与 Dremel 一样,是 Google 新三驾马车之一,
~~~ 它基于 BSP 模型(BulkSynchronous Parallel,整体同步并行计算模型),
~~~ 将计算分为若干个超步(superstep),在超步内,通过消息来传播顶点之间的状态。
~~~ Pregel 可以看成是同步计算,即等所有顶点完成处理后再进行下一轮的超步,
~~~ Spark 基于 Pregel 论文实现的海量并行图挖掘框架 GraphX。

五、图计算模式
### --- 图计算模式
~~~ 目前基于图的并行计算框架已经有很多,
~~~ 比如来自Google的Pregel、来自Apache开源的图计算框架Giraph / HAMA以及最为著名的GraphLab,
~~~ 其中Pregel、HAMA和Giraph都是非常类似的,都是基于BSP模式。
~~~ BSP即整体同步并行,它将计算分成一系列超步的迭代。
~~~ 从纵向上看,它是一个串行模式,
~~~ 而从横向上看,它是一个并行的模式,每两个超步之间设置一个栅栏(barrier),
~~~ 即整体同步点,确定所有并行的计算都完成后再启动下一轮超步。

### --- 每一个超步包含三部分内容:
~~~ # 计算compute:
~~~ 每一个processor利用上一个超步传过来的消息和本地的数据进行本地计算
~~~ # 消息传递:
~~~ 每一个processor计算完毕后,将消息传递个与之关联的其它processors
~~~ # 整体同步点:
~~~ 用于整体同步,确定所有的计算和消息传递都进行完毕后,进入下一个超步
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
bdv017-spark.v02
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)