三大原因分别如下:
第一个:MapReduce的计算模型只有简单的Map和Reduce,且Map阶段所产生的数据必须全部写到磁盘中而且这些数据会进行Sort和Combine操作然后才进入Reduce阶段,IO效率很低;而Spark在每个阶段中都会尽可能的使用内存大大提高了计算效率。
第二个:对于一个复杂计算来说,如果有很多阶段的话,MapReduce会启动多个应用而Spark则可以利用独有的DAG依赖关系只需要启动一个应用就可以完成所有计算,避免重复启动应用带来的性能损耗。
第三个:从编程角度看Spark根据数据计算的功能不同提供了更多灵活便捷的算子使编程变得更加优雅和高效。