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作业可能会消耗大量磁盘空间。