Spark中的RDD Checkpoint 检查点机制(附案例)

RDD数据可以持久化缓存,比如 cache()、persist(),虽然快速但也是最不可靠的,比如内存损坏、磁盘损坏。

Checkpoint 的持久化是存储在HDFS上的,因为具备高可用,所以非常可靠,但会切断执行 checkpoint RDD的依赖关系。Checkpoint 常用于RDD数据备份,以便从HDFS中恢。


checkpoint 的使用步骤:

# 第一步:
sc.setCheckpointDir('hdfs:///ckp/8-checkpoint')     # 指定HDFS的目录
# 第二步:
split_rdd.checkpoint()    # 后续频繁使用到的RDD、或很重要的RDD

RDD Checkpoint 检查点机制案例

  • 数据准备(apache.log):

    86.149.9.216 10001 17/05/2015:10:05:30 GET /presentations/logstash-monitorama-2013/images/github-contributions.png
    83.149.9.216 10002 17/05/2015:10:06:53 GET /presentations/logstash-monitorama-2013/css/print/paper.css
    83.149.9.216 10002 17/05/2015:10:06:53 GET /presentations/logstash-monitorama-2013/css/print/paper.css
    83.149.9.216 10002 17/05/2015:10:06:53 GET /presentations/logstash-monitorama-2013/css/print/paper.css
    83.149.9.216 10002 17/05/2015:10:06:53 GET /presentations/logstash-monitorama-2013/css/print/paper.css
    83.149.9.216 10002 17/05/2015:10:06:53 GET /presentations/logstash-monitorama-2013/css/print/paper.css
    83.149.9.216 10002 17/05/2015:10:06:53 GET /presentations/logstash-monitorama-2013/css/print/paper.css
    10.0.0.1 10003 17/05/2015:10:06:53 POST /presentations/logstash-monitorama-2013/css/print/paper.css
    10.0.0.1 10003 17/05/2015:10:07:53 POST /presentations/logstash-monitorama-2013/css/print/paper.css
    10.0.0.1 10003 17/05/2015:10:08:53 POST /presentations/logstash-monitorama-2013/css/print/paper.css
    10.0.0.1 10003 17/05/2015:10:09:53 POST /presentations/logstash-monitorama-2013/css/print/paper.css
    10.0.0.1 10003 17/05/2015:10:10:53 POST /presentations/logstash-monitorama-2013/css/print/paper.css
    10.0.0.1 10003 17/05/2015:10:16:53 POST /presentations/logstash-monitorama-2013/css/print/paper.css
    10.0.0.1 10003 17/05/2015:10:26:53 POST /presentations/logstash-monitorama-2013/css/print/paper.css
    ​
  • Python代码

    import time
    
    from pyspark import SparkConf, SparkContext, StorageLevel
    import os
    import re
    os.environ['SPARK_HOME'] = '/export/server/spark'
    if __name__ == '__main__':
        #1-创建上下文对象
        conf=SparkConf().setAppName('test').setMaster('local[*]')
        sc=SparkContext(conf=conf)
        #设置checkpoint检查点HDFS目录
        sc.setCheckpointDir('hdfs:///ckp/8-checkpoint')
        #2-加载数据源,形成RDD
        input_rdd=sc.textFile('file:///export/pyworkspace/pyspark_sz27/pyspark_core/data/apache.log')
    
        #3-转换成只有IP的RDD,\\s+表示广义的空白字符,比如空格,换行,tab键, \t\n, 多个连续空白字符也算一个空白字符。
        split_rdd =input_rdd.map(lambda x:re.split('\\s+',x)[0])
    
        #对复用的RDD的逻辑上的数据,固化到检查点
        split_rdd.checkpoint()
    
        #4-计算并打印pv
        print('pv=',split_rdd.count())
        #5-计算并打印uv
        print('uv=',split_rdd.distinct().count())
    
        time.sleep(600)
        #6-关闭退出
        sc.stop()
  • 结果(checkpoint 操作切断了原RDD的依赖关系)

“checkpoint() 检查点”  和  “cache() / persist() 持久化缓存”  的区别

  • 位置区别:persist 或 cache 会将RDD的数据保存在内存、磁盘、堆外内存中,但是 checkpoint 机制将RDD数据保存在HDFS上。

  • 生命周期:当 Application 执行完毕,或者调用 unpersist,那么 persist 或 cache 的数据会被自动清除。但是 checkpoint 目录的内容不会自动清除,需要手动清除。

  • 血缘关系:persist 或 cache 会保留RDD的血缘关系,如果某个分区的数据丢失,那么可以借助血缘关系重新计算出来。但 checkpoint 会切断依赖链不保留依赖关系,因为即使一个分区的数据丢失损坏,也能直接从HDFS的另外2个副本恢复。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奇迹虎虎

客官,赏个银子吧,别下次一定了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值