Spark Streaming之checkpoint机制

来源:互联网 发布:守望先锋辅助网站源码 编辑:程序博客网 时间:2024/06/10 01:54

一 什么类型的数据需要使用checkpoint?

Spark Streaming是最需要进行容错的,因为一般都是7 * 24小时运转,所以需要将足够的信息checkpoint到容错的存储系统上,比如HDFS,从而能够让他从失败中进行恢复。有两种数据需要被进行checkpoint:

1、元数据checkpoint:

# 配置信息:创建spark streaming应用程序的配置信息,比如SparkConf中的信息

# DStream的操作信息:定义了应用程序计算逻辑的DStream操作信息

# 未处理的batch信息:那些job正在排队,还没处理的batch信息

2、数据checkpoint

将实时计算过程中产生的RDD的数据保存到可靠的存储系统之中。对于一些将多个batch的数据进行聚合的,有状态的转换操作,这是很有用的,在这种操作中,生成的RDD是依赖于之前的batch的RDD的,这会导致随着时间的推移,RDD的依赖链条变得越来越长。

 

要避免由于依赖链条越拉越长,导致的一起变得越来越长的失败恢复时间,有状态的转换操作执行过程中产生的RDD,会定期的被checkpoint到可靠的存储系统上,比如HDFS.从而消减RDD的依赖链条,进行而缩短失败恢复时候的RDD恢复时间。

 

所以:元数据checkpoint主要是为了从driver失败中恢复过来;而RDD checkpoint主要是为了,使用到有状态的转换操作的时候,能够在其生产出的数据丢失时进行快速的恢复。

 

 

二 什么时候启用checkpoint机制?

2.1 使用了有状态的转换操作

比如updateStateByKey或者reduceByKeyAndWindow操作

2.2 要保证可以从driver失败中进行恢复

比如元数据的checkpoint需要启用

 

当然如果不是必须要从driver失败中恢复或者没有使用到转换操作,那么也就无需启用checkpoint,这样反而有助于提升性能

 

 

三 如何启用checkpoint机制?

3.1 对于有状态的转换操作,启用checkpoint机制,是比较简单的,定期将其产生的RDD数据checkpoint。可以通过配置容错文件系统,比如HDFS的目录,来启用checkpoint机制,checkpoint数据就会写入该目录。

 

 

3.2 如果为了要从driver失败中恢复,那么启用checkpoint机制是比较复杂的。需要改写spark streaming应用程序

第一步:

当应用程序第一次启动的时候,需要创建一个StreamingContext,并且调用其start方法进行启动。当driver从失败中恢复过来时,需要从checkpoint目录记录的元数据中恢复出来一个StreamingContext。

如下代码所示:

valcheckpointDir = "hdfs://hdfs-cluster/user/spark/chkdir01"
def createContext():StreamingContext= {
    val conf = new SparkConf().setAppName("Driver Checkpoint").setMaster("local[*]")
    val ssc = new StreamingContext(conf,Seconds(2))
    val hostname = "hadoop-all-01"
   
val port= 9999;
    val lines = ssc.socketTextStream(hostname,port)
    ssc.checkpoint(checkpointDir)
    ssc
}
val context = StreamingContext.getOrCreate(checkpointDir,createContext)
context.start()
context.awaitTermination()

第二步:

必须确保Driver可以在失败时,自动重启。要是能够从Driver失败中恢复过来,运行spark streaming应用程序的集群,就必须监控driver的运行的过程,并且在它失败的时候将它重启,对于standalone需要配置supervise driver,在它失败时将其重启

在spark-submit中,添加--deploy-mode参数,默认值是client,即在提交应用程序的机器上启动driver,但是要能够重启driver就必须设置为cluster,此外需要添加--supervise参数

原创粉丝点击