Spark is no rocket science!——博主算法
了解分布式计算的朋友,必定知道DAG这样一个概念。其实我接触DAG也是在学习MapReduce时了解到的。(具体可查阅《大数据日知录:架构与算法》这本书。推荐阅读。)编程
DAG,有向无环图。能够脑补一下DAG是个什么东西:有向、无环、图,如是而已,意思实在是再明白不过了。若是把DAG讲的复杂一点,还会涉及到DAG计算系统的三层结构等较深刻的设计与实现细节。网络
还有一个概念你们也应该有所了解:批处理计算系统。批处理,批量处理。批量,有数据量巨大的意思。批处理计算系统,就是要在巨大的数据量上作计算。架构
Spark就是一个DAG的批处理计算系统。MapReduce算一个DAG的批处理计算框架。框架
有向无环图的计算过程,相邻的两个节点之间如何传输数据?在MapReduce框架中,使用的是先将计算结果保存到磁盘,而后经过网络传输到下一节点。把计算结果保存到磁盘有一个问题,那就是磁盘的读写速度,以固态硬盘为例,大约为500M/s,这个速度已经很快了;而DDR3内存的读写速度大体在8G/s左右。这差距在一个数量级。节点之间网络传输的速度能够提升到千兆甚至万兆,在硬件支持的情形下,大体也有1G/s的传输速度。能够说,磁盘的读写是最耗时的。机器学习
减小磁盘读写的比重是提升计算速率的一个重要方面。因此Berkeley实验室提出了RDD这样一个概念。一段文字:分布式
RDD具有像MapReduce等数据流模型的容错特性,而且容许开发人员在大型集群上执行基于内存的计算。现有的数据流系统对两种应用的处理并不高效:一是迭代式算法,这在图应用和机器学习领域很常见;二是交互式数据挖掘工具。这两种状况下,将数据保存在内存中可以极大地提升性能。为了有效地实现容错,RDD提供了一种高度受限的共享内存,即RDD是只读的,而且只能经过其余RDD上的批量操做来建立。尽管如此,RDD仍然足以表示不少类型的计算,包括MapReduce和专用的迭代编程模型(如Pregel)等。咱们实现的RDD在迭代计算方面比Hadoop快20多倍,同时还能够在5-7秒内交互式地查询1TB数据集。——Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing译文工具
除了读写速率的提升引发的计算速率的提高,另一方面,在MapReduce计算框架下,每一个job只能有单一一个Reduce,每一个job启动开销较大的问题也在更通用的DAG模型下获得了解决。为何?DAG模型是Map/Reduce任务的抽象化。在Spark这个DAG批处理计算系统里,有更多的Transformation和action能够选择,也包括了Map和Reduce。oop