Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 使用火花流定期保存计算结果?_Apache Spark_Spark Streaming_Aggregation - Fatal编程技术网

Apache spark 使用火花流定期保存计算结果?

Apache spark 使用火花流定期保存计算结果?,apache-spark,spark-streaming,aggregation,Apache Spark,Spark Streaming,Aggregation,我正在研究一个基于输入数据计算的一些聚合来显示实时仪表板的需求 我刚刚开始探索Spark/Spark流,我看到我们可以在微批量中使用Spark集成进行实时计算,并将其提供给UI仪表板 我的问题是,如果在Spark集成作业启动后的任何时候,它停止/或崩溃,当它出现时,它将如何从上次处理的位置恢复。我知道Spark保持一个内部状态,我们会为收到的每一个新数据更新该状态。但是,当它重新启动时,这种状态不会消失吗 我觉得我们可能需要定期保存运行的总计/结果,以便Spark在重新启动时从那里获取数据,从而

我正在研究一个基于输入数据计算的一些聚合来显示实时仪表板的需求

我刚刚开始探索Spark/Spark流,我看到我们可以在微批量中使用Spark集成进行实时计算,并将其提供给UI仪表板

我的问题是,如果在Spark集成作业启动后的任何时候,它停止/或崩溃,当它出现时,它将如何从上次处理的位置恢复。我知道Spark保持一个内部状态,我们会为收到的每一个新数据更新该状态。但是,当它重新启动时,这种状态不会消失吗

我觉得我们可能需要定期保存运行的总计/结果,以便Spark在重新启动时从那里获取数据,从而恢复其处理。但是,我不知道如何才能做到这一点与火花流

但是,我不确定Spark Streaming在默认情况下是否确保数据不会丢失,因为我刚刚开始使用它


如果有人遇到过类似的情况,请提供您对我如何解决此问题的想法。

Spark Streaming充当消费者应用程序。实时地,从卡夫卡主题中提取数据,您可以将数据的偏移量存储在某些数据存储中。如果您正在从Twitter流中读取数据,这也是正确的。如果应用程序崩溃或重新启动,您可以按照下面的帖子来存储偏移量

关键点: 为接收器启用预写日志 启用检查点 细节 启用WAL:将spark.streaming.receiver.writeAheadLog.enable设置为true 启用检查点 检查点是定期将应用程序状态写入可靠存储。当应用程序失败时,它可以从检查点文件中恢复。 要写入检查点,请写入以下内容:

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
}
以下是有关如何部署spark流媒体应用程序的必要步骤的文档,包括从驱动程序/执行器故障中恢复


我想你会在这里找到一些答案: