cache
- cache()=persist()=persist(StroageLevel.MEMROY_ONLY)
persist 可以手动的指定持久化的级别
- persist(StorageLevel.MEMORY_ONLY)
- MEMORY_ONLY_SER
- MEMORY_AND_DISK
- MEMORY_AND_DISK_SER
- 注意:
- 尽量避免使用DISK_ONLY级别
- 尽量避免使用"_2"级别
- 注意:
cache和persist注意使用事项:
- cache和persist的的最小单位partition,都是懒执行,需要action算子触发执行
- 对一个RDD使用cache或者persist后,可以赋值给一个变量,下次直接使用这个变量就是使用的持久化的数据
- cache和persist之后不能紧跟action算子
- 当application执行完毕之后持久化的数据会被清除
checkpoint
- 可以将数据持久化到磁盘,还可以切断RDD之间的依赖关系
- 当lineage非常长,计算又复杂时,可以使用checkpoint对RDD进行持久化,当application执行完毕之后
- checkpoint中的数据不会被清除
- checkpoint 的执行流程
- 当application有action触发执行时,job执行完毕3之后,会从后往前回溯
- 回溯去找有哪些RDD被checkpoint做的标记
- 回溯完成之后,重新计算checkpoint’RDD的数据,将结果写入指定的checkpoint目录中
- 切断RDD的依赖关系
- 优化:对RDDcheckpoint之前,最好先cache下
- checkpoint 的执行流程