溢出到磁盘并随机写入火花

Spill to disk and shuffle write spark

我对 spill to diskshuffle write 感到困惑。使用默认的 Sort shuffle 管理器,我们使用 appendOnlyMap 来聚合和组合分区记录,对吗?然后当执行内存填满时,我们开始对映射进行排序,将其溢出到磁盘,然后为下一次溢出清理映射(如果发生),我的问题是:

谢谢。

乔治

spill to diskshuffle write是两个不同的东西

spill to disk - 数据从主机 RAM 移动到主机磁盘 - 当你的机器上没有足够的 RAM 时使用,它将部分 RAM 放入磁盘

http://spark.apache.org/faq.html

我的数据是否需要适合内存才能使用 Spark?

No. Spark's operators spill data to disk if it does not fit in memory, allowing it to run well on any sized data. Likewise, cached datasets that do not fit in memory are either spilled to disk or recomputed on the fly when needed, as determined by the RDD's storage level.

shuffle write - 数据从执行器移动到另一个执行器 - 当数据需要在执行器之间移动时使用(例如由于 JOIN, groupBy 等)

更多数据可以在这里找到:

可能有助于解决此问题的边缘案例示例:

  • 您有 10 个执行者
  • 每个执行器有 100GB RAM
  • 数据大小为1280MB,分为10个分区
  • 每个执行器持有128MB的数据。

假设数据持有一个key,执行groupByKey,将所有数据归为一个partition。 Shuffle size 将是 9*128MB(9 个执行者将他们的数据传输到最后一个执行者),并且不会有任何 spill to disk 因为执行者有 100GB 的 RAM 而只有 1GB 的数据

关于AppendOnlyMap

As written in the AppendOnlyMap code (see above) - this function is a low level implementation of a simple open hash table optimized for the append-only use case, where keys are never removed, but the value for each key may be changed.

两个不同的模块使用相同的 low-level 函数并不意味着这些函数在 hi-level 中是相关的。