Spark 发布 3.4.0

Apache Spark 3.4.0 是 3.x 系列的第五个版本。在开源社区的巨大贡献下,此版本解决了超过 2,600 个 Jira 问题。

此版本引入了 Spark Connect 的 Python 客户端,通过异步进度跟踪和 Python 任意有状态处理增强了 Structured Streaming,增加了 Pandas API 覆盖范围并提供了 NumPy 输入支持,通过改进 ANSI 合规性并实现数十个新的内置函数来简化从传统数据仓库的迁移,并通过内存分析提升了开发效率和可调试性。

要下载 Apache Spark 3.4.0,请访问下载页面。您可以查阅 JIRA 以获取详细更改。我们在此整理了一份高级别的更改列表,按主要模块分组。

亮点

  • Spark Connect 的 Python 客户端 (SPARK-39375)
  • 实现在表列中支持 DEFAULT 值 (SPARK-38334)
  • 支持 TIMESTAMP WITHOUT TIMEZONE 数据类型 (SPARK-35662)
  • 支持“侧向列别名引用”(Lateral Column Alias References)(SPARK-27561)
  • 强化错误类别的 SQLSTATE 使用 (SPARK-41994)
  • 默认启用布隆过滤器连接(Bloom filter Joins)(SPARK-38841)
  • 大型应用程序的 Spark UI 更好的可扩展性和 Driver 稳定性 (SPARK-41053)
  • Structured Streaming 中的异步进度跟踪 (SPARK-39591)
  • Structured Streaming 中的 Python 任意有状态处理 (SPARK-40434)
  • Pandas API 覆盖范围改进 (SPARK-42882) 和 PySpark 中的 NumPy 输入支持 (SPARK-39405)
  • 为 PySpark 用户定义函数提供内存分析器 (SPARK-40281)
  • 实现 PyTorch 分布器 (SPARK-41589)
  • 发布 SBOM 工件 (SPARK-41893)
  • 支持仅 IPv6 环境 (SPARK-39457)
  • 自定义 K8s 调度器 (Apache YuniKorn 和 Volcano) GA (SPARK-42802)

Spark SQL

特性

ANSI 合规性

  • ANSI SQL 模式:对映射列的无效访问始终返回 null (SPARK-40066)
  • 支持双引号标识符 (SPARK-40585)
  • ANSI SQL 模式:Round/Bround 在整数溢出时应返回错误 (SPARK-42045)
  • 支持将整数转换为 ANSI 区间 (SPARK-40008)
  • 支持将小数转换为 ANSI 区间 (SPARK-40014)
  • 从百分位数函数返回更宽的 ANSI 区间类型 (SPARK-40151)
  • 支持将 ANSI 区间转换为小数 (SPARK-39470)
  • 在 ANSI 模式下支持将区间转换为整数 (SPARK-39451)
  • 强化错误类别的 SQLSTATE 使用 (SPARK-41994)

函数

数据源

  • DS v2 中支持列统计信息 (SPARK-41378)
  • DS v2 中的存储分区连接 (SPJ) (SPARK-37375)
  • DS v2 中的行级操作 (SPARK-35801)
  • 为 DS v2 扫描添加 SupportsReportOrdering 混入接口 (SPARK-38647)
  • CSV 模式推断时推断 DATE 类型 (SPARK-39469)
  • DS v2 自定义度量 API 中支持 Driver 度量 (SPARK-39635)
  • 写入时 DS v2 函数的分发和排序支持 (SPARK-39607)
  • StringEndsWith/Contains 支持下推到 Parquet,以便我们可以利用字典过滤器 (SPARK-39002)
  • Spark Parquet 向量化读取器中支持 UDT (SPARK-39086)
  • 扩展 METADATA 列以支持 Parquet 文件的行索引 (SPARK-37980)
  • 支持读取 parquet FIXED_LEN_BYTE_ARRAY 类型 (SPARK-41096)
  • 优化过滤谓词的顺序 (SPARK-40045)
  • 支持带 MSSQL JDBC 的 CTE 和临时表查询 (SPARK-37259)
  • 数据源选项中支持 ignoreCorruptFiles 和 ignoreMissingFiles (SPARK-38767)
  • 将 v1 写入拉出到 WriteFiles (SPARK-41407)
  • 添加读取端字符填充以覆盖外部数据文件 (SPARK-40697)

查询优化

  • 合并非相关标量子查询 (SPARK-34079)
  • 默认启用布隆过滤器连接(Bloom filter Joins)(SPARK-38841)
  • 通过 distinctKeys 删除聚合表达式中不必要的 distinct (SPARK-38832)
  • 支持去重 CTE 的谓词下推和列裁剪 (SPARK-37670)
  • 如果聚合函数在流侧是去重无关的,则移除外连接 (SPARK-38886)
  • 如果只选择了左/右侧列且另一侧的连接键是唯一的,则移除左/右外连接 (SPARK-39172)
  • 优化全局排序到 RepartitionByExpression (SPARK-39911)
  • 优化 TransposeWindow 规则 (SPARK-38034)
  • 增强 EliminateSorts 以支持通过 LocalLimit 删除排序 (SPARK-40050)
  • 如果连接条件为空,则将本地限制推送到两侧 (SPARK-40040)
  • 为优化器添加 PushProjectionThroughLimit (SPARK-40501)
  • 支持带连接子级的 PIVOT/UNPIVOT (SPARK-41195)
  • 支持带多个非确定性过滤器的列裁剪 (SPARK-41017)
  • 通过 AQE 缓存改进输出分区和排序 (SPARK-41048)
  • 通过创建平衡表达式树谓词来改进多重 Like 性能 (SPARK-41167)
  • 如果排序是 RepartitionByExpression 的子级,则移除该排序 (SPARK-36703)
  • 使用已完成查询阶段的可用列统计信息 (SPARK-39991)
  • 在 WindowSpecDefinition 中重用表达式 (SPARK-41805)
  • 改进 AliasAwareOutputPartitioning 和 AliasAwareQueryOutputOrdering 以考虑所有别名 (SPARK-40086, SPARK-42049)
  • 通过 Python UDF 下推限制 (SPARK-42115)

代码生成与查询执行

  • 使 BroadcastNestedLoopJoinExec 中的 defaultJoin 并行运行 (SPARK-40487)
  • HiveGenericUDF 的 Codegen 支持 (SPARK-42051)
  • 在 SinglePartition 上引入 shuffle (SPARK-41986)
  • 使 DPP 支持剪枝侧有 Union (SPARK-39217)

其他值得注意的更改

  • 支持自动分区统计信息收集 (SPARK-38573)
  • Thrift Server 中格式化错误消息 (SPARK-40098)
  • 添加扩展 API 以进行缓存的计划规范化 (SPARK-41183)
  • 通过引入物理类型重构 Spark 类型 (SPARK-41226)
  • OneOf 字段支持和递归检查 (SPARK-41396)
  • 集中列解析逻辑 (SPARK-41405)
  • 改进计划更改验证 (SPARK-42081)
  • 引入 SparkPath 以实现类型安全 (SPARK-41970)
  • 通过 Dataset API 创建临时视图时,对 db_name.view_name 抛出异常 (SPARK-41090)
  • 将 Mask 函数参数的默认值从 -1 更改为 NULL (SPARK-42070)

Spark Core

退役

  • 如果 shuffle 数据已迁移,避免在退役执行器丢失时进行不必要的任务重试 (SPARK-41469)
  • 忽略由退役执行器引起的分阶段获取失败 (SPARK-40481)
  • 默认启用 spark.storage.decommission.(rdd shuffle)Blocks.enabled (SPARK-40198)
  • 当 ESS 禁用时,添加对 YARN 退役的支持 (SPARK-30835)

调度器

  • 使阶段调度支持 local-cluster 模式 (SPARK-41949)
  • 当动态分配禁用时,在独立集群中支持阶段级任务资源配置文件 (SPARK-39853)
  • 延迟 onDisconnected 以使 Driver 接收 ExecutorExitCode (SPARK-39957)
  • 通过阶段任务度量改进推测执行 (SPARK-32170)
  • 为独立集群添加阶段级资源调度支持 (SPARK-39062)
  • 改进 LaunchTask 流程以避免由于无法发送 LaunchTask 消息而导致的 Stage 失败 (SPARK-39955)

Shuffle

  • 添加基于推送的 Shuffle 客户端读取度量 (SPARK-36620)
  • 基于推送的 shuffle 的 shuffle 服务器端度量 (​​SPARK-33573)
  • 确保 mergedShuffleCleaner 在数据库关闭前已关闭 (SPARK-40186)
  • 为 shuffle 服务状态存储添加 RocksDB 支持 (SPARK-38888)
  • 将用于存储远程/外部 shuffle 状态的 LevelDB 封装为 DB (SPARK-38909)
  • 默认启用 spark.dynamicAllocation.shuffleTracking.enabled (SPARK-3984)
  • 启用基于推送的 shuffle 服务将状态存储在 NM 级 DB 中以实现工作保留重启 (SPARK-33236)
  • 使用 shuffle 服务删除已释放执行器的 shuffle 块 (SPARK-37618)

其他值得注意的更改

  • 支持仅 IPv6 环境 (SPARK-39457)
  • 默认启用 spark.kryo.unsafe (SPARK-42137)
  • 在集群模式下,代理用户不允许任意自定义类路径 (SPARK-41958)
  • 如果执行器已丢失,避免 BlockManager 重新注册 (SPARK-41360)
  • 移除单任务结果必须适合 2GB 的限制 (SPARK-40622)
  • 移除对已弃用 spark.akka.* 配置的支持 (SPARK-40401)
  • 将默认日志记录更改为 stderr,与 log4j 的行为一致 (SPARK-40406)
  • 计算结果大小时排除 DirectTaskResult 元数据 (SPARK-40261)
  • 允许自定义 take() 行为中的初始分区数量 (SPARK-40211)
  • 在 Executor.updateDependencies() 中使用可中断锁而不是 synchronized (SPARK-40235)
  • 任务失败应始终触发任务失败监听器 (SPARK-40106)
  • 添加选择性禁用监视或轮询的功能 (SPARK-36462)
  • 不要在驱动程序上缓存未序列化的广播关系 (SPARK-39983)
  • 修复 TaskMemoryManager 和 UnsafeExternalSorter.SpillableIterator 之间的死锁 (SPARK-39283)
  • 将阶段中的分区数量暴露给 TaskContext (SPARK-38679)
  • 使内存开销因子可配置 (SPARK-38194)
  • 避免在 ShellBasedGroupsMappingProvider 中使用 bash -c (SPARK-38992)

Structured Streaming

主要特性

  • 异步进度跟踪 (SPARK-39591)
  • Structured Streaming 中的 Python 任意有状态处理 (SPARK-40434)
  • Structured Streaming 中的 Protobuf 支持 (SPARK-40653)
  • 修复后期记录过滤以支持有状态运算符的链式处理 (SPARK-40925)

其他值得注意的更改

  • 引入基于 Hadoop Abortable 接口的流式检查点文件管理器 (SPARK-40039)
  • 弃用 Trigger.Once 并推广 Trigger.AvailableNow (SPARK-39805)
  • 将目录表信息暴露给流式查询中的逻辑计划 (SPARK-39564)
  • 支持从流式接收器收集度量 (SPARK-38564)
  • 弃用 DStream API (SPARK-42075)
  • 翻转 Kafka 偏移量获取配置的默认值 (SPARK-40844)
  • 在 PySpark 的 foreachBatch 接收器中,为用户函数中的 DataFrame 提供克隆的 spark 会话 (SPARK-41379)

Spark Connect

Python 客户端

Scala 客户端

PySpark

Spark 上的 Pandas API

其他值得注意的更改

MLLIB

SparkR

实时 UI 和历史服务器服务

  • 大型应用程序的 Spark UI 更好的可扩展性和 Driver 稳定性 (SPARK-41053)
  • 默认使用 RocksDB 作为 spark.history.store.hybridStore.diskBackend (SPARK-42277)
  • 将嵌套执行分组到根执行下 (SPARK-41752)
  • 在环境选项卡中显示度量属性 (SPARK-39110)
  • 修复 StagePage 输入大小/记录在记录大于零时不显示的问题 (SPARK-34777)
  • 通过使用 Jackson 而不是 Json4s 提高事件日志记录 JsonProtocol 性能 (SPARK-39489)
  • 支持 spark.history.fs.update.batchSize (SPARK-39225)

构建

致谢

最后但同样重要的是,没有以下贡献者的努力,本次发布是不可能实现的:Abhishek Dixit, Abu Bakr Siddiq, Adam Binford, Ahmed Mahran, Aimilios Tsouvelekakis, Ait Zeouay Amrane, Aki Sukegawa, Ala Luszczak, Alex Balikov, Alkis Evlogimenos, Allan Folting, Allison Portis, Allison Wang, Andrew Ray, Andy Grove, Andy Lam, Anish Shrigondekar, Ankit Prakash Gupta, Anton Ippolitov, Anton Okolnychyi, Aravind Patnam, Artsiom Yudovin, Arvin Zheng, Attila Zsolt Piros, Austin Wang, Ben Zhang, Bjorn Jorgensen, Bjørn Jørgensen, Bo Zhang, Bobby Wang, Brandon Dahler, Brennan Stein, Brian Schaefer, Brian Yue, Bruce Robbins, Carmen Kwan, Chandni Singh, Chao Sun, Chaoqin Li, Cheng Pan, Cheng Su, Chenhao Li, Chris Nauroth, Daniel Davies, Daniel Fiterman, Daniel Ranchal Parrado, Daniel Tenedorio, David Lewis, Dch Nguyen, Deepyaman Datta, Dennis Huo, Deshan Xiao, Desmond Cheong, Dongjoon Hyun, Dustin William Smith, ELHoussineT, Emil Ejbyfeldt, Enrico Minack, Erik Krogen, Eugene-Mark, Frank Yin, Fred Liu, Fredrik Mile, Fu Chen, Furcy Pin, Gabor Roczei, Gautham Banasandra, Gengliang Wang, Gidon Gershinsky, Guangxin Wang, Haejoon Lee, Hai Tao, Herman Van Hovell, Hisoka-X, Holden Karau, Huanli Wang, Hui An, Hyukjin Kwon, Immanuel Buder, Ismaël Mejía, Ivan Sadikov, Jack Chen, Jatin Sharma, Jeffrey Chen, Jelmer Kuperus, Jerry Peng, Jiaan Geng, JiexingLi, Johan Lasperas, John Caveman, John Zhuge, Jonathan Cui, Josh Rosen, Jove Yuan, Juliusz Sompolski, Jungtaek Lim, Kai-Hsun Chen, Kapil Kumar Singh, Karen Feng, Karuppayya Rajendran, Kazuaki Ishizaki, Kazuyuki Tanimura, Kelvin Jiang, Kent Yao, Keunhyun Oh, Khaled Hammouda, Khalid Mammadov, Kian Eliasi, Kimahriman, Kris Mok, Kumar, Pralabh, Kun Wan, Lee Yang, Liang-Chi Hsieh, Lingyun Yuan, Linhong Liu, Lorenzo Martini, LorenzoMartini, Luca Canali, Maciej Szymkiewicz, Manu Zhang, Mark Khaitman, Martin Grund, Martin Tzvetanov Grigorov, Maryann Xue, Max Gekk, Maya Anderson, Minchu Yang, Mridul Muralidharan, NarekDW, Nicholas Chammas, Niranjan Jayakar, Ole Sasse, Oleksiy Dyagilev, PJ Fanning, Peter Toth, Prashant Singh, Raghu Angadi, Rakesh Raushan, Reynold Xin, Rithwik Ediga Lakhamsani, Robert (Bobby) Evans, Rui Wang, Ruifeng Zheng, Runyao Chen, Ryan Johnson, Sandeep Katta, Sandeep Singh, SandishKumarHN, Santosh Pingale, Sean Owen, Serge Rielau, Shaoyun Chen, Shardul Mahadik, Shiqi Sun, Shixiong Zhu, Shrikant Prasad, Shuyou Dong, Stefaan Lippens, Steve Loughran, Steven Aerts, Sumeet Gajjar, Supun Nakandala, Swaminathan Balachandran, Takuya Ueshin, Tanel Kiis, Ted Yu, Tengfei Huang, Thejdeep Gudivada, Tobias Stadler, Tom Van Bussel, Tristan Nixon, Venki Korukanti, Vinod KC, Vitalii Li, Vivek Atal, Warren Zhu, Wei Liu, Weichen Xu, Weiwei Yang, Wenchen Fan, Wenli Looi, Wilfred Spiegelenburg, William Hyun, William Zijie, WolverineJiang, Xiduo You, Xing Lin, Xingbo Jiang, Xingchao, Zhang, Xinrong Meng, Xinyi Yu, XiuLi Wei, Yan Wei, Yang Jie, Yaohua628, Ye Zhou, Yi Wu, Yi Zhu, Yikf, Yikun Jiang, Yubi Lee, Yuming Wang, Zach Schuermann, Zhen Li, Zhen Wang, Zhiming She, Ziqi Liu, awdavidson, beobest2, bjornjorgensen, bzhaoopenstack, carlfu-db, cashmand, chenzhx, constzhou, dcoliversun, dengziming, fanyilun, fred-db, ganeshchand, gaoyajun02, guanziyue, harupy, huangxiaopingRD, huaxingao, idealspark, jackylee-ch, jiang13021, jiaoqingbo, khalidmammadov, kuwii, leesf, lvshaokang, lw33, mattshma, mcdull-zhang, minyyy, moritzkoerber, morvenhuang, mridulm, nyingping, panbingkun, philwalk, pralabhkumar, qiuliang988, santosh-d3vpl3x, seunggabi, smallzhongfeng, sus, thyecust, toujours33, uchiiii, utkarsh39, vicennial, wangshengjie123, wankunde, wayneguow, wecharyu, weiyuyilia, wineternity, wzx140, xiaonanyang-db, xiuzhu9527, yabola, yikf, zekai-li, zhangbutao, zheniantoushipashi, zhixingheyi-tian, zhouyifan279, zwangsheng, zzzzming95


Spark 新闻存档

最新新闻

存档