Spark 3.0.0 版本发布

Apache Spark 3.0.0 是 3.x 系列的第一个版本。 该投票于 2020 年 6 月 10 日通过。此版本基于 git tag v3.0.0,其中包括截至 6 月 10 日的所有提交。 Apache Spark 3.0 基于 Spark 2.x 的许多创新,带来了新思路,并继续开发长期项目。 在开源社区的巨大贡献的帮助下,此版本解决了 3400 多个问题,这是超过 440 名贡献者的贡献的结果。

今年是 Spark 作为开源项目的 10 周年纪念。 自 2010 年首次发布以来,Spark 已发展成为最活跃的开源项目之一。 如今,Spark 是大数据处理、数据科学、机器学习和数据分析工作负载的事实上的统一引擎。

Spark SQL 是此版本中最活跃的组件。 46% 的已解决问题是针对 Spark SQL 的。 这些增强功能使所有更高级别的库受益,包括结构化流和 MLlib,以及更高级别的 API,包括 SQL 和 DataFrames。 此版本中添加了各种相关的优化。 在 TPC-DS 30TB 基准测试中,Spark 3.0 比 Spark 2.4 快大约两倍。

Python 现在是 Spark 上使用最广泛的语言。 PySpark 在 Python 包索引 PyPI 上的每月下载量超过 500 万次。 此版本改进了其功能和可用性,包括使用 Python 类型提示重新设计的 pandas UDF API、新的 pandas UDF 类型以及更 Pythonic 的错误处理。

以下是 Spark 3.0 中的功能亮点:自适应查询执行;动态分区裁剪; ANSI SQL 合规性; pandas API 的显着改进; 结构化流的新 UI; 调用 R 用户定义函数的提速高达 40 倍; 加速器感知调度器; 和 SQL 参考文档。

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

Core, Spark SQL, Structured Streaming(核心、Spark SQL、结构化流)

亮点

性能增强

SQL 兼容性增强

  • 切换到普罗列期格里高利历 (SPARK-26651)
  • 构建 Spark 自己的日期时间模式定义 (SPARK-31408)
  • 为表插入引入 ANSI 存储分配策略 (SPARK-28495)
  • 默认情况下,在表插入中遵循 ANSI 存储分配规则 (SPARK-28885)
  • 添加 SQLConf spark.sql.ansi.enabled (SPARK-28989)
  • 支持聚合表达式的 ANSI SQL 筛选子句 (SPARK-27986)
  • 支持 ANSI SQL OVERLAY 函数 (SPARK-28077)
  • 支持 ANSI 嵌套括号注释 (SPARK-28880)
  • 对整数的溢出抛出异常 (SPARK-26218)
  • 间隔算术运算的溢出检查 (SPARK-30341)
  • 当无效字符串转换为数字类型时抛出异常 (SPARK-30292)
  • 使间隔乘法和除法的溢出行为与其他操作一致 (SPARK-30919)
  • 为 char 和 decimal 添加 ANSI 类型别名 (SPARK-29941)
  • SQL Parser 定义了符合 ANSI 的保留关键字 (SPARK-26215)
  • 当 ANSI 模式开启时,禁止将保留关键字作为标识符 (SPARK-26976)
  • 支持 ANSI SQL: LIKE … ESCAPE 语法 (SPARK-28083)
  • 支持 ANSI SQL Boolean-Predicate 语法 (SPARK-27924)
  • 更好地支持相关子查询处理 (SPARK-18455)

PySpark 增强

  • 使用类型提示重新设计的 pandas UDF (SPARK-28264)
  • 允许 Pandas UDF 接受 pd.DataFrames 的迭代器 (SPARK-26412)
  • 支持 StructType 作为 Scalar Pandas UDF 的参数和返回类型 (SPARK-27240 )
  • 通过 Pandas UDF 支持 Dataframe Cogroup (SPARK-27463)
  • 添加 mapInPandas 以允许 DataFrames 的迭代器 (SPARK-28198)
  • 某些 SQL 函数也应将列名作为参数 (SPARK-26979)
  • 使 PySpark SQL 异常更具 Pythonic 特性 (SPARK-31849)

可扩展性增强

  • 目录插件 API (SPARK-31121)
  • 数据源 V2 API 重构 (SPARK-25390)
  • Hive 3.0 和 3.1 元存储支持 (SPARK-27970, SPARK-24360)
  • 将 Spark 插件接口扩展到驱动程序 (SPARK-29396)
  • 使用执行程序插件使用用户定义的指标扩展 Spark 指标系统 (SPARK-28091)
  • 用于扩展柱状处理支持的开发者 API (SPARK-27396)
  • 使用 DSV2 的内置源迁移:parquet、ORC、CSV、JSON、Kafka、Text、Avro (SPARK-27589)
  • 允许在 SparkExtensions 中进行 FunctionInjection (SPARK-25560)

连接器增强

  • 支持高性能 S3A 提交器 (SPARK-23977)
  • 通过非确定性表达式进行列裁剪 (SPARK-29768)
  • 在数据源表中支持 spark.sql.statistics.fallBackToHdfs (SPARK-25474)
  • 允许在文件源上使用子查询过滤器进行分区裁剪 (SPARK-26893)
  • 避免在数据源过滤器中下推子查询 (SPARK-25482)
  • 从文件源递归加载数据 (SPARK-27990)
  • Parquet/ORC
  • CSV
    • 支持 CSV 数据源中的过滤器下推 (SPARK-30323)
  • Hive Serde
    • 使用本机数据源读取 Hive serde 表时,不进行模式推断 (SPARK-27119)
    • Hive CTAS 命令如果可以转换,应该使用数据源 (SPARK-25271)
    • 使用原生数据源来优化插入分区 Hive 表 (SPARK-28573)
  • Kafka
    • 添加对 Kafka 消息头的支持 (SPARK-23539)
    • 添加 Kafka delegation token 支持 (SPARK-25501)
    • 为 Kafka 数据源引入新选项:按时间戳 (起始/结束) 偏移 (SPARK-26848)
    • 支持 Kafka 批处理数据源和 streaming source v1 中的 “minPartitions” 选项 (SPARK-30656)
    • 将 Kafka 升级到 2.4.1 (SPARK-31126)
  • 新的内置数据源

特性增强

监控和调试增强

  • 新的 Structured Streaming UI (SPARK-29543)
  • SHS: 允许为正在运行的流式应用程序滚动事件日志 (SPARK-28594)
  • SHS 中的 JDBC 选项卡 (SPARK-29724, SPARK-29726)
  • 添加一个 API,允许用户定义和观察批处理和流式查询的任意指标 (SPARK-29345)
  • 用于跟踪每个查询计划时间的 Instrumentation (SPARK-26129)
  • 将基本 shuffle 指标放入 SQL exchange 操作符中 (SPARK-26139)
  • SQL 语句显示在 SQL 选项卡中,而不是 callsite (SPARK-27045)
  • 向 SparkUI 添加工具提示 (SPARK-29449)
  • 提高 History Server 的并发性能 (SPARK-29043)
  • EXPLAIN FORMATTED 命令 (SPARK-27395)
  • 支持将截断的计划和生成的代码转储到文件 (SPARK-26023)
  • 增强 describe 框架以描述查询的输出 (SPARK-26982)
  • 添加 SHOW VIEWS 命令 (SPARK-31113)
  • 改进 SQL parser 的错误消息 (SPARK-27901)
  • 原生支持 Prometheus 监控 (SPARK-29429)
  • 将 executor 内存指标添加到 heartbeat 并在 executors REST API 中公开 (SPARK-23429)
  • 将 Executor 指标和内存使用情况 instrumentation 添加到指标系统 (SPARK-27189)

文档和测试覆盖率增强

Kubernetes 中的原生 Spark App

  • 支持用户指定的 driver 和 executor pod 模板 (SPARK-24434)
  • 允许在没有外部 shuffle 服务的情况下进行动态分配 (SPARK-27963)
  • 使用 K8S 更快速响应的动态分配 (SPARK-28487)
  • Spark on K8S 的 Kerberos 支持 (SPARK-23257)
  • Kubernetes 资源管理器中的 Kerberos 支持 (Client Mode) (SPARK-25815)
  • 支持带有 Hadoop 兼容文件系统的客户端依赖项 (SPARK-23153)
  • 在 k8s 后端添加可配置的 auth secret source (SPARK-26239)
  • 支持使用 Kubernetes 进行子路径挂载 (SPARK-25960)
  • 使 Python 3 成为 K8S 的 PySpark 绑定的默认设置 (SPARK-24516)

其他值得注意的更改

  • Java 11 支持 (SPARK-24417)
  • Hadoop 3 支持 (SPARK-23534)
  • 内置 Hive 执行从 1.2.1 升级到 2.3.7 (SPARK-23710, SPARK-28723, SPARK-31381)
  • 默认情况下使用 Apache Hive 2.3 依赖项 (SPARK-30034)
  • GA Scala 2.12 并删除 2.11 (SPARK-26132)
  • 改进动态分配中 executors 超时的逻辑 (SPARK-20286)
  • shuffle 服务提供的磁盘持久化 RDD blocks,并在动态分配中被忽略 (SPARK-27677)
  • 获取新的 executors 以避免由于黑名单导致的挂起 (SPARK-22148)
  • 允许共享 Netty 的内存池分配器 (SPARK-24920)
  • 修复 TaskMemoryManager 和 UnsafeExternalSorter$SpillableIterator 之间的死锁 (SPARK-27338)
  • 为 StructuredStreaming 引入 AdmissionControl API (SPARK-30669)
  • Spark History Main page 性能改进 (SPARK-25973)
  • 加速和精简 SQL listener 中的指标聚合 (SPARK-29562)
  • 当从同一主机获取 shuffle blocks 时避免网络传输 (SPARK-27651)
  • 改进 DistributedFileSystem 的文件列表 (SPARK-27801)
  • 移除对 hadoop 2.6 的支持 (SPARK-25016)

行为变更

请阅读每个组件的迁移指南:Spark Core, Spark SQL, Structured StreamingPySpark.

迁移指南中遗漏的一些其他行为变更

  • 在 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.Continuousorg.apache.spark.sql.execution.streaming.OneTimeTrigger 已被隐藏,取而代之的是 Trigger.Once。 (SPARK-28199)
  • 由于 Scala 2.12 的升级,DataStreamWriter.foreachBatch 与 Scala 程序不具有源代码兼容性。 您需要更新您的 Scala 源代码以消除 Scala 函数和 Java lambda 之间的歧义。 (SPARK-26132)

编程指南:Spark RDD 编程指南Spark SQL、DataFrames 和 Datasets 指南Structured Streaming 编程指南

MLlib

亮点

行为变更

请阅读 迁移指南 了解详细信息。

迁移指南中遗漏的一些其他行为变更

  • 在 Spark 3.0 中,Pyspark 中的多类 logistic 回归现在将(正确地)返回 LogisticRegressionSummary,而不是子类 BinaryLogisticRegressionSummary。BinaryLogisticRegressionSummary 公开的附加方法在这种情况下无论如何都不会起作用。 (SPARK-31681)
  • 在 Spark 3.0 中,pyspark.ml.param.shared.Has* mixins 不再提供任何 set*(self, value) setter 方法,请改用相应的 self.set(self._, value)。有关详细信息,请参见 SPARK-29093。(SPARK-29093)

编程指南:机器学习库 (MLlib) 指南

SparkR

  • SparkR 互操作性中的 Arrow 优化 (SPARK-26759)
    • 通过矢量化的 R gapply()、dapply()、createDataFrame、collect() 增强性能
  • R shell、IDE 的“eager execution” (SPARK-24572)
  • Power Iteration Clustering 的 R API (SPARK-19827)

行为变更

请阅读 迁移指南 了解详细信息。

编程指南:SparkR (R on Spark)

GraphX

编程指南:GraphX 编程指南

弃用

已知问题

  • 使用 dropDuplicates 运算符的流式查询可能无法使用 Spark 2.x 编写的检查点重新启动。这将在 Spark 3.0.1 中修复。(SPARK-31990)
  • 在 Web UI 中,作业列表页面可能会挂起超过 40 秒。这将在 Spark 3.0.1 中修复。(SPARK-31967)
  • 为 JDK9+ 上的 Arrow 设置 io.netty.tryReflectionSetAccessible (SPARK-29923)
  • 随着 AWS SDK 升级到 1.11.655,我们强烈建议在 Hadoop 2.7.3 上使用 S3N 文件系统(基于 jets3t 库的开源 NativeS3FileSystem)的用户升级以使用 AWS Signature V4 并设置存储桶端点或迁移到 S3A(“s3a://”前缀)- jets3t 库默认使用 AWS v2 并使用 s3.amazonaws.com 作为端点。否则,在以下情况下可能会抛出 403 Forbidden 错误
    • 如果用户访问包含“+”字符的 S3 路径并使用旧版 S3N 文件系统,例如 s3n://bucket/path/+file。
    • 如果用户已配置 AWS V2 签名以使用 S3N 文件系统对 S3 请求进行签名。

    请注意,如果您使用 S3AFileSystem,例如(“s3a://bucket/path”)在 S3Select 或 SQS 连接器中访问 S3,那么一切都将按预期工作。(SPARK-30968)

  • 如果缺少 year 字段,则使用模式字母“D”解析一年中的某一天会返回错误的结果。这可能会发生在 SQL 函数中,例如 to_timestamp,它使用模式字符串将 datetime 字符串解析为 datetime 值。这将在 Spark 3.0.1 中修复。(SPARK-31939)
  • 如果键具有值 -0.0 和 0.0,则子查询内部的 Join/Window/Aggregate 可能会导致错误的结果。这将在 Spark 3.0.1 中修复。(SPARK-31958)
  • 窗口查询可能会意外失败并显示模棱两可的自连接错误。这将在 Spark 3.0.1 中修复。(SPARK-31956)

致谢

最后但并非最不重要的是,如果没有以下贡献者,此版本是不可能实现的:Aaruna Godthi, Adam Binford, Adi Muraru, Adrian Tanase, Ajith S, Akshat Bordia, Ala Luszczak, Aleksandr Kashkirov, Alessandro Bellina, Alex Hagerman, Ali Afroozeh, Ali Smesseim, Alon Doron, Aman Omer, Anastasios Zouzias, Anca Sarb, Andre Sa De Mello, Andrew Crosby, Andy Grove, Andy Zhang, Ankit Raj Boudh, Ankur Gupta, Anton Kirillov, Anton Okolnychyi, Anton Yanchenko, Artem Kalchenko, Artem Kupchinskiy, Artsiom Yudovin, Arun Mahadevan, Arun Pandian, Asaf Levy, Attila Zsolt Piros, Bago Amirbekian, Baohe Zhang, Bartosz Konieczny, Behroz Sikander, Ben Ryves, Bo Hai, Bogdan Ghit, Boris Boutkov, Boris Shminke, Branden Smith, Brandon Krieger, Brian Scannell, Brooke Wenig, Bruce Robbins, Bryan Cutler, Burak Yavuz, Carson Wang, Chaerim Yeo, Chakravarthi, Chandni Singh, Chandu Kavar, Chaoqun Li, Chen Hao, Cheng Lian, Chenxiao Mao, Chitral Verma, Chris Martin, Chris Zhao, Christian Clauss, Christian Stuart, Cody Koeninger, Colin Ma, Cong Du, DB Tsai, Dang Minh Dung, Daoyuan Wang, Darcy Shen, Darren Tirto, Dave DeCaprio, David Lewis, David Lindelof, David Navas, David Toneian, David Vogelbacher, David Vrba, David Yang, Deepyaman Datta, Devaraj K, Dhruve Ashar, Dianjun Ma, Dilip Biswal, Dima Kamalov, Dongdong Hong, Dongjoon Hyun, Dooyoung Hwang, Douglas R Colkitt, Drew Robb, Dylan Guedes, Edgar Rodriguez, Edwina Lu, Emil Sandsto, Enrico Minack, Eren Avsarogullari, Eric Chang, Eric Liang, Eric Meisel, Eric Wu, Erik Christiansen, Erik Erlandson, Eyal Zituny, Fei Wang, Felix Cheung, Fokko Driesprong, Fuwang Hu, Gabbi Merz, Gabor Somogyi, Gengliang Wang, German Schiavon Matteo, Giovanni Lanzani, Greg Senia, Guangxin Wang, Guilherme Souza, Guy Khazma, Haiyang Yu, Helen Yu, Hemanth Meka, Henrique Goulart, Henry D, Herman Van Hovell, Hirobe Keiichi, Holden Karau, Hossein Falaki, Huaxin Gao, Huon Wilson, Hyukjin Kwon, Icysandwich, Ievgen Prokhorenko, Igor Calabria, Ilan Filonenko, Ilya Matiach, Imran Rashid, Ivan Gozali, Ivan Vergiliev, Izek Greenfield, Jacek Laskowski, Jackey Lee, Jagadesh Kiran, Jalpan Randeri, James Lamb, Jamison Bennett, Jash Gala, Jatin Puri, Javier Fuentes, Jeff Evans, Jenny, Jesse Cai, Jiaan Geng, Jiafu Zhang, Jiajia Li, Jian Tang, Jiaqi Li, Jiaxin Shan, Jing Chen He, Joan Fontanals, Jobit Mathew, Joel Genter, John Ayad, John Bauer, John Zhuge, Jorge Machado, Jose Luis Pedrosa, Jose Torres, Joseph K. Bradley, Josh Rosen, Jules Damji, Julien Peloton, Juliusz Sompolski, Jungtaek Lim, Junjie Chen, Justin Uang, Kang Zhou, Karthikeyan Singaravelan, Karuppayya Rajendran, Kazuaki Ishizaki, Ke Jia, Keiji Yoshida, Keith Sun, Kengo Seki, Kent Yao, Ketan Kunde, Kevin Yu, Koert Kuipers, Kousuke Saruta, Kris Mok, Lantao Jin, Lee Dongjin, Lee Moon Soo, Li Hao, Li Jin, Liang Chen, Liang Li, Liang Zhang, Liang-Chi Hsieh, Lijia Liu, Lingang Deng, Lipeng Zhu, Liu Xiao, Liu, Linhong, Liwen Sun, Luca Canali, MJ Tang, Maciej Szymkiewicz, Manu Zhang, Marcelo Vanzin, Marco Gaido, Marek Simunek, Mark Pavey, Martin Junghanns, Martin Loncaric, Maryann Xue, Masahiro Kazama, Matt Hawes, Matt Molek, Matt Stillwell, Matthew Cheah, Maxim Gekk, Maxim Kolesnikov, Mellacheruvu Sandeep, Michael Allman, Michael Chirico, Michael Styles, Michal Senkyr, Mick Jermsurawong, Mike Kaplinskiy, Mingcong Han, Mukul Murthy, Nagaram Prasad Addepally, Nandor Kollar, Neal Song, Neo Chien, Nicholas Chammas, Nicholas Marion, Nick Karpov, Nicola Bova, Nicolas Fraison, Nihar Sheth, Nik Vanderhoof, Nikita Gorbachevsky, Nikita Konda, Ninad Ingole, Niranjan Artal, Nishchal Venkataramana, Norman Maurer, Ohad Raviv, Oleg Kuznetsov, Oleksii Kachaiev, Oleksii Shkarupin, Oliver Urs Lenz, Onur Satici, Owen O’Malley, Ozan Cicekci, Pablo Langa Blanco, Parker Hegstrom, Parth Chandra, Parth Gandhi, Patrick Brown, Patrick Cording, Patrick Pisciuneri, Pavithra Ramachandran, Peng Bo, Pengcheng Liu, Petar Petrov, Peter G. Horvath, Peter Parente, Peter Toth, Philipse Guo, Prakhar Jain, Pralabh Kumar, Praneet Sharma, Prashant Sharma, Qi Shao, Qianyang Yu, Rafael Renaudin, Rahij Ramsharan, Rahul Mahadev, Rakesh Raushan, Rekha Joshi, Reynold Xin, Reza Safi, Rob Russo, Rob Vesse, Robert (Bobby) Evans, Rong Ma, Ross Lodge, Ruben Fiszel, Ruifeng Zheng, Ruilei Ma, Russell Spitzer, Ryan Blue, Ryne Yang, Sahil Takiar, Saisai Shao, Sam Tran, Samuel L. Setegne, Sandeep Katta, Sangram Gaikwad, Sanket Chintapalli, Sanket Reddy, Sarth Frey, Saurabh Chawla, Sean Owen, Sergey Zhemzhitsky, Seth Fitzsimmons, Shahid, Shahin Shakeri, Shane Knapp, Shanyu Zhao, Shaochen Shi, Sharanabasappa G Keriwaddi, Sharif Ahmad, Shiv Prashant Sood, Shivakumar Sondur, Shixiong Zhu, Shuheng Dai, Shuming Li, Simeon Simeonov, Song Jun, Stan Zhai, Stavros Kontopoulos, Stefaan Lippens, Steve Loughran, Steven Aerts, Steven Rand, Sujith Chacko, Sun Ke, Sunitha Kambhampati, Szilard Nemeth, Tae-kyeom, Kim, Takanobu Asanuma, Takeshi Yamamuro, Takuya UESHIN, Tarush Grover, Tathagata Das, Terry Kim, Thomas D’Silva, Thomas Graves, Tianshi Zhu, Tiantian Han, Tibor Csogor, Tin Hang To, Ting Yang, Tingbing Zuo, Tom Van Bussel, Tomoko Komiyama, Tony Zhang, TopGunViper, Udbhav Agrawal, Uncle Gen, Vaclav Kosar, Venkata Krishnan Sowrirajan, Viktor Tarasenko, Vinod KC, Vinoo Ganesh, Vladimir Kuriatkov, Wang Shuo, Wayne Zhang, Wei Zhang, Weichen Xu, Weiqiang Zhuang, Weiyi Huang, Wenchen Fan, Wenjie Wu, Wesley Hoffman, William Hyun, William Montaz, William Wong, Wing Yew Poon, Woudy Gao, Wu, Xiaochang, XU Duo, Xian Liu, Xiangrui Meng, Xianjin YE, Xianyang Liu, Xianyin Xin, Xiao Li, Xiaoyuan Ding, Ximo Guanter, Xingbo Jiang, Xingcan Cui, Xinglong Wang, Xinrong Meng, XiuLi Wei, Xuedong Luan, Xuesen Liang, Xuewen Cao, Yadong Song, Yan Ma, Yanbo Liang, Yang Jie, Yanlin Wang, Yesheng Ma, Yi Wu, Yi Zhu, Yifei Huang, Yiheng Wang, Yijie Fan, Yin Huai, Yishuang Lu, Yizhong Zhang, Yogesh Garg, Yongjin Zhou, Yongqiang Chai, Younggyu Chun, Yuanjian Li, Yucai Yu, Yuchen Huo, Yuexin Zhang, Yuhao Yang, Yuli Fiterman, Yuming Wang, Yun Zou, Zebing Lin, Zhenhua Wang, Zhou Jiang, Zhu, Lipeng, codeborui, cxzl25, dengziming, deshanxiao, eatoncys, hehuiyuan, highmoutain, huangtianhua, liucht-inspur, mob-ai, nooberfsh, roland1982, teeyog, tools4origins, triplesheep, ulysses-you, wackxu, wangjiaochun, wangshisan, wenfang6, wenxuanguan


Spark 新闻存档

最新消息

存档