spark检查点Checkpoint

CheckPoint

CheckPoint的作用

​ checkPoint的主要作用事斩断RDD的依赖关系,并将数据存储在可靠的数据引擎中,例如分布式文件存储系统HDFS.

checkPoint的方式:

  • 可靠的将数据存储在可靠的存储引擎中,例如HDFS
  • 本地的,将数据存储在本地

什么斩断依赖

	斩断依赖链是一个非常重非要的操作,接下来以HDFS的nameNode的原理来举例说明:
	Hdfs的NameNOde中主要职责是维护两个文件,一个叫做edits,另外一个是fsimage,edits中主要存放EditLog,FsImage保存了当前系统中所有目录和文件的信息,这个FsImage其实就是哟个Checkpoint(检查点).
	Hdfs的NameNode维护这两个文件主要过程是:首先,会由fsimage文件记录当前系统某个时间点的完整数据,自此之后的数据并不是时刻写入fsimage文件的,而是操作将操作记录存在edits文件中,其次,在一定出发条件下,edits会将自身合并进入fimage,最后生成新的fsimage文件,edits重置,重新记录这次fsimage以后的操作日志.
	如果不合并edits文件进入fsimage文件会怎么样?会导致edits中记录的日志较长,容易出错.所以当spark的一个job之星流程过长的时候,也需要这样使得接下来的计算可以轻装上阵.
	如果当前的RDD出现错误,那么就会从上一个正确的数据重4重新计算.

checkpoint和缓存的区别

	Cache可以把RDD计算出来然后放到内存中,但是RDD的依赖(相当于NameNode中的Edits日志)是不能丢的,因为这种缓存是不可靠的,如果出现一些错误(例如Executor宕机),这个RDD的容错就只能通过回溯依赖链,重新计算出来.
	但是checkpoint检查点把结果保存在Hdfs这类存储中,就可靠,所以可以斩断依赖链,如果出错,可以通过复制HDFS中的文件来实现容错.所以他们的区别主要在以下两点:
1.checkpoint可以保存数据到HDFS中这类可靠的存储上,Persisit和Cache只能保存在本地的磁盘或者内存中.
2.checkpoint可以斩断依赖链,而Persisit和Cache不行
3.因为Chackpoint没有向上的依赖链,所以程序结束后依然存在,不会被删除,而Cache和Persisit回在程序结束后被清除.

Checkpoint的使用

简单的示例:

  def main(args: Array[String]): Unit = {
    val config = new SparkConf().setMaster("local").setAppName("My App")
    val sc = new SparkContext(config)
    //设置保存checkpoint的目录,可以是本地也可以是hdfs中的目录
//    sc.setCheckpointDir("hdfs://plat/myCheckpoint") //生产
    sc.setCheckpointDir("checkpoint") //测试

    val sources = sc.textFile("D:\\test.properties")
    val countRDD = sources.map(item => (item.split(" ")(0),1))
    val cleanRDD = countRDD.filter(item => StringUtils.isNotEmpty(item._1))
    val aggRDD = cleanRDD.reduceByKey((curr,agg) => curr + agg)

    aggRDD.cache() //缓存下避免一直计算前面的RDD导致资源的浪费

    aggRDD.checkpoint();
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值