首页 > 解决方案 > 为什么Spark在一个阶段后从文件中读取速度如此之快?

问题描述

Spark 在 shuffle 后将其结果具体化到磁盘上。在运行实验时,我看到 Spark 的一个任务在 1ms 内读取了 65MB 的物化数据(有些任务甚至显示在 0ms 内读取这个:))。我的问题是 Spark 怎么能这么快地从 HDD 读取数据?它实际上是从文件还是从内存中读取这些数据?

@zero323 在此 Stackoverflow 帖子上的回答指出,To disk are written shuffle files. It doesn't mean that data after the shuffle is not kept in memory.但我找不到任何官方 Spark 源表明 Spark 将随机输出保留在内存中,这是下一个任务读取时的首选。

Spark 任务是从磁盘还是从内存读取 shuffle 输出(如果从内存中读取,如果有人能指出官方来源,我将不胜感激)。

标签: apache-sparkrdd

解决方案


Spark shuffle 输出被写入磁盘。您可以在Spark Documents on Performance Impact主题中找到此内容。

  • Shuffle 还会在磁盘上生成大量的中间文件。从Spark 1.3开始,这些文件将被保留,直到不再使用相应的 RDD 并被垃圾回收。

  • 这样做是为了在重新计算血统时不需要重新创建 shuffle 文件。如果应用程序保留对这些 RDD 的引用或者如果 GC 不经常启动,垃圾收集可能会在很长一段时间后发生。

  • 这意味着长时间运行的 Spark 作业可能会消耗大量磁盘空间。


推荐阅读