为什么 Spark 在阶段后从文件中读取的速度如此之快?



Spark在混洗后在磁盘上实现其结果。在运行一个实验时,我看到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将shuffle输出保存在内存中,这是下一个任务读取时的首选。

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

Spark shuffle输出被写入磁盘。您可以在性能影响主题的Spark文档中找到这一点。

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

  • 这样做是为了在谱系被重新计算。只有在如果应用程序保留对这些RDD的引用,则为长时间或者如果GC不频繁启动。

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

最新更新