Spark CheckPoint 容错机制

本贴最后更新于 2555 天前,其中的信息可能已经时移俗易

CheckPoint 是什么

⚪️ CheckPoint 产生背景:
CheckPoint 是用来保证数据的容错和高可用而产生的,在一个复杂的 Spark 作业中,从初始的 RDD 到最后的结果,中间有大量的操作,整个程序运行时间较长,而如果此时某个节点故障,或者其他原因导致数据丢失,那么此时,后续的计算就无法继续,我们知道通常一个 RDD 是由上一个 RDD 计算的来,如果经常要复用某个 RDD,此时 RDD 数据丢失,只能根据数据来源重新计算,前面说过如果这过程复杂而耗时,那么将会浪费大量的时间来处理这种故障,这显然是不应该的,但是这种故障对于高负载的集群来说可能是经常性发生的问题。那么如何解决这种问题呢,答案就是 CheckPoint 机制。

⚪️ CheckPoint 工作流程:
CheckPoint 作为解决数据丢失的容错机制,需要我们对于需要针对特殊的 RDD 数据开启这种功能,因为安全的保证必然带来部分性能的丢失,所以有必要有针对性的对于需要的 RDD 开启这种机制(调用 SparkContext 的 setCheckPointDir()方法设置容错目录,一般是 HDFS,HDFS 背身就是高可用的文件系统,会创建多个数据副本),当我们设置完之后,对 RDD 调用 CheckPoint()方法,此时这个 RDD 已经成为被重点保护的对象,当 RDD 的 Job 完成之后会启用一个 job 来对此 RDD 保存到刚才设置的文件系统中,这样就能保证当数据丢失的时候可以从此文件得到 RDD,不影响后续的操作。从而达到提升性能的目的。

CheckPoint 和持久化的区别

Cache/Persit 持久化:

  • 持久化只是将数据存储到 BlockManager 中,但是 lineage 血缘,依赖关系不变。
  • 数据存储在 DISK/Memory 中更容易丢失。存储介质本身不具备高可用容错。

CheckPoint 机制:

  • checkPoint 执行完毕后,RDD 已经没有所以依赖的 RDD 了,会被设置成一个 CheckPointRDD,他的 lineage 血缘关系已经改变了。
  • 数据存储在 HDFS 这种高可用的文件系统中,多节点备份存储,更安全可靠,数据丢失的可能性更底。

需要注意的是:如果我们没有对 RDD 进行持久化缓存,但是却对它进行了 CheckPoint,那么在这个 Job 完成之后,需要CheckPoint的时候在磁盘查找不到这个RDD,需要再一次对这个RDD更新计算一次。所以说,CheckPoint 是容错的高级保障,而 Cache/persit 则是基础保证,因为在 CacheManager 介绍的过程中我们直到服用一个 RDD 首先是到 Cache 中查找的,checkpoints 是最后一步。毕竟到 HDFS 中查找消耗 I/O。所以,Checkpoint 最好先 Persit,并且 设置缓存级别为DISK_ONLY.在 Checkpoint 的时候会直接去磁盘读取数据到文件系统,不需要重新计算,有效的提升效率。

  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 552 关注
  • checkpoint
    3 引用

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
rzx
此生最怕深情被辜负,最怕兄弟成陌路。对世界充满善意,同时又充满深深的恨意,我渴望天降甘霖福泽众生,又渴望灭世洪水重创世纪。 广州