Spark-RDD的持久化和RDD-Checkpoint机制
2022-06-09 本文已影响0人
Eqo
1_RDD持久化
在实际开发中某些RDD的计算或转换可能会比较耗费时间,如果这些RDD后续还会频繁的被使用到,那么可以将这些RDD进行持久化/缓存,这样下次再使用到的时候就不用再重新计算了,提高了程序运行的效率。
第一点:缓存函数,可以将RDD数据直接缓存到内存中,函数声明如下:
- cache 将数据缓存到内存当中
- persist 默认缓存到内存当中
第二点 spark框架当中可以使用persist对数据的缓存指定不同的级别
image.png
全在磁盘当中
全在内存当中
内存满了存磁盘
默认是内存,开发当中常用 MEMORY_AND_DISK
2_RDD Checkpoint 机制
chaeckpint 检查点 备份数据, 因为存储到内存和磁盘当中也会有风险(会丢失) 所以会checkpoint到 HDFS当中 ,利用HDFS高容错率(三副本机制),而且checkpoint 切断了依赖关系 是个懒操作需要用触发算子进行触发一般使用count
- checkpoint机制存在的原因是因为 数据存储到内存和磁盘当中也会有丢失的风险,所以就把他存储到其他较为安全的地方 比如HDFS上面
- 当RDD数据checkpoint,切断checkpoint RDD的依赖关系,原因:保存到可靠存储(如HDFS)以便数据恢复;
# 1. 获取上下文对象-context
spark_conf = SparkConf().setAppName("PySpark Example").setMaster("local[2]")
sc = SparkContext(conf=spark_conf)
# TODO: step1、设置Checkpoint保存目录
sc.setCheckpointDir('../datas/ckpt')
# 2. 加载数据源-source
input_rdd = sc.textFile('../datas/words.txt', minPartitions=2)
# TODO: step2、将RDD进行Checkpoint
input_rdd.checkpoint()
input_rdd.count()
# TODO: 当RDD进行Checkpoint以后,再次使用RDD数据时,直接从Checkpoint读取数据
print(input_rdd.count())
3_RDD的持久化 和RDD Checkpoint的相同和区别
生命周期:
-
persist,程序结束完了之后就被释放掉或者unpersist释放掉
-
checkpoint ,程序结束后不会被释放掉
存储位置:
-
persist 存储到本地的内存或者磁盘当中
-
checkpoint 存到更为可靠的HDFS中
依赖关系
- persist 不会摆脱依赖
- checkpoint 斩断依赖链