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只存结果不记录依赖关系