spark--RDD的容错Checkpoint检查点机制-★★★★

RDD的容错Checkpoint检查点机制

为什么要RDD容错-Checkpoint

  • 可以将计算复杂/成本较高且后续要被频繁使用到的比较重要的RDD的计算结果进行缓存/持久化到内存或磁盘上
  • 注意:
    • 这里存在内存中肯定是不安全的,因为一旦宕机内存中的数据就没了
    • 而存在磁盘上也不是绝对安全,因为这里说的磁盘只是普通磁盘,不是HDFS
    • 所以
    • 如果想让这类比较重要的数据数据绝对的安全应该要将数据使用Checkpoint机制存放在HDFS上

如何使用RDD容错-Checkpoint

sc.setCheckpointDir("HDFS目录") //设置Checkpoint检查点目录

rdd.checkpoint() //将该rdd的结果存入Checkpoint目录,注意是调用action操作之后才真正的执行
  • 如:
sc.setCheckpointDir("hdfs://node01:8020/ckpdir43") 
//设置检查点目录,会立即在HDFS上创建一个空目录
val rdd1 = sc.textFile("hdfs://node01:8020/wordcount/input/words.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_)
rdd1.checkpoint //对rdd1进行检查点保存
rdd1.collect //Action操作才会真正执行checkpoint
//后续如果要使用到rdd1可以从checkpoint中读取

开发中如何选用?是使用缓存/持久化还是使用Checkpoint?

  • 对于计算复杂/成本较高且后续要被频繁使用到的比较重要的RDD的计算结果
  • 1.先进行缓存/持久化 保证后续使用的效率
  • 2.再使用Checkpoint保证数据安全
  • 这样既保证效率有保证安全

缓存/持久化和Checkpoint有啥区别?

  • 1.位置不同: 缓存/持久化放内存/普通磁盘 , Checkpoint一般都是使用HDFS分布式磁盘
  • 2.生命周期不同: 缓存/持久化会在程序结束或手动调用unpersist之后销毁 , Checkpoint会一直在HDFS直到手动销毁
  • 3.对于依赖关系的处理不同: 缓存/持久化会记录RDD的依赖关系, Checkpoint只存结果不记录依赖关系
上一篇:修改网络中的参数取值代码


下一篇:二、InnoDB存储引擎