阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

Spark 3.0 重磅发布!开发近两年,流、Python、SQL 重大更新全面解读

  • 2020-06-19
  • 本文字数:3443 字

    阅读完需:约 11 分钟

Spark 3.0重磅发布!开发近两年,流、Python、SQL重大更新全面解读

今天,开发历时近两年的 Apache Spark 3.0.0 正式发布了!3.0.0 版本一共包含了 3400 多个补丁,是开源社区有史以来贡献力度最大的一次,新版本加入了 Python 和 SQL 的高级功能,提升了探索和生产应用方面的易用性。今年,Spark 也迎来了开源 10 周年,这 10 年里 Spark 一直在不断发展,以便满足更多的应用场景和更广泛的受众需求。

Spark 3.0 主要特性概览

  • 相比 Spark 2.4,性能提升了 2 倍,主要体现在自适应查询执行、动态分区修剪等方面;

  • 兼容 ANSI SQL;

  • Pandas API 的重大改进,包括 Python 类型提示和增加额外的 Pandas UDF;

  • 改进了 Python 错误处理,简化了 PySpark 异常;

  • 结构化流的新 UI;

  • 调用 R 语言 UDF 速度提升最高达到了 40 倍;

  • 解决了 3400 个 Jira 问题,这些问题在 Spark 各个组件的分布情况如下:


Spark 开源 10 周年

Spark 诞生于加州大学伯克利分校的 AMPLab 实验室,该实验室致力于数据密集型计算的研究。AMPLab 研究人员与大型互联网公司合作,研究如何解决数据和 AI 问题,然后发现那些拥有海量数据的公司也面临同样的问题。于是,他们开发了一个新引擎来处理这些新兴的工作负载,同时又能够让开发人员轻松地使用大数据处理 API。


很快,社区开始参与贡献,对 Spark 进行了扩展,在流、Python 和 SQL 方面带来了新功能,而这些模式现在已经是 Spark 的主要用例。持续的投入把 Spark 带到了今天的状态,成为数据处理、数据科学、机器学习和数据分析工作负载事实上的引擎。Apache Spark 3.0 通过显著改善对 SQL 和 Python(当今 Spark 使用的两种最广泛的语言)的支持和对性能、可操作性等方面的优化继续推进这种趋势。

改进的 Spark SQL 引擎

Spark SQL 是支持大多数 Spark 应用程序的引擎。例如,在 Databricks,超过 90%的 Spark API 调用使用了 DataFrame、Dataset 和 SQL API。这说明即使是 Python 和 Scala 开发人员,他们的大部分工作都通过 Spark SQL 引擎进行。Spark 3.0 有 46%的补丁与 SQL 有关,提升了性能和 ANSI SQL 兼容性。如下图所示,Spark 3.0 的总体性能大约是 Spark 2.4 的 2 倍。接下来将介绍 Spark SQL 引擎的新功能。



新的自适应查询执行(AQE)框架通过在运行时生成更好的执行计划来提升性能,即使初始的计划不理想(由于缺少或使用了不正确的数据统计信息和错误地估算了成本)。由于 Spark 的数据存储和计算是分离的,因此数据的到达是无法预测的。基于这些原因,对于 Spark 来说,运行时自适应比传统系统来得更为重要。新版本引入了三个主要的自适应优化:


  • 动态聚结 shuffle 分区可简化甚至是避免调整 shuffle 分区的数量。用户可以在开始时设置相对较大的 shuffle 分区数量,AQE 会在运行时将相邻的小分区合并为较大的分区。

  • 动态切换连接策略可以在一定程度上避免由于缺少统计信息或错误估计大小而导致执行次优计划的情况。这种自适应优化可以在运行时自动将排序合并连接(sort-merge join)转换成广播哈希连接(broadcast-hash join),从而进一步提高性能。

  • 动态优化倾斜(skew)连接是另一个关键的性能增强。倾斜连接可能会导致负载的极度失衡并严重降低性能。在 AQE 从 shuffle 文件统计信息中检测到倾斜连接之后,它可以将倾斜分区拆分为较小的分区,并将它们与另一边的相应分区合并。这个优化可以让倾斜处理并行化,获得更好的整体性能。


在一个 3TB 的 TPC-DS 基准测试中,与没有 AQE 的 Spark 相比,有 AQE 的 Spark 将两个查询的性能提升了 1.5 倍以上,另外 37 个查询的性能提升了 1.1 倍以上。



当优化器无法在编译时识别可跳过的分区,可以使用“动态分区修剪”,这在星型模型中很常见(星型模型由一个或多个事实表组成,这些事实表引用了任意数量的维度表)。在执行这种连接操作时,我们可以通过识别维度表过滤之后的分区来修剪从事实表读取的分区。在一个 TPC-DS 基准测试中,102 个查询中有 60 个查询获得 2 到 18 倍的速度提升。



ANSI SQL 兼容性对于将工作负载从其他 SQL 引擎迁移到 Spark SQL 来说至关重要。为了提升兼容性,新版本使用了 Proleptic Gregorian 日历,用户可以禁止使用 ANSI SQL 保留关键字作为标识符。此外,新版本针对数字类型的操作中引入了运行时溢出检查,并强制执行编译时类型检查。这些新的验证机制提高了数据质量。


连接提示:尽管 Databricks 一直在改进编译器,但还是不能保证编译器可以在任何时候做出最佳决策——连接算法的选择基于统计信息和启发式。当编译器无法做出最佳选择时,用户可以使用连接提示来影响优化器,让它选择更好的执行计划。新版本加入了新的提示:SHUFFLE_MERGE、SHUFFLE_HASH 和 SHUFFLE_REPLICATE_NL。

增强的 Python API:PySpark 和 Koalas

Python 现在是 Spark 中使用最为广泛的编程语言,所以也是 Spark 3.0 的重点关注领域。Databricks 有 68%的 NoteBook 命令是用 Python 写的。PySpark 在 PyPI 上的月下载量超过 500 万。



很多 Python 开发人员在数据结构和数据分析方面使用了 Pandas API,但仅限于单节点处理。Databricks 会继续开发 Koalas(一种基于 Apache Spark 的 Pandas API 实现),让数据科学家能够在分布式环境中更高效地处理大数据。借助 Koalas,数据科学家们就不需要构建很多函数(例如绘图支持),在整个群集中获得更高的性能。


经过一年多的开发,Koalas 实现了将近 80%的 Pandas API。Koalas 在 PyPI 上的月下载量已迅速增长到 85 万,并以每两周发布一次的节奏快速演进。除了 Koalas,很多人仍在使用 PySpark API,该 API 也越来越受欢迎。



Spark 3.0 对 PySpark API 做了一些增强:


  • 带有类型提示的新 Pandas API:Spark 2.3 最初引入了 Pandas UDF,并将 Pandas API 集成到 PySpark 应用程序中。但是,随着 UDF 类型的增多,现有接口就变得难以理解。新版本引入了一个新的 Pandas UDF 接口,利用 Python 的类型提示来解决 Pandas UDF 类型泛滥的问题。新接口变得更具 Python 风格和自我描述性。

  • 新的 Pandas UDF 类型和 Pandas 函数 API:新版本增加了两种新的 Pandas UDF 类型,即系列迭代器到系列迭代器和多个系列迭代器到系列迭代器。这对于数据预取和昂贵的初始化操作来说很有用。此外,新版本还添加了两个新的 Pandas 函数 API,即 map 和 co-grouped map。更多详细信息请参见这里

  • 更好的错误处理:PySpark 的错误处理对于 Python 用户来说并不友好。新版本简化了 PySpark 异常,隐藏了不必要的 JVM 堆栈跟踪,并更具 Python 风格。

Hydrogen、流和可扩展性

Spark 3.0 完成了 Hydrogen 项目的关键组件,并引入了新功能来改善流和可扩展性。


  • 加速器感知调度:Hydrogen 项目是 Spark 的一项主要计划,旨在更好地统一基于 Spark 的深度学习和数据处理。GPU 和其他加速器已经被广泛用于加速深度学习工作负载。为了使 Spark 能够利用目标平台上的硬件加速器,新版本增强了已有的调度程序,让集群管理器可以感知到加速器。用户可以通过配置来指定加速器,然后调用新的 RDD API 来利用这些加速器。

  • 结构化流的新 UI:结构化流最初是在 Spark 2.0 中引入的。在 Databricks,使用量同比增长 4 倍之后,每天使用结构化流处理的记录超过了 5 万亿条。新版本添加了专用的新 Spark UI,用于查看流作业。新 UI 提供了两组统计信息:已完成的流查询作业的聚合信息和流查询的详细统计信息。



  • 可观察的指标:持续监控数据质量变化是管理数据管道的一种必备功能。新版本引入了监控批处理和流应用程序的功能。可观察的指标是一种可基于查询(DataFrame)定义的聚合函数。在 DataFrame 执行完成后会发出一个事件,事件包含了自上一个完成点以来处理的数据的度量信息。

  • 新的目录插件 API:现有的数据源 API 缺乏访问和操作外部数据源元数据的能力。新版本增强了数据源 V2 API,并引入了新的目录插件 API。对于同时实现了目录插件 API 和数据源 V2 API 的外部数据源,用户可以通过标识符直接操作外部表的数据和元数据(在相应的外部目录注册了之后)。

Spark 3.0 的其他更新

Spark 3.0 解决了 3400 多个 Jira 问题,这是 440 多个贡献者共同努力的结果。这些贡献者包括个人贡献者和来自 Databricks、谷歌、微软、英特尔、IBM、阿里巴巴、Facebook、英伟达、Netflix、Adobe 等公司的员工。除了本文介绍的在 SQL、Python 和流技术方面的关键改进,Spark 3.0 还有很多其他改进功能,详情可以查阅版本发行说明。发行文档中提供了更多信息,包括数据源、生态系统、监控等。



原文链接:


https://databricks.com/blog/2020/06/18/introducing-apache-spark-3-0-now-available-in-databricks-runtime-7-0.html


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2020-06-19 13:305416
用户头像
蔡芳芳 InfoQ主编

发布了 781 篇内容, 共 494.9 次阅读, 收获喜欢 2748 次。

关注

评论

发布
暂无评论
发现更多内容

Oracle数据库安装配置详细教程汇总(含11g、12c、18c、19c、21c)

墨天轮

数据库 oracle 升级 安装 & 部署

软件测试 / 测试开发 / BAT大厂都在用的Docker。学会这三招,面试、工作轻松hold住

测试人

Docker 容器 软件测试 测试开发 环境搭建

探讨丨SaaS软件是否正在“毁掉”数字化转型企业?

优秀

数字化转型

华为云CDN加速,如何助力企业更好发展?

爱科技的水月

“数字·进化”——2022数字化发展峰会圆满落幕

创业邦

数据存储安全责任重于泰山,看华为云对象存储服务OBS如何大展身手

IT科技苏辞

ModStart交给您的开源年终总结

ModStart

华为云CDN加速,为企业开启高效且安全的加速环境

科技说

OneAccess | 面对庞大复杂的身份和权限管理,企业该怎么办?

爱尚科技

软件测试 | 掌握高频 Docker 命令,夯实内功基础

测试人

Docker 软件测试 自动化测试 测试开发 环境搭建

一文读懂 | Getaverse 节点部署

Geek_Web3

不止稳定快速,看华为云CDN如何在国际云服务市场中“分蛋糕”

爱科技的水月

“上云”成本低,稳定可靠!华为云OBS助力企业解决数据存储难题

与时俱进的时代

存储空间不够大?试试华为云OBS对象存储服务

与时俱进的时代

华为云CSE 关键特性,支持托管Nacos注册配置中心

与时俱进的时代

2022年11月视频行业用户洞察:世界杯效应显著,咪咕视频凭借大屏、小屏同时触达球迷群体,未来体育营销将更加激烈

易观分析

视频 世界杯

数据存储的全能侠——华为云对象存储服务OBS

IT科技苏辞

华为云CDN:海量存储+过硬本领为用户带来更优体验

科技说

正式毕业!Apache Kyuubi 成为 Apache 基金会顶级项目!

网易数帆

大数据 spark 开源 Apache Kyuubi

开个脑洞,带你写一个自己的极狐GitLab CI Runner

极狐GitLab

DevOps 持续集成 CI/CD runner 极狐GitLab

华为云CDN,如何助力智能新媒体转型

科技说

不止于快,华为云CDN加速服务对OBS桶文件加速的超实用技巧

爱科技的水月

【电商行业必备神器】轻松备战“双十一”,华为云OBS值得拥有

与时俱进的时代

数据存储难?华为云对象存储OBS轻松解决

IT科技苏辞

极狐GitLab include 语法减少 CI/CD Pipeline 代码冗余,提升构建效率

极狐GitLab

DevOps CI/CD pipeline 极狐GitLab include

数据存储服务的百宝箱——华为云对象存储服务OBS

IT科技苏辞

企业数据如何存?华为云对象存储服务OBS帮您忙

IT科技苏辞

不止于快,华为云CDN加速服务为企业提供安全加速环境

科技说

华为云CDN加速服务的精细化管理,让加速变得简单起来

科技说

泰山众筹4.0合约系统开发技术

薇電13242772558

智能合约

Vertically Federated Graph Neural Network for Privacy-Preserving Node Classification

1+1=王

联邦学习 Fl 图神经网络 GNN 节点分类

Spark 3.0重磅发布!开发近两年,流、Python、SQL重大更新全面解读_AI&大模型_Databricks 博客_InfoQ精选文章