Apache Spark® 4.3 正式发布——现已在 Databricks Runtime 19 中可用

Apache Spark® 4.3 正式发布——现已在 Databricks Runtime 19 中可用

💡 原文英文,约2600词,阅读约需10分钟。
📝

内容提要

Apache Spark 4.3 发布,核心是将有状态处理引入实时模式,三项基准测试的 P99 端到端延迟均低于 150 毫秒,支持流聚合、去重和 transformWithState。新增并发阶段调度与流水线 shuffle,实现持续数据流。还推出小数据单任务免 shuffle 执行、Auto CDC 的 SCD Type 2 历史追踪、Spark Connect 会话与操作可见性、DataFrame.zip、纳秒时间戳预览、JSON_TABLE 及 ASOF JOIN 等。发布节奏改为每季度一次。

🔎

延伸解读

实时模式扩展至有状态处理,但延迟数据有边界

Spark 4.3 将实时模式扩展到流聚合、去重和 transformWithState,三项基准测试的 P99 端到端延迟均低于 150 毫秒。这意味着部分有状态流处理不再需要额外引擎。但文章明确说明,这些只是三个测试负载的测量结果,并非对所有管道的延迟保证。读者应关注自身工作负载是否属于类似场景,并注意状态存储和检查点机制仍沿用原有设计,持久化开销可能影响实际延迟。

并发阶段调度与流水线 shuffle 是通用引擎能力

为支持持续数据流,Spark 4.3 引入并发阶段调度和流水线 shuffle,使生产者与消费者阶段可同时运行,而非等待前一阶段完成。PipelinedShuffleDependency 让消费者在生产者仍在运行时开始读取,调度器将相关阶段视为流水线组,一起调度、一起失败。文章指出,这些是通用 Spark 引擎能力,不仅服务于实时模式,长期可为其他需要突破逐阶段执行模型的工作负载奠定基础。

小数据单任务免 shuffle 执行降低探索开销

Project Feather 针对小数据集上反复运行和检查代码的场景,推出可选的单任务免 shuffle 执行。当扫描输出已在一个分区时,符合条件的聚合、去重、窗口、排序和限制等操作可省略 Exchange,避免不必要的 shuffle。默认条件下,合格文件扫描读取单个非空小文件,本地内存关系最多 1000 行。该优化和 Arrow 原生缓存均需手动开启,更广泛的本地重分区工作留待下一版本。

Auto CDC 支持 SCD Type 2,但目标表连接器有限制

Auto CDC 新增端到端 SCD Type 2 支持,通过 __START_AT 和 __END_AT 元数据列保留每条记录的历史版本,适用于需要追溯历史状态的报表、审计和分析。该功能可通过 Python、SQL 和 Spark Connect 使用。但文章提醒,Auto CDC 使用 MERGE 将每个微批应用到目标表,因此目标表必须位于实现了 Data Source V2 行级操作的目录中,Parquet 等内置文件格式不符合条件,Iceberg 是常见选择。

❓

Q&A

Spark 4.3 在有状态实时处理方面有哪些新特性?

Spark 4.3 将状态处理引入 Real-Time Mode,支持流聚合、dropDuplicates 去重以及 Scala/Java 的 transformWithState 自定义状态处理。三项代表性有状态基准测试的 P99 端到端延迟均低于 150 毫秒,使开发者无需为低延迟单独引入流处理引擎。

Spark 4.3 如何实现持续数据流?对执行引擎做了哪些改动?

Spark 4.3 引入原生并发阶段调度和流水线 shuffle(Streaming Shuffle),新增 PipelinedShuffleDependency,允许消费者在生产者仍在运行时开始读取数据。调度器将相关阶段视为流水线组,一起调度、一起失败,从而支持长时间运行的流任务之间持续传输数据。

Project Feather 是什么?它如何加速小数据开发?

Project Feather 针对小数据集上固定执行开销过高的问题,在 Spark 4.3 中引入可选的免 shuffle 单任务执行:当扫描输出已在一个分区时,符合条件的查询可省略不必要的 Exchange。默认情况下,合格文件扫描读取单个非空小文件,本地内存关系最多 1000 行,支持聚合、去重、窗口、排序和限制等查询形状。还新增可选的 Arrow 原生 Dataset 缓存。

Auto CDC 的 SCD Type 2 支持能做什么?使用时有什么限制?

Spark 4.3 为 Auto CDC 增加端到端 SCD Type 2 支持,可追踪每条记录的历史而非覆盖最新值,通过 __START_AT 和 __END_AT 标记有效期,支持 Python、SQL 和 Spark Connect。限制是目标表必须位于实现了 Data Source V2 行级操作的目录连接器中,Parquet 等内置文件格式不符合,常见选择是 Iceberg。

Spark 4.3 在 Spark Connect 方面增强了哪些能力?

Spark 4.3 为 Spark Connect 增加会话和操作可见性,提供 REST 端点列出和检查 Connect 会话与操作,并引入操作 ID 以便跨客户端和服务器追踪执行。还新增 DataFrame.zip、SCD Type 2 Auto CDC、纳秒时间戳类型和字面量等 API 覆盖,JDBC 驱动支持 ARRAY、MAP、STRUCT 结果及更丰富的元数据。

Spark 4.3 新增了哪些 SQL 功能来处理半结构化数据和时序分析?

Spark 4.3 新增 JSON_TABLE 用于数组展开和类型化字段提取,VARIANT 转换支持更新或删除字段;引入 ASOF JOIN(预览功能)直接表达时序匹配,替代手写范围连接加排名;还提供可选的纳秒时间戳预览,支持 TIMESTAMP_NTZ(p) 和 TIMESTAMP_LTZ(p) 精度 7 到 9,并新增 timestamp_nanos 和 unix_nanos 函数。

Spark 4.3 的发布节奏有什么变化?

Spark 4.3 标志着季度功能发布节奏的开始,从每六个月一次改为每三个月一次。更短的周期让已完成的改进更快到达用户手中,也让社区有更频繁的机会提供反馈并影响后续方向。

🏷️

标签

➡️

继续阅读