美文网首页
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