mem*_*555 5 hadoop apache-spark
每个人都说 Spark 正在使用内存,因此它比 Hadoop 快得多。
我从 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 活动。进入磁盘,离开磁盘\xe2\x80\x94进入磁盘,离开磁盘。当类似的操作在 Spark 上运行时,Spark 可以将数据保留在内存中而无需 I/O,因此您可以快速地继续对相同的数据进行操作。这导致性能显着提高,这意味着 Spark 肯定至少让我们进入交互类别。根据记录,MapReduce 将所有内容记录到磁盘 \xe2\x80\x94 有一些好处,因为将所有内容记录到磁盘允许在失败后重新启动。如果您正在运行一个耗时数小时的作业,您不想从头开始。对于 Spark 上运行时间为数秒或数分钟的应用程序来说,重启显然不是什么问题。
It\xe2\x80\x99s easier to develop for Spark。Spark 在如何向其发出处理数据的指令方面更加强大且更具表现力。Spark 具有像 MapReduce 一样的 Map 和 Reduce 功能,但它添加了其他功能,例如 Filter、Join 和 Group-by,因此更容易为 Spark 开发。
Spark also adds libraries for doing things like machine learning, streaming, graph programming and SQL\nRun Code Online (Sandbox Code Playgroud)\n
在 Hadoop MapReduce 中,输入数据位于磁盘上,您执行映射和归约并将结果放回磁盘上。Apache Spark 允许更复杂的管道。也许您需要映射两次但不需要减少。也许您需要先减少,然后映射,然后再次减少。Spark API 使得通过数十个步骤设置非常复杂的管道变得非常直观。
您也可以使用 MapReduce 实现相同的复杂管道。但是在每个阶段之间,您将其写入磁盘并将其读回。Spark 会尽可能避免这种开销。将数据保存在内存中是一种方法。但很多时候甚至没有必要。一个阶段可以将计算出的数据传递到下一阶段,而无需将整个数据存储在任何地方。
这不是 MapReduce 的一个选项,因为一个 MapReduce 不知道下一个。它必须完全完成才能开始下一个。这就是 Spark 能够更高效地进行复杂计算的原因。
API,尤其是 Scala 中的 API,也非常干净。经典的 MapReduce 通常是单行。使用起来非常有力量。
| 归档时间: |
|
| 查看次数: |
988 次 |
| 最近记录: |