迁移指南:结构化流
请注意,本迁移指南描述了特定于结构化流的项目。将结构化流迁移到更高版本时,可以应用许多 SQL 迁移项目。请参考 迁移指南:SQL、Datasets 和 DataFrame。
从结构化流 3.3 升级到 3.4
-
自 Spark 3.4 起,
Trigger.Once
已被弃用,建议用户从Trigger.Once
迁移到Trigger.AvailableNow
。有关更多详细信息,请参阅 SPARK-39805。 -
自 Spark 3.4 起,Kafka 偏移量获取的配置默认值 (
spark.sql.streaming.kafka.useDeprecatedOffsetFetching
) 从true
更改为false
。默认值不再依赖于基于消费者组的调度,这会影响所需的 ACL。有关更多详细信息,请参阅 结构化流 Kafka 集成。
从结构化流 3.2 升级到 3.3
- 自 Spark 3.3 起,所有有状态运算符都需要使用精确分组键进行哈希分区。在以前的版本中,除了流-流连接之外的所有有状态运算符都需要宽松的分区标准,这打开了正确性问题的可能性。(有关更多详细信息,请参见 SPARK-38204。)为了确保向后兼容性,我们保留了从旧版本构建的检查点的旧行为。
从结构化流 3.0 升级到 3.1
-
在 Spark 3.0 及更早版本中,对于具有可以发出早于当前水印加上允许的晚到达记录延迟的行的状态操作的查询,这些行是下游状态操作中的“晚到达行”,这些行可能会被丢弃,Spark 仅打印警告消息。自 Spark 3.1 起,Spark 将检查此类查询是否存在可能的正确性问题,并默认抛出 AnalysisException。对于了解正确性问题可能存在的风险并仍然决定运行查询的用户,请通过将配置
spark.sql.streaming.statefulOperator.checkCorrectness.enabled
设置为 false 来禁用此检查。 -
在 Spark 3.0 及更早版本中,Spark 使用
KafkaConsumer
进行偏移量获取,这可能会导致驱动程序中的无限等待。在 Spark 3.1 中,添加了一个新的配置选项spark.sql.streaming.kafka.useDeprecatedOffsetFetching
(默认值:true
),可以将其设置为false
,允许 Spark 使用新的偏移量获取机制,使用AdminClient
。有关更多详细信息,请参阅 结构化流 Kafka 集成。
从结构化流 2.4 升级到 3.0
-
在 Spark 3.0 中,当通过
spark.readStream(...)
使用基于文件的文件源(例如 text、json、csv、parquet 和 orc)时,结构化流强制将源模式设置为可为空。以前,它遵守源模式中的可空性;但是,它导致了难以调试的 NPE 问题。要恢复以前的行为,请将spark.sql.streaming.fileSource.schema.forceNullable
设置为false
。 -
Spark 3.0 修复了流-流外连接的正确性问题,这会更改状态的模式。(有关更多详细信息,请参见 SPARK-26154。)如果您从使用流-流外连接的 Spark 2.x 构建的检查点启动查询,则 Spark 3.0 将失败该查询。要重新计算输出,请丢弃检查点并重放之前的输入。
-
在 Spark 3.0 中,已删除已弃用的类
org.apache.spark.sql.streaming.ProcessingTime
。请改用org.apache.spark.sql.streaming.Trigger.ProcessingTime
。同样,已删除org.apache.spark.sql.execution.streaming.continuous.ContinuousTrigger
,取而代之的是Trigger.Continuous
,并且已隐藏org.apache.spark.sql.execution.streaming.OneTimeTrigger
,取而代之的是Trigger.Once
。