美文网首页
Spark-RDD的持久化和RDD-Checkpoint机制

Spark-RDD的持久化和RDD-Checkpoint机制

作者: Eqo | 来源:发表于2022-06-09 23:58 被阅读0次

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 斩断依赖链

相关文章

网友评论

      本文标题:Spark-RDD的持久化和RDD-Checkpoint机制

      本文链接:https://www.haomeiwen.com/subject/iprimrtx.html