[英]Spark Structured Streaming source retention policy
考虑有关Kafka主题的JSON数据的连续流,我们希望通过如下结构化流处理它:
val df = spark
.readStream
.format("kafka")
.option("kafka.bootstrap.servers", "host1:port1,host2:port2")
.option("subscribe", "topic1")
.load()
我想知道程序是否可以长期运行,那么df
变量会变得如此之大-以我为例,一周将达到100 TB。 那么,是否有任何配置可用于消除df
较早数据或仅使最早的行出队?
在Spark中,直到触发动作,执行才会开始。 这个概念在Apache Spark中称为“ 惰性评估” 。 “转换本质上是惰性的,这意味着当我们在RDD中调用某些操作时,它不会立即执行”
前面已经说过,加载操作是一种转换,执行此代码行将不会读取任何数据。
为了启动流工作,需要提供以下4个逻辑组件并调用开始:
内存消耗取决于查询中将触发的操作。 Spark文档 :
“由于Spark正在更新结果表,因此它具有完全控制权,可以在有较晚数据时更新旧聚合,并可以清理旧聚合以限制中间状态数据的大小。自Spark 2.1起,我们就支持水印,从而可以用户可以指定延迟数据的阈值,并允许引擎相应地清除旧状态。”
因此,您必须确定计算结果表所需的数据量,以便估算所需的内存量。
如果您执行以下操作,则执行程序可能会因OOM异常而崩溃:mapGroupWithState,…
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.