为什么spark MEMORY_AND_DISK比MEMORY_ONLY慢?

时间:2017-08-17 15:52:17

标签: apache-spark

我有一个非常典型的RDD场景,我收集一些数据,保留它,然后多次使用持久RDD进行各种转换。持续加速一个数量级,所以坚持绝对是必要的。

但我对不同坚持方法的相对速度感到惊讶。如果我坚持使用MEMORY_AND_DISK,则每次使用持久RDD的时间比使用MEMORY_ONLY时长10%。这是为什么?如果数据适合内存,我原本期望它们具有相同的速度,如果某些分区不适合内存,我希望MEMORY_AND_DISK更快。为什么我的时间始终没有表明这是真的?

2 个答案:

答案 0 :(得分:0)

您的CPU通常以大约10 Gb / s的速度访问内存,而对SSD的访问速度则为600 Mb / s 选择MEMORY_ONLY时不适合内存的分区将使用父rdds分区重新计算。如果你没有广泛的依赖,那就没问题

答案 1 :(得分:0)

没有上下文就无法分辨,但至少有两种情况MEMORY_AND_DISK

  • 数据大于可用内存 - 不适合内存的MEMORY_AND_DISK分区将存储在磁盘上。
  • 分区已从内存中逐出 - MEMORY_AND_DISK存储在磁盘上,MEMORY_ONLY丢失,必须重新计算,驱逐可能会触发大型GC扫描。

最后,您必须记住_DISK可以使用不同级别的硬件和软件缓存,因此可以使用与主内存相当的速度访问不同的块。