建设网站页面,网站建设维护协议,查询seo,网站宣传夸大处罚网上一堆人根本对计算框架一知半解就出来糊弄人#xff0c;常见解答有#xff1a; spark是基于内存计算#xff0c;所以快。这跟废话似的#xff0c;mr计算的时候不也是基于内存#xff1f; mr shuffle落盘。这也是胡扯#xff0c; spark shuffle不落盘#xff1f; 实际… 网上一堆人根本对计算框架一知半解就出来糊弄人常见解答有 spark是基于内存计算所以快。这跟废话似的mr计算的时候不也是基于内存 mr shuffle落盘。这也是胡扯 spark shuffle不落盘 实际上如果一个job只有一个map task和reduce task那么spark并不会比mr快很多。spark快的真正原因是当一个job具有多个stage时 我们将这个job表示为[map1,reduce1,map2,reduce2...reducen−1,mapn][map_1, reduce_1, map_2, reduce_2...reduce_{n-1}, map_n][map1,reduce1,map2,reduce2...reducen−1,mapn]那么mr会在每一个reducen−1reduce_{n-1}reducen−1和mapnmap_nmapn之间进行一次落盘和一次文件读取而spark因为可以将窄依赖的算子合并为一个stage所以在reducen−1reduce_{n-1}reducen−1和mapnmap_nmapn之间是不涉及落盘的直接基于内存计算。
举个小例子加深理解假设一个job涉及两个stage那么mr和spark的运行过程是这样的 可以看到 spark相较于MR而言少了一次hdfs文件落盘和一次文件读取如果一个job有nnn个stage比方说是机器学习算法那么spark可以节省n−1n-1n−1次文件落盘、读取。因此速度会快很多。