spark中的memory_only和memory_and_disk缓存级别有什么区别?

时间:2015-05-29 03:05:04

标签: caching apache-spark

spark中的memory_only和memory_and_disk缓存级别的行为有何不同?

2 个答案:

答案 0 :(得分:31)

文件说---

  

存储级别

     

含义

     

MEMORY_ONLY

     

将RDD存储为JVM中的反序列化Java对象。如果RDD没有   适合内存,一些分区将不会被缓存,将是   每次需要时都会重新计算。这是默认值   水平。

     

MEMORY_AND_DISK

     

将RDD存储为JVM中的反序列化Java对象。如果RDD没有   适合内存,存储不适合磁盘的分区,然后读取   他们需要时从那里来。

     

MEMORY_ONLY_SER

     

将RDD存储为序列化Java对象(每个分区一个字节数组)。   这通常比反序列化的对象更节省空间,   特别是在使用快速串行器时,但CPU占用更多   读。

     

MEMORY_AND_DISK_SER

     

与MEMORY_ONLY_SER类似,但溢出不适合的分区   内存到磁盘而不是每次都重新计算它们   他们是需要的。

     

DISK_ONLY

     

仅将RDD分区存储在磁盘上。

     

MEMORY_ONLY_2,MEMORY_AND_DISK_2等

     

与上面的级别相同,但复制两个群集上的每个分区   节点。

     

OFF_HEAP(实验性)

     

在Tachyon中以序列化格式存储RDD。相比   MEMORY_ONLY_SER,OFF_HEAP减少了垃圾收集开销   允许执行程序更小并共享一个内存池,使   它在大堆或多个并发的环境中很有吸引力   应用。此外,由于RDD驻留在Tachyon,崩溃   执行程序不会导致丢失内存缓存。在这种模式下,   Tachyon的记忆是可废弃的。因此,Tachyon不会尝试   重建一个从记忆中驱逐的块。

这意味着只有内存,spark会尝试始终将分区保留在内存中。如果某些分区无法保留在内存中,或者由于节点丢失,某些分区将从RAM中删除,则spark将使用沿袭信息重新计算。在内存和磁盘级别,spark将始终保持计算和缓存分区。它将尝试保留在RAM中,但如果它不适合,则分区将溢出到磁盘。

答案 1 :(得分:27)

正如documentation中所述,效率方面的持久性水平:

Level                Space used  CPU time  In memory  On disk  Serialized
-------------------------------------------------------------------------
MEMORY_ONLY          High        Low       Y          N        N
MEMORY_ONLY_SER      Low         High      Y          N        Y
MEMORY_AND_DISK      High        Medium    Some       Some     Some
MEMORY_AND_DISK_SER  Low         High      Some       Some     Y
DISK_ONLY            Low         High      N          Y        Y
如果有太多数据无法容纳在内存中,

MEMORY_AND_DISKMEMORY_AND_DISK_SER会溢出到磁盘。