为什么Spark比MapReduce快?

论坛 期权论坛 留学     
匿名的用户   2019-6-1 20:18   6405   5
MapReduce慢是因为 模型很呆板 ,频繁的Io操作
Spark快的话不仅是因为它是内存迭代计算吧? 具体什么是内存迭代计算?
分享到 :
0 人收藏

5 个回复

倒序浏览
2#
热心的回应  16级独孤 | 2019-6-1 20:18:37
Spark计算比MapReduce快的根本原因在于DAG计算模型。一般而言,DAG相比Hadoop的MapReduce在大多数情况下可以减少shuffle次数。

Spark的DAGScheduler相当于一个改进版的MapReduce,如果计算不涉及与其他节点进行数据交换,Spark可以在内存中一次性完成这些操作,也就是中间结果无须落盘,减少了磁盘IO的操作。

但是,如果计算过程中涉及数据交换,Spark也是会把shuffle的数据写磁盘的!!!

另外有同学提到,Spark是基于内存的计算,所以快,这也不是主要原因,要对数据做计算,必然得加载到内存,Hadoop也是如此,只不过Spark支持将需要反复用到的数据给Cache到内存中,减少数据加载耗时,所以Spark跑机器学习算法比较在行(需要对数据进行反复迭代)。Spark基于磁盘的计算依然也是比Hadoop快。

刚刚提到了Spark的DAGScheduler是个改进版的MapReduce,所以Spark天生适合做批处理的任务。而不是某些同学说的:Hadoop更适合做批处理,Spark更适合做需要反复迭代的计算。

Hadoop的MapReduce相比Spark真是没啥优势了。但是他的HDFS还是业界的大数据存储标准。
3#
热心的回应  16级独孤 | 2019-6-1 20:18:38
这俩根本没啥可比的,能够单MR做完的任务,Spark未必比MR快。至于迭代不迭代的并不是关键,其实你在Mapper里对数据做N个操作基本等价于N个窄依赖RDD的连接。
所以说真要比,也是多个MR组成的复杂Job来和Spark比。
MR由于其计算粒度的设计问题,在进行需要多次MR组合的计算时,每次MR除了Shuffle的磁盘开销外,Reduce之后也会写到磁盘。
而Spark的DAG实质上就是把计算和计算之间的编排变得更为细致紧密,使得很多MR任务中需要落盘的非Shuffle操作得以在内存中直接参与后续的运算,并且由于算子粒度和算子之间的逻辑关系使得其易于由框架自动地优化(换言之编排得好的MR其实也可以做到)。
另外在进行复杂计算任务的时候,Spark的错误恢复机制在很多场景会比MR的错误恢复机制的代价低,这也是性能提升的一个点。
4#
热心的回应  16级独孤 | 2019-6-1 20:18:39
Spark之所以outperform Hadoop的关键有二:DAG scheduler和intermediate data in memory。Hadoop用的是AG而不是DAG。一个DAG可以包含多个AG。DAG除了可以提升scheduler效率之外,它同时是Spark Fault tolerance机制-Lineage 追溯的基础。
5#
热心的回应  16级独孤 | 2019-6-1 20:18:40
以下特指Hadoop的Map Reduce的实现。
Map Reduce相对于Spark“慢”的根本原因是,每次中间结果都需要写到HDFS上面去,读的时候也需要从HDFS上读。而Spark“快“的原因是,它默认把结果写到内存(或者spill到SSD)上面去。
而内存(SSD)vs HDFS,一眼就能看出哪个更加快了。Spark官网那个100倍提高的就是用大容量内存+SSD版本的Spark去比较依赖于HDFS的Map-Reduce,非要说的话,有点小作弊的感觉,不过这确实是Spark的优势,可以非常好的利用高速的内存资源。
除去官方的性能比较,也有人做了一些特定case的性能比较,比如
The Truth About MapReduce Performance on SSDs - Cloudera Engineering Blog 给出了替换成SSD后的Map-Reduce的性能,大概提升一倍。
http://research.ijcaonline.org/volume113/number1/pxc3900531.pdf 给出了Spark和Map-Reduce在kmeans方面的比较,可以看到大概也是Spark比Map-Reduce提升的一倍的性能。
可以看到,替换成SSD以后,Map-Reduce的性能不一定会比Spark差非常多。
另外,Spark不是作为Map-Reduce的替代者而出现的。Map-Reduce相对于Spark而言,成本方面有着天然的优势。
楼主可以参考这篇文章 别再比较Hadoop和Spark了,那不是设计人员的初衷
PS:Spark现在还有专门的一个公司在做维护和优化,而Hadoop的Map-Reduce还是依赖于社区。不过硅谷里面60%的公司还是使用Map-Reduce,不过都是自己的实现居多。
6#
热心的回应  16级独孤 | 2019-6-1 20:18:41
Hadoop每次计算的结果都要保存到hdfs,然后每次计算都需要从hdfs上读书数据,磁盘上的I/O开销比较大。
spark一次读取数据缓存在内存中,内存的数据读取比磁盘数据读取快很多。还有一点就是spark的RDD数据结构,RDD在每次transformation后并不立即执行,而且action后才执行,有进一步减少了I/O操作。
所以spark比Hadoop运行要快,尤其是对于需要迭代的程序。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:32080
帖子:6440
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP