【问题标题】:How is Apache Spark different from the Hadoop approach?Apache Spark 与 Hadoop 方法有何不同?
【发布时间】:2015-08-16 09:33:09
【问题描述】:

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

我没有从 Spark 文档中了解真正的区别是什么。

  • Spark 将数据存储在内存中的什么位置,而 Hadoop 没有?
  • 如果数据对于内存来说太大会怎样?在这种情况下,它与 Hadoop 有何相似之处?

【问题讨论】:

    标签: hadoop apache-spark


    【解决方案1】:

    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 有何相似之处?
    • Spark 会在其分布式工作人员的内存中缓存部分结果(中间输出而不是整个数据),从而实现更快/更低延迟的计算。如果在这种情况下中间数据不适合内存,则将中间数据存储在磁盘上
    • Spark 允许您在内存中缓存中间结果。如果您有经常使用的数据结构,例如查找表或机器学习算法中的分数矩阵,缓存可以显着提高性能。缓存也会带来问题,因为它通常需要大量内存
    【解决方案2】:

    在 Hadoop MapReduce 中,输入数据在磁盘上,您执行 ma​​preduce 并将结果放回磁盘上。 Apache Spark 允许更复杂的管道。也许您需要 ma​​p 两次,但不需要 reduce。也许你需要reduce然后ma​​p然后reduce。 Spark API 让您可以非常直观地设置包含数十个步骤的非常复杂的管道。

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

    这不是 MapReduce 的一个选项,因为一个 MapReduce 不知道下一个。它必须在下一个开始之前完全完成。这就是为什么 Spark 可以更高效地进行复杂计算的原因。

    API,特别是在 Scala 中,也非常干净。经典的 MapReduce 通常是一行。使用起来非常强大。

    【讨论】:

    • 为了完成这个答案:Spark 使用一个名为“弹性分布式数据集”的自定义数据结构,可以显式存储在内存中。如果 RDD 不适合内存,它会以一种优雅的方式“溢出”到驱动器(即无法放入内存的内容会进入磁盘)。 Spark 最初是为迭代计算而构想的,该计算播放(可能)很长的操作管道。 Hadoop 必须使用 Tez 等工具来编排这样的管道,而无需来回访问磁盘。
    • Spark 还将 RDD 上的转换记录为 DAG,并可以对其进行优化,这在您关于复杂计算的答案中有所提及。
    猜你喜欢
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    • 2017-12-20
    • 2019-10-16
    相关资源
    最近更新 更多