为什么Spark比Hadoop Map Reduce更快

时间:2015-09-14 19:34:32

标签: mapreduce apache-spark

有人可以解释使用单词计数示例,为什么Spark会比Map Reduce更快?

2 个答案:

答案 0 :(得分:17)

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

  1. Spark使用“延迟评估”来形成连续计算阶段的有向无环图(DAG)。以这种方式,可以优化执行计划,例如,最大限度地减少洗牌数据。相反,这应该通过调整每个MR步骤在MapReduce中手动完成。 (如果您熟悉RDBMS中的执行计划优化或Apache Tez的DAG样式执行,那么理解这一点会更容易)
  2. Spark生态系统已经建立了一个多功能的组件堆栈来处理SQL,ML,Streaming,Graph Mining任务。但是在hadoop生态系统中,你必须安装其他软件包才能完成这些工作。
  3. 我想补充一点,即使您的数据对于主内存而言太大,您仍然可以通过选择将数据保留在磁盘上来使用spark 。虽然通过这样做可以放弃内存处理的优势,但您仍然可以从DAG执行优化中受益。

    Quora的一些信息性答案: herehere

答案 1 :(得分:11)

我认为有三个主要原因。

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

  1. MapReduce的一个主要限制是它在运行每个作业后将完整数据集保留到HDFS。这非常昂贵,因为它会导致磁盘I / O中数据集大小的三倍(用于复制)和类似数量的网络I / O. Spark更全面地了解了一系列操作。当需要将操作的输出馈送到另一个操作时,Spark直接传递数据而不写入持久存储。这是MapReduce的一项创新,来自微软的Dryad论文,并不是Spark的原创。

  2. Spark的主要创新是引入内存缓存抽象。这使Spark成为多个操作访问相同输入数据的工作负载的理想选择。用户可以指示Spark将输入数据集缓存在内存中,因此不需要为每个操作从磁盘读取它们。

  3. 那些可以归结为单个MapReduce作业的Spark作业怎么样?在许多情况下,这些在Spark上运行速度比在MapReduce上运行得快。 Spark在这方面的主要优势是它可以更快地启动任务。 MapReduce为每个任务启动一个新的JVM,加载JAR,JITing,解析配置XML等需要几秒钟.Spark会在每个节点上运行执行程序JVM,因此启动任务只需要对它进行RPC和将Runnable传递给线程池,该线程池采用毫秒的单个数字。

  4. 最后,一个常见的误解可能值得一提的是,Spark在某种程度上完全在内存中运行,而MapReduce则没有。这根本不是那么回事。 Spark的shuffle实现与MapReduce的工作方式非常相似:每个记录都被序列化并在映射端写入磁盘,然后在reduce端进行提取和反序列化。