Spark计算模型RDD(6)——RDD容错机制的checkpoint

checkpoint可以干什么?

1 、Spark 在生产环境下经常会面临transformation的RDD非常多(例如一个Job中包含1万个RDD)或者具体transformation的RDD本身计算特别复杂或者耗时(例如计算时长超过1个小时),这个时候就要考虑对计算结果数据持久化保存,以避免意外导致的数据丢失;
2、Spark是擅长多步骤迭代的,同时擅长基于Job的复用,这个时候如果能够对曾经计算的过程产生的数据进行复用,可以提升效率;
3、如果采用persist把数据放在内存中,虽然是快速的,但是也是不可靠的;如果把数据放在磁盘上,也不是完全可靠的,例如磁盘会损坏,系统管理员可能清空磁盘。
4、Checkpoint的产生就是为了相对而言更加可靠的持久化数据,在Checkpoint的时候可以指定把数据放在本地,并且是多副本的方式,生产环境下是放在HDFS上,借助了HDFS高容错、高可靠的特征来完成了最大化的可靠的持久化数据的方式;
例如进行一个1万个算子操作,在9000个算子的时候persist,数据还是有可能丢失的,但是如果checkpoint,由于数据存放于HDFS,数据丢失的概率几乎为0。

checkpoint原理机制

当RDD使用cache机制从内存中读取数据,如果数据没有读到,会使用checkpoint机制读取数据。此时如果没有checkpoint机制,那么就需要找到父RDD重新计算数据了,因此checkpoint是个很重要的容错机制。
对于一个RDD chain(链)如果后面需要反复使用某些中间结果RDD,可能因为一些故障导致该中间数据丢失,那么就可以针对该RDD启动checkpoint机制。
使用checkpoint首先需要调用sparkContext的setCheckpointDir方法,设置一个容错文件系统目录,比如hdfs,然后对RDD调用checkpoint方法。之后在RDD所处的job运行结束后,会启动一个单独的job来将checkpoint过的数据写入之前设置的文件系统持久化,进行高可用。所以后面的计算在使用该RDD时,如果数据丢失了,但是还是可以从它的checkpoint中读取数据,不需要重新计算。

persist或者cache与checkpoint的区别

persist或者cache与checkpoint的区别在于,前者持久化只是将数据保存在BlockManager中但是其lineage是不变的,
但是checkpoint执行完后,rdd已经没有依赖RDD,只有一个checkpointRDD,checkpoint之后,RDD的lineage就改变了。
他们都需要触发一个action操作才会执行。但是checkpoint后面当前这个job结束之后,会重新启动给一个新的job来执行checkpoint持久化数据。
persist或者cache持久化的数据丢失的可能性更大,因为可能磁盘或内存被清理,但是checkpoint的数据通常保存到hdfs上,放在了高容错文件系统中。

如何使用checkpoint

  • 1、通过sparkContext对象设置一个checkpoint目录

    sc.setCheckpointDir(“hdfs目录”)

  • 2、对需要进行持久化的rdd调用checkpoint方法(此时没有执行checkpoint)

    rdd1.checkpoint

  • 3、后面也需要触发一个action操作(这个job结束后,系统重新启动一个新的job执行checkpoint)

    rdd1.collect

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值