Spark 3.0.0 版本发布

Apache Spark 3.0.0 是 3.x 系列的第一个版本。该版本于 2020 年 6 月 10 日通过投票。此版本基于 git 标签 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 类型以及更具 Python 风格的错误处理。

以下是 Spark 3.0 的主要功能亮点:自适应查询执行;动态分区剪枝;ANSI SQL 兼容性;Pandas API 的显著改进;结构化流式处理的新 UI;调用 R 用户定义函数最高可提速 40 倍;加速器感知调度器;以及 SQL 参考文档。

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

核心、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 解析器定义符合 ANSI 规范的保留关键字 (SPARK-26215)
  • 在 ANSI 模式开启时禁止将保留关键字用作标识符 (SPARK-26976)
  • 支持 ANSI SQL: LIKE … ESCAPE 语法 (SPARK-28083)
  • 支持 ANSI SQL 布尔谓词语法 (SPARK-27924)
  • 更好地支持相关子查询处理 (SPARK-18455)

PySpark 增强

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

可扩展性增强

连接器增强

  • 支持高性能 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 表时不进行 schema 推断 (SPARK-27119)
    • 如果 Hive CTAS 命令可转换,则应使用数据源 (SPARK-25271)
    • 使用原生数据源优化分区 Hive 表的插入 (SPARK-28573)
  • Kafka
    • 添加对 Kafka headers 的支持 (SPARK-23539)
    • 添加 Kafka 委托令牌支持 (SPARK-25501)
    • 为 Kafka 源引入新选项:按时间戳偏移 (起始/结束) (SPARK-26848)
    • 在 Kafka 批处理源和流式处理源 v1 中支持“minPartitions”选项 (SPARK-30656)
    • 将 Kafka 升级到 2.4.1 (SPARK-31126)
  • 新的内置数据源

功能增强

监控和可调试性增强

  • 新的结构化流式处理 UI (SPARK-29543)
  • SHS:允许正在运行的流式应用程序的事件日志进行滚动更新 (SPARK-28594)
  • SHS 中的 JDBC 选项卡 (SPARK-29724, SPARK-29726)
  • 添加一个 API,允许用户定义和观察批处理和流式查询上的任意指标 (SPARK-29345)
  • 用于跟踪每个查询规划时间的工具 (SPARK-26129)
  • 将基本 shuffle 指标放入 SQL 交换运算符中 (SPARK-26139)
  • SQL 语句显示在 SQL 选项卡中,而不是 callsite 中 (SPARK-27045)
  • 向 SparkUI 添加工具提示 (SPARK-29449)
  • 提高历史服务器的并发性能 (SPARK-29043)
  • EXPLAIN FORMATTED 命令 (SPARK-27395)
  • 支持将截断的计划和生成的代码转储到文件 (SPARK-26023)
  • 增强描述框架以描述查询的输出 (SPARK-26982)
  • 添加 SHOW VIEWS 命令 (SPARK-31113)
  • 改进 SQL 解析器的错误消息 (SPARK-27901)
  • 原生支持 Prometheus 监控 (SPARK-29429)
  • 将执行器内存指标添加到心跳并将其暴露在执行器 REST API 中 (SPARK-23429)
  • 将执行器指标和内存使用情况工具添加到指标系统 (SPARK-27189)

文档和测试覆盖率增强

Kubernetes 中的原生 Spark 应用程序

  • 支持用户指定的驱动程序和执行器 Pod 模板 (SPARK-24434)
  • 允许在没有外部 shuffle 服务的情况下进行动态分配 (SPARK-27963)
  • 通过 K8S 实现更灵敏的动态分配 (SPARK-28487)
  • Spark on K8S 对 Kerberos 的支持 (SPARK-23257)
  • Kubernetes 资源管理器 (客户端模式) 中对 Kerberos 的支持 (SPARK-25815)
  • 支持具有 Hadoop 兼容文件系统的客户端依赖项 (SPARK-23153)
  • 在 K8s 后端添加可配置的认证密钥源 (SPARK-26239)
  • 支持 Kubernetes 的子路径挂载 (SPARK-25960)
  • 将 Python 3 作为 K8S 的 PySpark 绑定中的默认版本 (SPARK-24516)

其他值得注意的更改

行为变更

请阅读每个组件的迁移指南:Spark CoreSpark SQL结构化流式处理PySpark

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

  • 在 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 指南以及结构化流式处理编程指南

MLlib

亮点

行为变更

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

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

  • 在 Spark 3.0 中,PySpark 中的多类逻辑回归现在将(正确地)返回 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 的“即时执行” (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)

  • 如果缺少年份字段,使用模式字母“D”解析一年中的某一天会返回错误的结果。这可能发生在 SQL 函数(如 to_timestamp)中,该函数使用模式字符串将日期时间字符串解析为日期时间值。这将在 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 新闻存档

最新新闻

存档