PySparkSpark RDD的cheikpoint

一、Checkpoint案例

from pyspark import SparkContext, SparkConf
import os

os.environ['SPARK_HOME'] = '/export/server/spark'
SPARK_PYTHON = '/root/anaconda3/envs/pyspark_env/bin/python'
os.environ['PYSPARK_PYTHON'] = SPARK_PYTHON
os.environ['PYSPARK_DRIVER_PYTHON'] = SPARK_PYTHON

if __name__ == '__main__':  
    print('PySpark checkpoint Program')
    # 1.创建应用程序入口SparkContext实例对象
    conf = SparkConf().setAppName("miniProject").setMaster("local[*]")
    sc = SparkContext.getOrCreate(conf)
    # 2.RDD的checkpoint
    sc.setCheckpointDir("file:///export/tmp_data/checkpoint1")
    # 3.调用集合RDD中函数处理分析数据
    fileRDD = sc.textFile("file:///export/tmp_data/word.txt")
    # 4.调用checkpoint函数,将RDD进行备份,需要RDD中Action函数触发
    fileRDD.checkpoint()
    fileRDD.count()
    # 5.再次执行count函数,此时从checkpoint读取数据
    fileRDD.count()

    print("停止PySpark SparkSession对象")
    # 6.关闭SparkContext
    sc.stop()

二、持久化和Checkpoint的区别

一、存储位置

  • Persist和Cache只能保存在本地的磁盘和内存中(或者堆外内存)
  • Checkpoint可以保存数据到HDFS这类可靠的存储上

二、生命周期

  • Cache和Persist的RDD在程序结束后会被清除或者手动调用unpersist方法
  • Checkpoint的RDD在程序结束后依然存在,不会被删除

三、Lineage(血统、依赖链、依赖关系)

  • Persist和Cache,不会丢掉RDD间的依赖链/依赖关系,因为这种缓存是不可靠的,如果出现了一些错误(例如Executor宕机),需要通过回溯依赖链重新计算出来
  • Checkpoint会斩断依赖链,因为Checkpoint会把结果保存在HDFS这类存储中,更加的安全可靠,一般不需要回溯依赖链

三、持久化和Checkpoint的优先级

  • 如果做了cache或persist,首先会从cache中读取数据,如果没有再从checkpoint缓存的hdfs中读取
  • cache被unpersist之后从hdfs中checkpoint读取
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值