spark为什么比hadoop快
Posted canaryW
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spark为什么比hadoop快相关的知识,希望对你有一定的参考价值。
网上一堆人根本对计算框架一知半解就出来糊弄人,常见解答有:
spark是基于内存计算,所以快。这跟废话似的,mr计算的时候不也是基于内存?
mr shuffle落盘。这也是胡扯, spark shuffle不落盘?
实际上,如果一个job只有一个map task和reduce task,那么spark并不会比mr快很多。spark快的真正原因是,当一个job具有多个stage时, 我们将这个job表示为 [ m a p 1 , r e d u c e 1 , m a p 2 , r e d u c e 2 . . . r e d u c e n − 1 , m a p n . . . ] [map_1, reduce_1, map_2, reduce_2...reduce_n-1, map_n...] [map1,reduce1,map2,reduce2...reducen−1,mapn...],那么mr会在每一个 r e d u c e n − 1 reduce_n-1 reducen−1和 m a p n map_n mapn之间进行一次落盘和一次文件读取,而spark因为可以将窄依赖的算子合并为一个stage(得益于spark的DAG计算机制),所以在 r e d u c e n − 1 reduce_n-1 reducen−1和 m a p n map_n mapn之间是不涉及落盘的,直接基于内存计算。
举个小例子加深理解,假设一个job涉及两个stage,那么mr和spark的运行过程是这样的:
可以看到, spark相较于MR而言,少了一次hdfs文件落盘和一次文件读取,如果一个job有
n
n
n个stage,比方说是机器学习算法,那么spark可以节省
n
−
1
n-1
n−1次文件落盘、读取。因此速度会快很多。
以上是关于spark为什么比hadoop快的主要内容,如果未能解决你的问题,请参考以下文章