Mapreduce 为什么Spark比Hadoop Map更快

Mapreduce 为什么Spark比Hadoop Map更快,mapreduce,apache-spark,Mapreduce,Apache Spark,有人能用单词计数的例子解释一下,为什么Spark会比Map Reduce快 bafna的回答提供了故事的记忆方面,但我想补充另外两个重要事实:DAG和生态系统 Spark使用“惰性评估”来形成连续计算阶段的有向无环图(DAG)。通过这种方式,可以优化执行计划,例如,最大限度地减少数据的乱序。相反,这应该在MapReduce中通过调整每个MR步骤手动完成。(如果您熟悉RDBMS中的执行计划优化或ApacheTez的DAG风格的执行,就更容易理解这一点) Spark生态系统建立了一个多功能组件堆栈,

有人能用单词计数的例子解释一下,为什么Spark会比Map Reduce快

bafna的回答提供了故事的记忆方面,但我想补充另外两个重要事实:DAG和生态系统

  • Spark使用“惰性评估”来形成连续计算阶段的有向无环图(DAG)。通过这种方式,可以优化执行计划,例如,最大限度地减少数据的乱序。相反,这应该在MapReduce中通过调整每个MR步骤手动完成。(如果您熟悉RDBMS中的执行计划优化或ApacheTez的DAG风格的执行,就更容易理解这一点)
  • Spark生态系统建立了一个多功能组件堆栈,用于处理SQL、ML、流式处理和图形挖掘任务。但是在hadoop生态系统中,您必须安装其他软件包来完成这些单独的工作
  • 我想补充一点,即使您的数据对于主内存来说太大,您仍然可以通过选择将数据持久化到磁盘上来使用spark。尽管这样做放弃了内存处理的优势,但仍然可以从DAG执行优化中获益

    关于Quora的一些信息性回答:
    还有。

    我认为有三个主要原因

    主要的两个原因源于这样一个事实:通常情况下,一个不运行单个MapReduce作业,而是按顺序运行一组作业

  • MapReduce的主要限制之一是,它在运行每个作业后将完整的数据集持久化到HDFS。这是非常昂贵的,因为它会导致磁盘I/O中数据集大小的三倍(对于复制),以及类似数量的网络I/O。Spark更全面地查看操作管道。当一个操作的输出需要输入到另一个操作中时,Spark直接传递数据而不写入持久存储器。这是对来自微软Dryad paper的MapReduce的创新,不是Spark的原创

  • Spark的主要创新是引入了内存缓存抽象。这使得Spark非常适合于多个操作访问相同输入数据的工作负载。用户可以指示Spark将输入数据集缓存在内存中,这样就不需要每次操作都从磁盘读取这些数据集

  • 火花作业可以归结为一个MapReduce作业吗?在许多情况下,它们在Spark上的运行速度也比在MapReduce上快。Spark的主要优势在于它可以更快地启动任务。MapReduce为每个任务启动一个新的JVM,加载JAR、JIT、解析配置XML等可能需要几秒钟的时间。Spark让执行器JVM在每个节点上运行,因此启动任务只需向其发送一个RPC并向线程池传递一个可运行的JVM,以毫秒为单位


  • 最后,可能值得一提的一个常见误解是,Spark完全在内存中运行,而MapReduce则没有。事实并非如此。Spark的shuffle实现与MapReduce的工作原理非常相似:每条记录在map端序列化并写入磁盘,然后在reduce端获取并反序列化。

    另一个可能的副本的可能副本最好的答案是,现在随着Spark out的第二次发布,我想您还可以提到一个钨引擎。它使用MapReduce中不可用的字节码优化。答案最初由Sandy Ryza编写,请在此处找到