Saprk checkpoint、cache、persist的区别

持久化类型 特点
cache 默认存储级别为:
RDD.cache():persist(StorageLevel.MEMORY_ONLY)
Dataset.cache():MEMORY_AND_DISK
persist 可以自定义存储级别,默认:MEMORY_AND_DISK
可选:
DISK_ONLY,
DISK_ONLY_2,
MEMORY_ONLY,
MEMORY_ONLY_2,
MEMORY_ONLY_SER,
MEMORY_ONLY_SER_2,
MEMORY_AND_DISK,
MEMORY_AND_DISK_2,
MEMORY_AND_DISK_SER,
MEMORY_AND_DISK_SER_2
NONE
OFF_HEAP
checkpoint 返回此数据集的检查点版本。
检查点可用于截断此数据集的逻辑计划,
这在计划可能指数增长的迭代算法中特别有用。
它将被保存到用SparkContext#setCheckpointDir设置的检查点目录内的文件中。
persist落盘不同的是,此处落盘在任务失败重启后可以重新使用,
在迭代计算非常复杂的情况,适当checkpoint时非常有好处的

注意:
1. Dataset.cache()默认MEMORY_AND_DISK是因为重新计算基础表的内存中列表示是非常昂贵的。

2. 至于persist基本就是内存、落地磁盘、是否序列化、是否备份的各种组合,

3. MEMORY_AND_DISK*的落地磁盘是在内存不够的时候才部分落地磁盘,落盘部分会进行序列化

4. DISK_ONLY*的落地磁盘是直接落盘,不在内存存储,落盘会进行序列化

5. checkpoint会删除对此Dataset父Dataset的引用,依赖链会断掉,起到切断血缘的效果
因为此时数据已经持久化到硬盘,不需要重新计算
所以在对某个ds进行checkpoint时,建议先进行一次ds持久化否则在使用checkpoint时会开启一个计算,浪费资源。


下面是存储级别的表,通过空间,cpu和性能的影响

级别 内存使用 cpu时间 内存 磁盘 序列化 重新计算某些分区
MEMORY_ONLY High Low Y N N Y
MEMORY_ONLY_SER Low High Y N Y Y
MEMORY_AND_DISK High Medium Some Some Some N
MEMORY_AND_DISK_SER Low High Some Some Y N
DISK_ONLY Low High N Y Y N

使用cache、persist的好处

  • 减少计算开销:Spark的计算资源是非常宝贵的,所以通过复用计算可以减少计算开销
  • 时间效率:重用重复计算节省大量时间。 所以我们可以在相同时间内执行更多任务
原文地址:https://www.cnblogs.com/lillcol/p/14780237.html