我正在努力要求根据输入数据计算的一些聚合显示实时仪表板。
我刚刚开始探索Spark / Spark Streaming,我发现我们可以使用微集中的Spark Integration实时计算,并为UI Dashboard提供相同的功能。
我的查询是,如果在Spark Integration作业启动后的任何时间,它会停止/或崩溃,当它出现时,它将如何从它上次处理的位置恢复。我理解Spark维护一个内部状态,我们会为每个收到的新数据更新该状态。但是,当它重新启动时,该状态是否会消失。
我觉得我们可能需要定期持续运行总计/结果,以便在重新启动时通过从那里获取Spark来恢复其处理。但是,不知道如何使用Spark Streaming来做到这一点。
但是,不确定Spark Streaming是否默认确保数据不会丢失,因为我刚开始使用它。
如果有人遇到类似的情况,请您就我如何解决这个问题提出您的想法。
答案 0 :(得分:1)
spark.streaming.receiver.writeAheadLog.enable true
checkpoint是定期将您的应用状态写入可靠存储。当您的应用程序失败时,它可以从检查点文件中恢复。 要编写检查点,请写下:
ssc.checkpoint("checkpoint.path")
从检查点读取:
def main(args: Array[String]): Unit = {
val ssc = StreamingContext.getOrCreate("checkpoint_path", () => createContext())
ssc.start()
ssc.awaitTermination()
}
在createContext
函数中,您应该创建ssc并执行自己的逻辑。例如:
def createContext(): StreamingContext = {
val conf = new SparkConf()
.setAppName("app.name")
.set("spark.streaming.stopGracefullyOnShutdown", "true")
val ssc = new StreamingContext(conf, Seconds("streaming.interval"))
ssc.checkpoint("checkpoint.path")
// your code here
ssc
}
以下是有关如何部署火花串流应用程序的必要步骤的文档,包括从驱动程序/执行程序故障中恢复。
https://spark.apache.org/docs/1.6.1/streaming-programming-guide.html#deploying-applications
答案 1 :(得分:0)
Spark Streaming充当消费者应用程序。实时地,从Kafka主题中提取数据,您可以在其中存储数据在某些数据存储中的偏移量。如果您正在从Twitter流中读取数据,情况也是如此。您可以按照以下帖子存储偏移量,如果应用程序崩溃或重新启动。
http://aseigneurin.github.io/2016/05/07/spark-kafka-achieving-zero-data-loss.html
https://www.linkedin.com/pulse/achieving-exactly-once-semantics-kafka-application-ishan-kumar