我正在学习Spark Streaming。我想保持状态更新,并能够使用mapWithState更新状态。我还在上下文中启用了检查点。如果我必须停止/重新启动工作,我想记住状态。现在每次重启都会重新开始。我尝试了各种现金,检查点选项,并通过大量发布进行扫描,但没有得到清晰的图片。
环境: 我在开发中本地运行Spark,也作为HDP沙箱运行。 (我在两种环境中都尝试过)。
是否可以记住杀死Spark作业的状态并重新启动它。 (没有任何编程更改)。
如果可能的话怎么样?任何指针或建议都会有所帮助。 (我已尝试过chekpoints,缓存在单个RDD上,MapwithStateRDD在本地以及HDP sanbox中)。
我没有尝试的唯一选择是将MapWithStateRDD保存到磁盘并将其作为initialRDD读回。不管怎么说这不是正确的选择。
我只找到一个没有答案的类似问题。 Spark Checkpoint doesn't remember state (Java HDFS)
感谢。
代码:
def getStreamingContext(streamingApp : (SparkContext, Duration) => StreamingContext, sc : SparkContext, batchDuration: Duration) = {
val creatingFunc = () => streamingApp(sc, batchDuration)
val ssc = sc.getCheckpointDir match {
case Some(checkpointDir) =>
println("Get or Create Context")
StreamingContext.getActiveOrCreate(checkpointDir, creatingFunc, sc.hadoopConfiguration, createOnError = true)
case None =>
print("New Context")
StreamingContext.getActiveOrCreate(creatingFunc)
}
sc.getCheckpointDir.foreach( cp => ssc.checkpoint(cp))
println(ssc.getState())
ssc
}
Spark版本2.1.0
答案 0 :(得分:1)
我得到了它...感谢以下Q / A. [link](Spark streaming not remembering previous state)
我在updateStateByKey
之后缺少以下行statefulActivity.checkpoint(分钟(1))
添加持续时间以及启用检查点目录会记住重新启动时的状态。