只缓存到内存
cache底层调用的是persist方法,可以指定其他存储级别
cache和persist方法,严格来说,不是Transformation,应为没有生成新的RDD,只是标记当前rdd要cache或persist
cache、persist的使用场景:一个application多次触发Action,为了复用前面RDD计算好的数据,避免反复读取HDFS(数据源)中的数据和重复计算缓存,可以将数据缓存到内存或磁盘【executor所在的磁盘】,第一次触发action才放入到内存或磁盘,以后再出发action会读取缓存的RDD的数据再进行操作并且复用缓存的数据
支持多种StorageLevel,可以将数据序列化,默认放入内存使用的是java对象存储,但是占用空间大,优点速度快,也可以使用其他的序列化方式
触发action后第一个job计算结果,第二个存入内存
checkpoint
Checkpoint使用场景:适合复杂的计算【机器学习、迭代计算】,为了避免丢失数据儿重复计算,可以将宝贵的中间结果保存到hdfs中,中间结果安全
它可以将数据缓存到本地磁盘,相对于cache更加安全也可以存入Hdfs中,分布式文件管理系统,理论上不会丢失
触发action后从Hdfs中读取,如果文件被删除,即使删除一个分区,再次读取就会报错
如果RDD做了checkpoint,这个RDD以前的依赖关系就不在使用了
checkpoint触发action有二个job.第一个job计算结果一个是放hdfs
触发多次Action,checkpoint才有意义,多用于迭代计算
checkpoint严格的说,不是Transformation,只是标记当前RDD要做checkpoint
------------------------------------------------------------
如果checkpoint前,对rdd进行了cache,可以避免数据重复计算,如果有cache的数据有限使用cache,没有再使用checkpoint,如果没有checkpoint就从rdd依次往上读
Spark:cache和persist和checkpoint
最新推荐文章于 2022-04-23 20:41:24 发布