繁体   English   中英

Spark结构化流媒体源保留策略

[英]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个逻辑组件并调用开始:

  1. 输入(Kafka,文件,套接字,..)
  2. 触发器(输入更新的频率)
  3. 结果表(在更新tigger后根据查询创建)
  4. 输出(定义将写入结果的哪一部分)

内存消耗取决于查询中将触发的操作。 Spark文档

“由于Spark正在更新结果表,因此它具有完全控制权,可以在有较晚数据时更新旧聚合,并可以清理旧聚合以限制中间状态数据的大小。自Spark 2.1起,我们就支持水印,从而可以用户可以指定延迟数据的阈值,并允许引擎相应地清除旧状态。”

因此,您必须确定计算结果表所需的数据量,以便估算所需的内存量。
如果您执行以下操作,则执行程序可能会因OOM异常而崩溃:mapGroupWithState,…

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM