Spark为什么比MapReduce快

zjk 发布于 2024-05-14 204 次阅读


误区

  1. 两者都是基于内存计算的,任何计算框架都是基于内存计算的,不会把数据在磁盘中运算。
  2. DAG计算模型减少的是不必要的中间结果的计算次数,而不是磁盘I/O次数,磁盘I/O始终都是一次读一次写。

计算方面

  1. DAG相比MapReduce在大多数情况下可以减少I/O次数
    因为MapReduce计算模型只包含Map和Reduce函数或阶段,Reduce完成后必须进行落盘,而DAG可以连续shuffle,一个DAG可以完成好几个MapReduce,所以DAG只需要在最后一次reduce落盘,总的shuffle次数越多,减少的落盘次数越多。
  2. Spark shuffle的优化
    MR在shuffle时默认进行排序。Spark在shuffle的时候则只有部分场景才需要排序(bypass机制不需要排序),排序是非常耗时的,这样就可以加快shuffle的速度。
  3. 框架运算模型
    Spark支持反复用到的中间结果缓存,可以直接在缓存中取到,可以减少数据加载耗时,更适合需要迭代计算的机器学习算法。
  4. 资源申请特性
    Spark的任务资源申请是粗粒度的,在任务开始前,Application会申请任务所有环节用到的资源,task在执行时不需要单独申请资源,直接运行。而MR任务是Application要执行一个具体task时,再去申请一个资源,task完成后即释放这个资源。
  5. 任务调度器
    Spark的任务调度器比MR的要更加高效,可以动态地分配资源给不同的任务,从而更好地利用集群资源,提高了整体的计算效率。
  6. 容错性机制
    Spark即使有stage失败了,能够通过RDD的血统信息来实现高效的容错和数据恢复,或着重新运行继续使用缓存数据继续执行,使得计算过程更加稳定可靠。而MR一个M或R阶段失败后,会导致整个任务失败,需要从0开始运行。

开发方面

  1. Spark提供了丰富的API,包括Scala、Java、Python和R等多种编程语言的支持,使得开发人员可以使用自己熟悉的语言来编写Spark应用程序。
  2. Spark的API设计更加灵活,提供了丰富的高级操作,如map、reduce、filter等,同时也支持复杂的数据操作和机器学习算法,使得开发人员可以更加高效地编写复杂的数据处理和分析程序。
  3. Spark还提供了交互式的Shell,方便开发人员进行实时的数据探索和开发调试。这些特性使得Spark在开发方面相对于MapReduce更加便捷和灵活。
  4. Spark提供的实时流处理能力。相比之下,MapReduce更适合批处理。Spark的结构化流处理和实时处理功能使得开发人员能够更容易地构建实时数据处理应用程序,而不仅仅局限于传统的批处理模式。这使得Spark在处理实时数据时具有明显的优势。