gpt4 book ai didi

hadoop - Apache Spark 是同时读取和处理,还是先读取内存中的整个文件然后开始转换?

转载 作者:可可西里 更新时间:2023-11-01 14:19:31 27 4
gpt4 key购买 nike

我很好奇 Spark 是否首先将整个文件读入内存然后才开始处理它,这意味着应用转换和操作,或者它读取文件的第一个块 - 对其应用转换,读取第二个块等等。

对于同样的事情,Hadoop 中的 Spark 之间有什么区别吗?我读到 Spark 大部分时间都将整个文件保存在内存中,而 Hadoop 则不然。但是当我们第一次阅读它并映射键时的初始步骤呢?

谢谢

最佳答案

我认为一个公平的表征是这样的:

Hadoop(或更准确地说是 MapReduce)和 Spark 都使用相同的底层文件系统 HDFS。

在 Mapping 阶段,两者都会读取所有数据并将映射结果实际写入磁盘,以便它可以通过 Shuffle 逻辑在节点之间进行排序和分发。
除了将数据溢出到磁盘以供 Shuffle 执行其工作之外,它们实际上都尝试缓存刚刚映射到内存中的数据。
但这里的区别在于 Spark 在此过程中效率更高,它尝试将为特定计算选择的节点与已缓存在某个节点上的数据最佳对齐。
由于 Spark 还执行称为惰性评估的操作,因此 Spark 的内存使用与 Hadoop 非常不同,因为它同时计划计算和缓存。

在字数统计工作的步骤中,Hadoop 执行以下操作:

  • 将所有单词映射到 1 .
  • 将所有这些映射的 (word, 1) 对写入 HDFS 中的单个文件(单个文件仍然可以跨越分布式 HDFS 上的多个节点)(这是 shuffle 阶段)
  • 对该共享文件中的 (word, 1) 行进行排序(这是排序阶段)
  • 让reducer 从那个共享文件中读取部分(分区),现在包含所有排序的单词并总结所有这些1 s 表示每个单词。

  • 另一方面,Spark 会反过来:
  • 它认为像在 Hadoop 中一样,通过单独的 Reducer 运行汇总所有这些词可能是最有效的,因此它根据一些因素决定要将作业拆分为 x 部分,然后将它们合并到最终结果中。
  • 所以它知道必须对单词进行排序,这将在给定时间至少需要其中的一部分在内存中。
  • 之后它会评估这样一个排序列表将需要映射到 (word, 1) 对的所有单词来开始计算。
  • 它通过步骤 3 比 2 比 1 起作用。

  • 现在,与 Hadoop 相关的技巧是,它在第​​ 3 步中知道在第 2 步中需要哪些内存缓存项。在第 2 步中,它已经知道在最后的第 1 步中将如何需要这些部分(主要是 K-V 对)。
    这允许 Spark 非常有效地计划作业的执行,但缓存它知道在作业的后期阶段将需要的数据。 Hadoop 从开始(映射)到结束工作而没有明确地展望以下阶段,根本无法有效地使用内存,因此不会浪费资源将大块保存在内存中,而 Spark 会保留。与 Spark 不同的是,它只是不知道下一步是否需要 Map 阶段中的所有对。

    事实上,Spark 似乎将整个数据集保存在内存中,因此不是 Spark 主动做的事情,而是 Spark 能够计划作业执行方式的结果。
    另一方面,Spark 可能实际上能够在不同类型的工作中保留更少的内存。在我看来,计算不同单词的数量是一个很好的例子。
    在这里,Spark 会提前计划并在映射期间遇到重复词时立即从缓存/内存中删除它,而在 Hadoop 中它会继续并浪费内存来重新排列重复词(我承认有一百万种方法可以也让 Hadoop 做到这一点,但它不是开箱即用的,也有一些方法可以以不幸的方式编写 Spark 作业来破坏这些优化,但在这里愚弄 Spark 并不容易:))。

    希望这有助于理解内存使用只是 Spark 工作方式的自然结果,而不是积极针对的东西,也不是 Spark 严格要求的东西。当内存成为问题时,它也完全能够在执行的步骤之间重复地将数据溢出回磁盘。

    为了更深入地了解这一点,我建议从 here 了解 Spark 中的 DAG 调度程序看看这是如何在代码中实际完成的。
    您会看到它始终遵循确定数据在哪里的模式 并将是 在弄清楚要计算的内容之前缓存。

    关于hadoop - Apache Spark 是同时读取和处理,还是先读取内存中的整个文件然后开始转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41264589/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com