Fault tolerance in Apache Spark

1.Spark RDD Fault Tolerance

1.1Fault Tolerant Semantic

  • RDD是一个不可变的数据集,每一个RDD都能记录与其他RDD操作依赖关系。
  • 如果由于worker节点故障导致一些RDD数据丢失,可以按照RDD的依赖关系,重新计算。
  • 不管Spark集群发生什么错误,最终结果都是一样。

1.2 数据恢复

两种数据需要恢复:

  • Data received and replicated:节点发生故障,仍然有一个备份在其他机器上。
  • Data received but buffered for replication:没有对数据进行复制,只能从源中再次获取。

1.3 发生故障

两种必须要考虑的失败情况:

  • Failure of a Worker Node:worker node中的executor失败,数据丢失。
  • Failure of the Driver Node:driver node中应用程序失败,数据丢失。

2.Fault Tolerance with Receiver-based sources

对于基于接收器的数据源,是针对失败场景和接收器的类型来进行容错。两种类型的接收器:

  • Reliable Receiver:接收到数据,然后给一个回执,如果发生故障,重启接收器之后,数据源会再次发生数据。
  • Unreliable Receiver:接收到数据,不发回执,如果driver端或者executor端失败,将会丢失数据。

如果worker节点故障,Reliable Receiver不会丢失数据,Unreliable Receiver会丢失数据。对于Unreliable Receiver,接收到的数据但未复制的数据就会丢失。

3.Spark Streaming write ahead logs

如果driver节点故障,存储在内存中的数据(接收到的和复制的数据)都会丢失。

Spark 2.1引入write ahead logs,将收到的数据存储起来进行容错。接收到的数据在streaming处理之前,都会存储到write ahead logs。
write ahead logs可以存储在文件或者数据库。在处理的过程中,系统故障可以按照write ahead logs恢复数据。

部署场景worker故障driver故障
Spark 1.1 or earlier使用unreliable receiver时,
会丢失缓冲区的数据
使用unreliable receiver时,
会丢失缓冲区的数据
Spark 1.2 or later without
write ahead logs
使用reliable receiver时,不会丢失数据,
At-least-once语义
所有receiver丢失过去的数据,
Undefined语义
Spark 1.2 or later with
write ahead logs
使用reliable receiver时,
不会丢失数据,
At-least-once语义
使用reliable receiver时,
不会丢失数据,
At-least-once语义
    原文作者:一生逍遥一生
    原文地址: https://www.jianshu.com/p/beb6cf30b782
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞