zoukankan      html  css  js  c++  java
  • spark学习进度12(RDD的Checkpoint)

    1. Checkpoint

    目标
    1. Checkpoint 的作用

    2. Checkpoint 的使用

    1.1. Checkpoint 的作用

    Checkpoint 的主要作用是斩断 RDD 的依赖链, 并且将数据存储在可靠的存储引擎中, 例如支持分布式存储和副本机制的 HDFS.

    Checkpoint 的方式
    • 可靠的 将数据存储在可靠的存储引擎中, 例如 HDFS

    • 本地的 将数据存储在本地

    什么是斩断依赖链

    斩断依赖链是一个非常重要的操作, 接下来以 HDFS 的 NameNode 的原理来举例说明

    HDFS 的 NameNode 中主要职责就是维护两个文件, 一个叫做 edits, 另外一个叫做 fsimageedits 中主要存放 EditLogFsImage 保存了当前系统中所有目录和文件的信息. 这个 FsImage 其实就是一个 Checkpoint.

    HDFS 的 NameNode 维护这两个文件的主要过程是, 首先, 会由 fsimage 文件记录当前系统某个时间点的完整数据, 自此之后的数据并不是时刻写入 fsimage, 而是将操作记录存储在 edits 文件中. 其次, 在一定的触发条件下, edits 会将自身合并进入 fsimage. 最后生成新的 fsimage 文件, edits 重置, 从新记录这次 fsimage 以后的操作日志.

    如果不合并 edits 进入 fsimage 会怎样? 会导致 edits 中记录的日志过长, 容易出错.

    所以当 Spark 的一个 Job 执行流程过长的时候, 也需要这样的一个斩断依赖链的过程, 使得接下来的计算轻装上阵.

    Checkpoint 和 Cache 的区别

    Cache 可以把 RDD 计算出来然后放在内存中, 但是 RDD 的依赖链(相当于 NameNode 中的 Edits 日志)是不能丢掉的, 因为这种缓存是不可靠的, 如果出现了一些错误(例如 Executor 宕机), 这个 RDD 的容错就只能通过回溯依赖链, 重放计算出来.

    但是 Checkpoint 把结果保存在 HDFS 这类存储中, 就是可靠的了, 所以可以斩断依赖, 如果出错了, 则通过复制 HDFS 中的文件来实现容错.

    所以他们的区别主要在以下两点

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

    • Checkpoint 可以斩断 RDD 的依赖链, 而 Persist 和 Cache 不行

    • 因为 CheckpointRDD 没有向上的依赖链, 所以程序结束后依然存在, 不会被删除. 而 Cache 和 Persist 会在程序结束后立刻被清除.

    1.2. 使用 Checkpoint

     

     

     @Test
      def checkpoint(): Unit = {
        val conf = new SparkConf().setMaster("local[6]").setAppName("debug_string")
        val sc = new SparkContext(conf)
        sc.setCheckpointDir("checkpoint")//这里设置
    
        var interimRDD = sc.textFile("dataset/access_log_sample.txt")
          .map(item => (item.split(" ")(0), 1))
          .filter(item => StringUtils.isNotBlank(item._1))
          .reduceByKey((curr, agg) => curr + agg)
        //下面打搭配才是最好的
        interimRDD=interimRDD.cache()
        interimRDD.checkpoint()//这里(不准确的说他是一个action)
        interimRDD.collect().foreach(println(_))
        sc.stop()
      }

  • 相关阅读:
    C# 多线程编程及其几种方式
    多态有几种表现形式
    闭包的理解
    C# 泛型类型约束 where
    HTML扩展--HTMLTestRuner HTML测试报告
    编写web自动化测试
    unittest单元测试框架之认识unittest
    自动化测试模型
    处理HTML5视频播放、滑动解锁
    操作Cookie调用JavaScript
  • 原文地址:https://www.cnblogs.com/dazhi151/p/14261581.html
Copyright © 2011-2022 走看看