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

San*_*dip 19 caching apache-spark

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

小智 36

文件说---

存储级别

含义

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中,但如果它不适合,则分区将溢出到磁盘.

  • 请注意 - 从 Spark 2.0 默认级别是 MEMORY_AND_DISK:https://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.DataFrame.cache (2认同)

Jul*_*ina 33

文档中所述,效率方面的持久性级别:

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如果有太多数据要适合内存,则溢出到磁盘.

  • 请不要将图像用于表格; 使用代码块或`<pre>`格式和手动排列的列.无法搜索图像文本,也无法访问. (11认同)