没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
第一章 Graphx
本章旨在由宏观到微观的介绍图计算、,梳理 学习时的关键知识
结构。
一.1 相关系统资料(2016.02.01 统计)
、源代码,没有单独的源代码,集成在 源码的 包中,目前是 版本。
、《》,共 页,直接就 介绍,阅读门槛低。
、《 》第七章对 的应用有所涉及,阅读门槛高。
、《Spark+GraphX 大规模图计算和图挖掘(V3.0)》,质量很低主要是对源代码
的复制粘贴。
一.2 分布式图计算与 GraphX
GraphX 是 Spark 的分布式图计算引擎。
一.2.1 分布式图计算框架的目的
将对于巨型图的各种操作包装为简单的接口,让分布式存储、并行计算等复杂问题对
上层透明,从而使复杂网络和图算法的工程师,更加聚焦在图相关的模型设计和使用上,
而不用关心底层的分布式细节。为了实现该目的,需要解决两个通用问题:图存储模式和
图计算模式。
一.2.2 Spark 图计算发展历程
早在 !" 版本, 就带了一个小型的 # 模块,提供了类似 的功能。当然,
这个版本还非常原始,性能和功能都比较弱,属于实验型产品。到 ! 版本时,鉴于业界
对分布式图计算的需求日益见涨, 开始独立一个分支 $#,作为独立的图
计算模块,借鉴 %&,开始设计开发 。在 !' 版本中,这个模块被正式集成到
主干,虽然是 版本,但已可以试用,小面包圈 # 告别舞台。! 版本, 正
式投入生产使用。现在 已经更新到 版本。
值得注意的是, 目前依然处于快速发展中,从 ! 的分支到 !' 和 !,每个版
本代码都有不少的改进和重构。根据观察,在没有改任何代码逻辑和运行环境,只是升级
版 本 、 切 换 接 口 和 重 新 编 译 的 情 况 下 , 每 个 版 本 有 !()!( 的 性 能 提 升 。 虽 然 和
%& 的性能还有一定差距,但凭借 整体上的一体化流水线处理,社区热烈的活
跃度及快速改进速度, 具有强大的竞争力。
一.2.3 GraphX 及同类计算框架
一.2.3.1 GraphX
在设计 时,点分割和 都已成熟,并在设计和编码中针对它们进行了优化,
在功能和性能之间寻找最佳的平衡点。如同 本身,每个子模块都有一个核心抽象。
的核心抽象是 *+&,,一种点和边都带属性的有向多重
图。它扩展了 *++ 的抽象,有 -& 和 两种视图,而只需要一份物理存储。
两种视图都有自己独有的操作符,从而获得了灵活操作和执行效率。
如同 , 的代码非常简洁。 的核心代码只有 千多行,而在此之上
实现的 模型,只要短短的 ! 多行。 的代码结构其中大部分的实现,都是围
绕 的优化进行的。这在某种程度上说明了点分割的存储和相应的计算优化,的确
是图计算框架的重点和难点。
可以看到, 设计这个模型的用意。它综合了 和 两者的优点,即接
口相对简单,又保证性能,可以应对点分割的图存储模式,胜任符合幂律分布的自然图的
大型计算。
也提供了一套图算法工具包,方便用户对图进行分析。
一.2.3.2 Giraph
是 基金会开源项目之一,被定义为迭代式图处理系统。他架构在
之上,提供了图处理接口,专门处理大数据的图问题。
计算的输入是由点和直连的边组成的图。例如,点可以表示人,边可以表示朋
友请求。每个顶点保存一个值,每个边也保存一个值。输入不仅取决于图的拓扑逻辑,也
包括定点和边的初始值。
应用还需要考虑 . 的兼容性。
Giraph 的存在很有必要,现在的大数据的图问题又很多,例如表达人与人之间的关系
的有社交网络,搜索引擎需要经常计算网页与网页之间的关系,而 map-reduce 接口不太适
合实现图算法。构成图的基本元素有哪些?
构成图的基本元素有顶点和边,边可以有权重和方向。Giraph 如何表示图?
Giraph 里同样也有顶点和边,Giraph 中的顶点也是有值的,可以用于保存计算的中间
结果。在 Giraph 图处理模型中,顶点是一切的中心,运算也是围绕着顶点进行的,顶点可
以收发消息,这里的消息跟通讯中的消息不同,这里的消息指的是从上一个计算步骤接收
信息,在顶点进行计算,并把计算好的结果通过消息发给下一个顶点。而顶点计算的输入
数据就是输入的消息、顶点的当前的值。一个顶点可以有多条输入的消息,也可以有多条
输出的消息,把这些消息发给与当前顶点相连的边的另一端的顶点。Giraph 的应用:用于
分析用户或者内容之间的联系或重要性。
一.2.3.3 GraphLab
%& 是面向机器学习的流处理并行框架。%& 将数据抽象成 结构,将
算法的执行过程抽象成 、、 三个步骤。其并行的核心思想是对顶点的切
分。
%& 由 /01 的 实验室提出,它是一个异步分布式共享存储模型。在
%& 模型中,运行在顶点上的用户自定义程序可以对图中的顶点和边数据进行共享访
问。程序可以访问当前作用的顶点、顶点相连接的边(包括入边和出边),以及相邻的顶
点。
%& 在进行图运算时,顶点是其最小的并行粒度和通信粒度,某个顶点可能被部
署到多台机器上,其中一台机器上的为主顶点( 2),其余机器上的为镜像顶点
(2),与主顶点的数据保持同步。对边而言,%& 将其唯一部署在某一台机器
上,当图比较密,即边的数目较大时,可以减少边数据的存储量。如图 所示,包含四个
顶点的图使用点切分的方式被分为三个分区,五条边被分配给三个分区,和这些边相连接
的点也被镜像分配至相应的分区,顶点为实线圆,镜像为虚线圆。例如,顶点 / 被 和
中的边连接,则顶点 / 被镜像分配给 和 。
图 33图的顶点切分
%& 将算法的执行过程抽象成收集()、执行()和分发()
三个步骤。
收集阶段:工作顶点的边,可以是出边或入边,也可以同时包含入边和出边,从邻接
顶点和自身收集数据,并对收集的数据使用用户定义的函数进行运算。这一阶段对顶点和
边都是只读的。
执行阶段:镜像顶点将收集阶段的计算结果发送给主顶点,主顶点对从各个镜像顶点
收集的数据进行聚集运算,并利用聚集结果和上一步的顶点数据,按照用户定义的更新函
数进行计算,更新主顶点的数据,并同步给镜像顶点。在执行阶段中,工作顶点可修改,
边不可修改。
3分发阶段:工作顶点更新完成之后,更新边上的数据,通知对其有依赖的邻接边更新
状态。在分发阶段,工作顶点只读,边上数据可写。
在执行过程中,%& 通过控制三个阶段的读写权限来达到互斥的目的,并行计算
的同步通过主顶点和镜像顶点来实现。
一.3 GraphX 前期准备
一.3.1 了解 Map Reduce 概念
2 和 , 两个词没有什么意义, 的分布式计算框架分为两个阶段,第一个
是 2 阶段,第二个是 , 阶段。2 阶段负责对输入文件进行切分处理,然后汇总再
分组给 , 进行处理,以达到高效的分布式计算效率。
一.3.2 了解 Scala 语法
很多函数操作和 是一样的。下面的 *++ 函数操作也是基于 的。
一.3.3 了解 RDD
*++ 是 中的抽象数据结构类型,任何数据在 中都被表示为 *++。从编程
的角度来看,*++ 可以简单看成是一个数组。和普通数组的区别是,*++ 中的数据是分
区存储的,这样不同分区的数据就可以分布在不同的机器上,同时可以被并行处理。因此
应用程序所做的无非是把需要处理的数据转换为 *++,然后对 *++ 进行一系列的变
换和操作从而得到结果。
一.3.3.1 创建 RDD
一.3.3.1.1 从普通数组创建 *++
*++ 可以从普通数组创建出来,也可以从文件系统或者 .+4 中的文件创建出来。
举例:从普通数组创建 *++,里面包含了 到 ' 这 ' 个数字,它们分别在 个分区中。
5678'9:
;*++<=>6/*++<>7?5;
一.3.3.1.1 从文件系统或者 .+4 中的文件创建 *++
举例:读取文件 *@+0@2 来创建 *++,文件中的每一行就是 *++ 中的一个元素
5&648A*@+0@2A:
&;*++<>60*++<>4?5;
虽然还有别的方式可以创建 *++,但在本文中我们主要使用上述两种方式来创建
*++ 以说明 *++ 的 =。
一.3.3.2 RDD 操作清单
一.3.3.3 Map
2 是对 *++ 中的每个元素都执行一个指定的函数来产生一个新的 *++。任何原
*++ 中的元素在新 *++ 中都有且只有一个元素与之对应。
举例:
scala> val a = sc.parallelize(1 to 9, 3) // 第二个 参数
3
表示 分区数
5&62865B:
5
!;<=>689999"99C99':
5&
;<=>689999!9999:
"
上述例子中把原 *++ 中每个元素都乘以 来产生一个新的 *++。
一.3.3.4 map、zip
D2<1;/->8D;-651:;*++<1>
D2D,2D*++,,
*++
D7<1;/->8;*++<1>:;*++<8-91:>
@2
678%8AA9A2A9A2A9AA9AA:9:
&628E:
&
678&:
!;<89=:>6889:9829:9829:989:989::
一.3.3.5 mapPartitions*
2 是 2 的一个变种。2 的输入函数是应用于 *++ 中每个元素,而
2
的输入函数是应用于每个分区, 也就是把每个分区中的内容作为整体来处理
的。
它的函数定义为:
D2<1;/->8D;=<->65=<1>9;#
6D:;*++<1>
D 即为输入函数,它处理每个分区里面的内容。每个分区中的内容将以 =<->传递
给输入函数 D,D 的输出结果是 =<1>。最终的 *++ 由所有分区经过输入函数处理后的
结果合并起来的。
举例:
5678'9:
5D2D,<->8;=<->:;=<8-9-:>6F
6%<8-9-:>8:
6 8G:F
,6H
;;689,:6,H
I
I
5282D,:
剩余55页未读,继续阅读
资源评论
BrotherDongDong
- 粉丝: 64
- 资源: 25
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 俄罗斯方块作为消遣小游戏,以此目的来锻炼小白
- AZ-900 -186q-.pdf
- html+css+js网页设计 美食 美食模版1个页面带js
- 高精度12bit逐次逼近型SAR ADC电路设计成品 一款包含了第四个月学习的全部经验的高精度sarADC,有效位数高达11.85bit,用来参加某比赛的 smic0.18工艺,全差分结构,3.3V
- 机械设计螺杆供料装置sw22全套技术资料100%好用.zip
- 上市公司-劳务外包数据(2012-2023年).xlsx
- 软件开发界面使用的图标
- 元胞自动机模拟纯金属 合金凝固matlab程序,程序自己编的,还可以结合fluent算出的温度场进行组织模拟 纯金属的380,包括形核和长大以及捕捉模块,适合新手用来了解元胞自动机模拟凝
- 半桥LLC谐振变器 PSIM仿真 电力电子变器 纯模拟电路实现功能 输入:380~400VDC 输出:19VDC,90W
- 广州大学编译原理题库,抄吧抄吧
- 基于optisystem的光通信系统仿真
- 引力场方程耦合常数的修改及宇宙学新视角
- 机械设计锂电池叠片机sw18可编辑全套技术资料100%好用.zip
- 磁流变阻尼器磁场仿真,2D,3D ansys maxwell 阻尼器各类磁场仿真,磁流变液BH曲线添加,磁场分析,磁力线分析,阻尼间隙分析,缸体材料分析,曲线对比
- 机械设计木材削木机sw17全套技术资料100%好用.zip
- labview视觉检测+引导定位螺丝枪,三个相机,一个相机做检测,两个相机做引导定位螺丝枪 同时采用模板匹配、抓边、找圆,内置模块封装好,内含封装好的九点标定和旋转中心
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功