Apache Spark 与 Hadoop 方法有何不同?

mem*_*555 5 hadoop apache-spark

每个人都说 Spark 正在使用内存,因此它比 Hadoop 快得多。

我从 Spark 文档中不明白真正的区别是什么。

  • Spark 将数据存储在内存中的什么位置,而 Hadoop 则不存储?
  • 如果数据对于内存来说太大会发生什么?在这种情况下,它与 Hadoop 有多相似?

Kis*_*ore 5

Spark tries to keep things in memory, whereas MapReduce keeps shuffling things in and out of disk.平均中间输出存储在主内存中,而hadoop 将中间结果存储在辅助内存中。MapReduce 插入了屏障,将数据写入磁盘并读回需要很长时间。因此,MapReduce 可能既缓慢又费力。消除此限制使 Spark 的速度提高了几个数量级。对于像 Hive 这样的 SQL 引擎,通常需要一系列 MapReduce 操作,这需要大量的 I/O 活动。进入磁盘,离开磁盘\xe2\x80\x94进入磁盘,离开磁盘。当类似的操作在 Spark 上运行时,Spark 可以将数据保留在内存中而无需 I/O,因此您可以快速地继续对相同的数据进行操作。这导致性能显着提高,这意味着 Spark 肯定至少让我们进入交互类别。根据记录,MapReduce 将所有内容记录到磁盘 \xe2\x80\x94 有一些好处,因为将所有内容记录到磁盘允许在失败后重新启动。如果您正在运行一个耗时数小时的作业,您不想从头开始。对于 Spark 上运行时间为数秒或数分钟的应用程序来说,重启显然不是什么问题。

\n\n

It\xe2\x80\x99s easier to develop for Spark。Spark 在如何向其发出处理数据的指令方面更加强大且更具表现力。Spark 具有像 MapReduce 一样的 Map 和 Reduce 功能,但它添加了其他功能,例如 Filter、Join 和 Group-by,因此更容易为 Spark 开发。

\n\n
Spark also adds libraries for doing things like machine learning, streaming, graph programming and SQL\n
Run Code Online (Sandbox Code Playgroud)\n


Dan*_*bos 5

在 Hadoop MapReduce 中,输入数据位于磁盘上,您执行映射归约并将结果放回磁盘上。Apache Spark 允许更复杂的管道。也许您需要映射两次但不需要减少。也许您需要先减少,然后映射,然后再次减少。Spark API 使得通过数十个步骤设置非常复杂的管道变得非常直观。

您也可以使用 MapReduce 实现相同的复杂管道。但是在每个阶段之间,您将其写入磁盘并将其读回。Spark 会尽可能避免这种开销。将数据保存在内存中是一种方法。但很多时候甚至没有必要。一个阶段可以将计算出的数据传递到下一阶段,而无需将整个数据存储在任何地方。

这不是 MapReduce 的一个选项,因为一个 MapReduce 不知道下一个。它必须完全完成才能开始下一个。这就是 Spark 能够更高效地进行复杂计算的原因。

API,尤其是 Scala 中的 API,也非常干净。经典的 MapReduce 通常是单行。使用起来非常有力量。