• Spark cache、checkpoint机制笔记


    Spark学习笔记总结

    03. Spark cache和checkpoint机制

    1. RDD cache缓存

    当持久化某个RDD后,每一个节点都将把计算的分片结果保存在内存中,并在对此RDD或衍生出的RDD进行的其他动作中重用(不需要重新计算)。这使得后续的动作变得更加迅速。RDD相关的持久化和缓存,是Spark最重要的特征之一。

    val rdd = sc.textFile("hdfs://172.23.27.19:9000/wrd/wc/srcdata/").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_)
    rdd.cache()//现在没有缓存
    rdd.collect//遇到action开始缓存
    

    .cache()是一个transformation。在job的storage页面也可以看到缓存信息。.unpersist(true)释放这个资源

    设置缓存方式
    RDD通过persist方法设置。默认的存储级别都是仅在内存存储一份,Spark的存储级别还有好多种,存储级别在object StorageLevel中定义的。

    可以设置在内存、硬盘、还有份数。

    2. checkpoint容错机制

    缓存有可能丢失,或者存储存储于内存的数据由于内存不足而被删除。通过基于RDD的一系列转换,丢失的数据会被重算,由于RDD的各个Partition是相对独立的,因此只需要计算丢失的部分即可,并不需要重算全部Partition。
    但是,多次迭代后数据丢失的重新计算,会影响这个效率。因此,RDD的缓存容错机制保证了即使缓存丢失也能保证快速的恢复,而不是重新计算。

    checkpoint保存的目录是在HDFS目录中,保证了存储的可靠性。

    sc.setCheckpointDir("hdfs://master:9000/..")//会在..目录创建一个文件夹
    //对象面的rdd设置checkpoint
    rdd.checkpoint
    rdd.collect
    

    checkpoint和cache一样,是transformation
    当遇到action时,checkpoint会启动另一个任务,将数据切割拆分,保存到设置的checkpoint目录中。

    在Spark的checkpoint源码中提到,

    1. 当使用了checkpoint后,数据被保存到HDFS,此RDD的依赖关系也会丢掉,因为数据已经持久化到硬盘,不需要重新计算。
    2. 强烈推荐先将数据持久化到内存中(cache操作),否则直接使用checkpoint会开启一个计算,浪费资源。

    初接触,记下学习笔记,还有很多问题,望指导,谢谢。

  • 相关阅读:
    宏定义问题
    (转载)(int)a、&a、(int)&a、(int&)a的区别,很偏僻的题
    boolalpha的作用
    一些小细节
    HTTP Keep-Alive的作用
    数据库三大范式
    laravel 安装语言包
    MySQL存储引擎中的MyISAM和InnoDB区别详解
    推荐一款超好用的工具cmder
    如何保证代码质量
  • 原文地址:https://www.cnblogs.com/wangrd/p/6232826.html
Copyright © 2020-2023  润新知