GraphX的基于内存的shuffle和Spark Core的shuffle有什么区别

What are the differences between GraphX's memory-based shuffle and Spark Core's shuffle

从论文"GraphX: Graph Processing in a Distributed Dataflow Framework"(Gonzalez et al. 2014)我了解到GraphX修改了Spark shuffle:

Memory-based Shuffle: Spark’s default shuffle implementation materializes the temporary data to disk. We modified the shuffle phase to materialize map outputs in memory and remove this temporary data using a timeout.

(本文对此不再做任何解释。)

似乎此更改旨在在高度迭代的图形处理算法的上下文中优化混洗。

这个 "Memory-based shuffle" 是如何工作的,它与 Spark Core 的区别是什么,优缺点是什么:为什么它非常适合 graphx 用例而不适合其他用例火花作业 ?

我无法直接从 GraphX/Spark 来源了解全局,而且我也很难找到那里的信息。

除了一个理想的答案,也欢迎带有来源链接的评论。

I failed to understand the big picture directly from GraphX/Spark sources

因为它从未包含在主流发行版中。

在开发第一个 GraphX 版本时,Spark 使用基于 Hash 的 shuffle,效率相当低。它是 Spark 作业中的主要瓶颈之一,并且对开发替代洗牌策略进行了大量研究。

由于 GraphX 算法是迭代的并且是基于连接的,因此提高洗牌速度是一个明显的途径。

从那时起,引入了可插入随机播放管理器,以及新的基于排序的随机播放,最终证明其速度足以使基于哈希的随机播放和正在进行的提供基于通用内存的随机播放的工作过时。