RDD Persistence
StorageLevel | describe |
NONE | RDD不做持久化 |
DISK_ONLY | RDD分区仅持久化在磁盘 |
DISK_ONLY_2 | _2,即将每个分区备份到2个集群节点,其他同上 |
MEMORY_ONLY | 默认持久化策略. 将RDD作为JAVA对象反序列化后持久化到JVM虚拟机内存中,如果内存不能容纳所有的RDD分区,则有些RDD分区数据不能持久化。即不能被命中(cached),当这些RDD分区再次被使用时,需要重新计算 |
MEMORY_ONLY_2 | _2,即将每个分区备份到2个集群节点,其他同上 |
MEMORY_ONLY_SER | 与 MEMORY_ONLY 的唯一区别:将RDD作为JAVA对象(每个分区占一个字节数组)序列化后持久化到JVM虚拟机内存中。优缺点: 减少内存开销,但是需要反序列化,消耗CPU |
MEMORY_ONLY_SER_2 | _2,即将每个分区备份到2个集群节点,其他同上 |
MEMORY_AND_DISK | 将RDD作为JAVA对象反序列化后进行持久化。如果内存不能全部容纳RDD数据,则剩余部分会被持久化到磁盘。后续从内存和磁盘上按需读取 |
MEMORY_AND_DISK_2 | _2,即将每个分区备份到2个集群节点,其他同上 |
MEMORY_AND_DISK_SER | 与 MEMORY_ONLY_SER 类似,内存容纳不下的RDD分区数据持久化至磁盘,避免,避免再次需要的时候重新计算 |
MEMORY_AND_DISK_SER_2 | _2,即将每个分区备份到2个集群节点,其他同上 |
OFF_HEAP OFF_HEAP | 参数默认持久化到分布式内存文件系统。相比MEMORY_ONLY_SER,OFF_HEAP减少垃圾回收的开销,使得executors更小及共享内存池。这在高并发环境下有吸引力。此外,由于RDD驻留在Tachyon中,executor的崩溃不会造成数据的丢失,这种模式下,Tachyon中的内存是可废弃的,因此,Tachyon并不会尝试去重建从内存中清除的块。 |
References
- RDD Persistence Authority API
- Spark性能优化指南——基础篇