当前课程知识点:大数据系统基础 > 5.内存计算 > 授课视频 > 5.19Spark的局限性
Spark虽然想成为大数据
分析的一个基础的变成模型
而且也确实取得了很好的进展
但是它也并不是没有局限性的
我们通过这个例子来看一下
这样的一个局限性
我们知道图算法里面的BFS
广度优先搜索
是一个非常基础的算法
有很多的算法
比如说最短路径 数据发现等等
都是基于这样的图遍历的算法
那么我们来看一下图遍历算法
在Spark中会是怎么样实现的
那么我们这里面有一个图
它有这样的一些节点和连接
我们会从一个起点开始
遍历那么每一个节点
被访问过以后我们都会在这个
节点的这个RDD里面把它标识出
它是已经被访问过的
那么我们第一开始
从这个黄色的节点开始
所以它对应了这样的Spark的RDD
也标识成了黄色
那么下一步根据广度优先搜索
我们会去访问
这个黄色节点的两个邻居
也就是这两个绿色的节点
那么这两个绿色的节点
也会被标识成
它们已经被访问过
那么依此类推我们再去访问
这两个绿色节点它们相邻的
节点中还没有被访问过的
那么就是这三个蓝色的节点
再下一步我们访问到了这个
紫色的节点
那么最终我们就完成了这个
图遍历的工作
那么我们可以看到
实际上这个图的节点
我们最后的这个状态
和开始的这个状态
中间有这么多的状态
在这么多的状态里面
我们看到什么
每次我们都需要去标识
其中被访问过的节点
但是由于Spark它这个RDD的
这个限制使得我们不能够
在这个里面去标识
而只能把整个数据复制一份
然后只标识其中的一个节点
或者是很少数的一些节点
那么我们可以看出这种操作
都是内存拷贝操作
甚至有时候是网络操作
而且这样的数据积累多了
甚至会引起磁盘的I/O操作
也就是说采用Spark
由于它的为了容错
使得它用了RDD这样的一个抽象
使得它的数据集
是immutable只读的
因此我们在做BFS
这类算法的时候
我们会发现它会非常的低效
它会进行大量无用的
这个内存拷贝
并且会多占很多的内存
使得性能和内存容量上面
实际上都是具有相当负面的影响
所以我们总结这样的一个局限性
也就是说Spark
它每次都去做细粒度的数据更新
由于Spark它的这个
基于粗粒度的RDD
只读的这样的数据模型
需要RDD的变换
才能够去修改这个
节点是否访问这样的信息
所以产生了大量的数据复制
导致这个效率不高
所以这也是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