【发布时间】:2015-08-16 09:33:09
【问题描述】:
每个人都说 Spark 正在使用内存,因此它比 Hadoop 快得多。
我没有从 Spark 文档中了解真正的区别是什么。
- Spark 将数据存储在内存中的什么位置,而 Hadoop 没有?
- 如果数据对于内存来说太大会怎样?在这种情况下,它与 Hadoop 有何相似之处?
【问题讨论】:
标签: hadoop apache-spark
每个人都说 Spark 正在使用内存,因此它比 Hadoop 快得多。
我没有从 Spark 文档中了解真正的区别是什么。
【问题讨论】:
标签: hadoop apache-spark
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 活动。在磁盘上,从磁盘上 — 在磁盘上,从磁盘上。当在 Spark 上运行类似的操作时,Spark 可以在没有 I/O 的情况下将事物保存在内存中,因此您可以快速地对相同的数据进行操作。这导致性能的显着提高,这意味着 Spark 无疑将我们至少带入了交互式类别。作为记录,MapReduce 将所有这些记录到磁盘有一些好处——因为将所有内容记录到磁盘允许在失败后重新启动的可能性。如果你正在运行一个多小时的工作,你不想从头开始。对于 Spark 上在几秒或几分钟内运行的应用程序,重启显然不是问题。
It’s easier to develop for Spark。 Spark 在你如何给它指令来处理数据方面更加强大和富有表现力。 Spark 有一个 Map 和一个像 MapReduce 一样的 Reduce 功能,但它添加了其他功能,如 Filter、Join 和 Group-by,因此更容易为 Spark 开发。
Spark also adds libraries for doing things like machine learning, streaming, graph programming and SQL
【讨论】:
在 Hadoop MapReduce 中,输入数据在磁盘上,您执行 map 和 reduce 并将结果放回磁盘上。 Apache Spark 允许更复杂的管道。也许您需要 map 两次,但不需要 reduce。也许你需要reduce然后map然后reduce。 Spark API 让您可以非常直观地设置包含数十个步骤的非常复杂的管道。
您也可以使用 MapReduce 实现相同的复杂管道。但是在每个阶段之间,您写入磁盘并将其读回。 Spark 会尽可能避免这种开销。将数据保存在内存中是一种方法。但很多时候,即使这样也没有必要。一个阶段可以只将计算的数据传递到下一个阶段,而无需将整个数据存储在任何地方。
这不是 MapReduce 的一个选项,因为一个 MapReduce 不知道下一个。它必须在下一个开始之前完全完成。这就是为什么 Spark 可以更高效地进行复杂计算的原因。
API,特别是在 Scala 中,也非常干净。经典的 MapReduce 通常是一行。使用起来非常强大。
【讨论】: