Spark cache、checkpoint机制笔记

Spark学习笔记总结缓存

03. Spark cache和checkpoint机制

1. RDD cache缓存

当持久化某个RDD后,每个节点都将把计算的分片结果保存在内存中,并在对此RDD或衍生出的RDD进行的其余动做中重用(不须要从新计算)。这使得后续的动做变得更加迅速。RDD相关的持久化和缓存,是Spark最重要的特征之一。学习

val rdd = sc.textFile("hdfs://172.23.27.19:9000/wrd/wc/srcdata/").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_)
rdd.cache()//如今没有缓存
rdd.collect//遇到action开始缓存

.cache()是一个transformation。在job的storage页面也能够看到缓存信息。.unpersist(true)释放这个资源spa

设置缓存方式
RDD经过persist方法设置。默认的存储级别都是仅在内存存储一份,Spark的存储级别还有好多种,存储级别在object StorageLevel中定义的。

能够设置在内存、硬盘、还有份数。code

2. checkpoint容错机制

缓存有可能丢失,或者存储存储于内存的数据因为内存不足而被删除。经过基于RDD的一系列转换,丢失的数据会被重算,因为RDD的各个Partition是相对独立的,所以只须要计算丢失的部分便可,并不须要重算所有Partition。
可是,屡次迭代后数据丢失的从新计算,会影响这个效率。所以,RDD的缓存容错机制保证了即便缓存丢失也能保证快速的恢复,而不是从新计算。orm

checkpoint保存的目录是在HDFS目录中,保证了存储的可靠性。对象

sc.setCheckpointDir("hdfs://master:9000/..")//会在..目录建立一个文件夹
//对象面的rdd设置checkpoint
rdd.checkpoint
rdd.collect

checkpoint和cache同样,是transformation
当遇到action时,checkpoint会启动另外一个任务,将数据切割拆分,保存到设置的checkpoint目录中。内存

在Spark的checkpoint源码中提到,资源

  1. 当使用了checkpoint后,数据被保存到HDFS,此RDD的依赖关系也会丢掉,由于数据已经持久化到硬盘,不须要从新计算。
  2. 强烈推荐先将数据持久化到内存中(cache操做),不然直接使用checkpoint会开启一个计算,浪费资源。

初接触,记下学习笔记,还有不少问题,望指导,谢谢。源码

相关文章
相关标签/搜索