Spark 3.4.0 版本

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

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

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

亮点

Spark SQL

特性

ANSI 兼容性

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

函数

数据源

  • 支持 DS v2 中的列统计信息 (SPARK-41378)
  • DS v2 中的存储分区连接 (SPJ) (SPARK-37375)
  • DS v2 中的行级操作 (SPARK-35801)
  • 为 DS v2 Scan 添加 SupportsReportOrdering 混合接口 (SPARK-38647)
  • 推断 CSV 模式推断的 DATE 类型 (SPARK-39469)
  • 支持 DS v2 自定义指标 API 中的驱动程序指标 (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)
  • 添加读取端 char 填充以覆盖外部数据文件 (SPARK-40697)

查询优化

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

代码生成和查询执行

其他值得注意的更改

  • 支持自动分区统计信息收集 (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)
  • 确保在db关闭之前已关闭mergedShuffleCleaner (SPARK-40186)
  • 为shuffle服务状态存储添加RocksDB支持 (SPARK-38888)
  • 封装用于将远程/外部shuffle状态存储为DB的LevelDB (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)

结构化流

主要特性

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

其他值得注意的更改

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

Spark Connect

Python客户端

Scala客户端

PySpark

Spark上的Pandas API

其他值得注意的更改

MLLIB

SparkR

Live UI 和 History Server 服务

  • 针对大型应用程序,更好的 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 新闻存档

最新消息

存档