今天,开发历时近两年的Apache Spark 3.0.0正式发布了!3.0.0版本一共包含了3400多个补丁,是开源社区有史以来贡献力度最大的一次,新版本加入了Python和SQL的高级功能,提升了探索和生产应用方面的易用性。今年,Spark也迎来了开源10周年,这10年里Spark一直在不断发展,以便满足更多的应用场景和更广泛的受众需求。
Spark诞生于加州大学伯克利分校的AMPLab实验室,该实验室致力于数据密集型计算的研究。AMPLab研究人员与大型互联网公司合作,研究如何解决数据和AI问题,然后发现那些拥有海量数据的公司也面临同样的问题。于是,他们开发了一个新引擎来处理这些新兴的工作负载,同时又能够让开发人员轻松地使用大数据处理API。
很快,社区开始参与贡献,对Spark进行了扩展,在流、Python和SQL方面带来了新功能,而这些模式现在已经是Spark的主要用例。持续的投入把Spark带到了今天的状态,成为数据处理、数据科学、机器学习和数据分析工作负载事实上的引擎。Apache Spark 3.0通过显著改善对SQL和Python(当今Spark使用的两种最广泛的语言)的支持和对性能、可操作性等方面的优化继续推进这种趋势。
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来说,运行时自适应比传统系统来得更为重要。新版本引入了三个主要的自适应优化:
在一个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现在是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做了一些增强:
Spark 3.0完成了Hydrogen项目的关键组件,并引入了新功能来改善流和可扩展性。
Spark 3.0解决了3400多个Jira问题,这是440多个贡献者共同努力的结果。这些贡献者包括个人贡献者和来自Databricks、谷歌、微软、英特尔、IBM、阿里巴巴、Facebook、英伟达、Netflix、Adobe等公司的员工。除了本文介绍的在SQL、Python和流技术方面的关键改进,Spark 3.0还有很多其他改进功能,详情可以查阅版本发行说明。发行文档中提供了更多信息,包括数据源、生态系统、监控等。
原文链接:
领取专属 10元无门槛券
私享最新 技术干货