当前课程知识点:大数据系统基础 > 5.内存计算 > 授课视频 > 5.16复杂的DAG示例
我们刚才谈到到这个例子
相对来说比较简单
也就是它那几个操作
实际上是一个线性变换的
也就是说从一个RDD
然后转换成一个RDD
再转换成另一个RDD就完了
那么实际上
在我们用Spark写的这个
程序里面
我们最后做成的这个
operator graph可以相当的复杂
那么就是我们这一页
实际上就显示了这样的
一个相对来说比较复杂的
这样的一个部分
那么我们可以看
它可以分为这样的
比如说我们在这个程序里面
首先有一些数据的都取
产生一些RDD A
那么A可以通过groupBy
生成这个RDD B
那么同时我们还可以有
另外的一些数据RDD C生成
然后它通过Map
转移到这个RDD D
然后D又通过filter
产生RDD E
然后B和E之间又去做了
这个join的操作
那么生成了RDD F
那么大家可以看一下
这样的一个图
它相当的复杂里面有各种各样的
opert的操作
但是我们在用Spark
写这个程序的时候
我们最后转成了
这样的一个图有一个要求
就是这个叫做这个DAG
DAG的意思叫做
D是directed有向的
A是ackeltey无环的
G是graph图
也就是说我们这个图
不管有多复杂中间有多少步
我们都希望它是一个
有向无环的这样的一个图
如果产生了环我们后面的调度
就有很多的事情
做起来会非常的困难
所以这儿实际上
就是给大家一个直观的
有向无环图的这样一个展示
也就是一个Spark的程序
我们在Spark
它在真正去执行的时候
它会把RDD之间
建立起这样的有向无环图的
这样的一个关系
并且它的调度执行
也是基于这样的有向无环图的
那么我们再介绍一个
Spark里面的性能优化技术
就是数据划分技术
这是一个pagerank的一个算法
那么它里面有两个
首先我们有两个RDD
一个叫links一个叫ranks
links它的内容就是url
和它的neighbors
url我们就可以认为是个网页
enighbors就是它相邻的网页
就是和它之间有相互连接的
ranks这个url也是个网页
rank是一个值是一个数字
也就是说你的pagerank
到底是多少
那么下面这个循环
实际上就是一个迭代的
在这个links和ranks这两个
通过它们这个集合不断地变换
来实现pagerank算法的
这样的一个过程
pagerank算法大家应该
在学习Map Reduce的时候
也相对来说比较熟悉
我在这儿就不做过多的介绍
我们这里面主要来介绍
在数据划分方面
Spark如何优化它们的数据划分
那么刚才的这样一个程序
实际上我们如果
用operator graph来表示
我们可以把它表示成
links还有ranks
但是因为有迭代
所以我们用这个一些版本
比如0 1 2来表示这个
中间的这样一些版本的不同
那么首先这个links和ranks
它发生了一个join的操作
生成了一个中间的这个结果
然后又通过reduce
得到了一个新的rank
那么新的rank又和links
产生了这个join
又产生了这个一个中间的结果
再进行reduce
那么从这个图上我们可以看到
rank这样的一个RDD
它会和links
它要做多次的join
join很多次
我们知道ranks和links
这两个东西它们都是
分布在不同机器内存里面的
它是RDD
它可能分布在不同的
机器的内存里面
那也就是说如果我们要
join比如说这个url A
它有这个某个邻居
A还有另外一些其它邻居
它放在一台机器上
links它放在某一台机器上
而ranks这个A0.02
B0.03这个东西
放在另外一台机器上
当我们做这个join操作的时候
我们就需要让这两台机器之间
有很多的通信
所以这个的优化
数据划分的优化
实际上就是这样的一个思路
也就是说
我们要让有相同url的
links和ranks这两个数据集
把它们尽量的分到一起
在一台机器上
这样他们join的时候
就可以避免网络通信
那么在这个Spark里面
还提供了这样的一个接口函数
叫partitionBy那么我们可以
用来自定义一个数据
来划分函数
因为需要系统知道说
是根据url来划分
还是通过什么
其他它的方式来划分
那么如果我们有partitionBy
这样的函数做自定义
我们就可以得到很好的
这样的结果
我们来看实际的这个例子
在这个pagerank的
这个例子里面
如果我们用Hadoop来跑的话
它的这个时间要花171秒
如果我们不去做
这个优化的划分
而只是基础的这个Spark的话
我们大概需要这个72秒的时间
但是如果我们是Spark
再加上我们刚才讲到的
这种优化的划分方式
就是把link和这个rank
这样两个RDD
我们想办法把相同url的
这个把它们放到同样的
一台机器上link rank
那么我们可以得到很好的效果
就是它最终的这个性能
可以达到23
可以看到Basic基本的Spark
这个性能又有大幅度的提升
时间大幅度的下降
-授课视频
--什么是大数据
--大数据典型应用
--大数据的特点
--大数据技术体系
--大数据生态系统
--大数据技术挑战
--课程内容
-1. 绪论--Quiz 1
-授课视频
--2.2并行化理念
--2.9计算虚拟化
-2.云计算--Quiz 2
-授课视频
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
-3.文件存储--Quiz3
-授课视频
--4.13类似框架
--4.14章节总结
-4. 处理框架--Quiz4
-授课视频
-5.内存计算--Quiz5
-授课视频
--数据副本及一致性
--节点本地数据存储
-6. NoSQL--Quiz6
-授课视屏
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
-7. 流计算--Quiz7