首页 > 解决方案 > 如何缓存火花流数据集

问题描述

我有一个火花流Dataset<Row>,它流式传输 csv 文件的目录。所以我有这些问题:

  1. 如何缓存流数据集。
  2. 如何在 YARN 中提交我的 spark 流式传输作业,我的流式传输作业应该永远运行,直到用户手动中断。

标签: apache-sparkspark-streamingspark-submit

解决方案


您可以使用缓存或持久功能缓存您的流数据,如下所示

 dstream.persist()

仅当您多次使用流时才这样做。对于reducebywindowreducebyKeyandWindow操作,这是自动完成的。

在您的流式传输作业中以保持您的作业运行,您需要启动火花流式传输上下文并启动此上下文

val ssc = new StreamingContext(sc, Seconds(1))
// your logic goes here
ssc.start()

如果您的作业在运行几个小时后被终止(并且您的集群已被 kerborized),请检查 kerberos 票证是否到期。这可能会导致长时间运行的作业失败。

编辑:注意:如果您专门谈论结构化流。不支持流式数据集上的缓存..查看这篇文章为什么在流式数据集上使用缓存失败并出现“AnalysisException:必须使用 writeStream.start() 执行带有流式源的查询”?


推荐阅读