用过Spark Streaming的应该都比较了解checkpoint机制。对于Spark Structured Streaming 假如存在聚合函数,join等操作的时候实际上也是要维护中间状态的,这种情况下就需要开启checkpoint。当然,即使没有非状态的算子,由于Structured Streaming是自己管理offset的,不会将offset提交到kafka或者zk,所以为了恢复的时候从上次位置重启,也要开启checkpoint。
使用Checkpoint和预写日志,如果发生故障或关机,可以恢复之前的查询的进度和状态,并从停止的地方继续执行。通过给查询任务配置checkpointLocation参数,开启checkpoint,查询任务将将所有进度信息(即,每次触发中处理的偏移范围)和运行聚合保存到checkpoint。此检checkpoint存储位置必须是HDFS兼容文件系统中的路径,并且可以在启动查询时将其设置为DataStreamWriter中的选项。
aggDF
.writeStream
.outputMode("complete")
.option("checkpointLocation", "path/to/HDFS/dir")
.format("memory")
.start()
具体测试代码如下:
package bigdata.spark.StructuredStreaming.KafkaSourceOperator
import org.apache.spark.SparkConf
i