跳转到主要内容
工程的博客

最近在Apache火花:性能改进SQL, Python, DataFrames等等

通过雷诺鑫

2015年4月24日 工程的博客

分享这篇文章

Lakehouse读取的数据探索为什么lakehouses未来的数据架构和数据仓库的父亲,Bill Inmon。


在这篇文章中,我们回顾并讨论Apache火花最近努力的表现。在后续博文下周,我们将期待,与你分享我们的思想火花的未来进化的表现。

2014年的火花是最活跃的发展到目前为止,主要的改进在整个引擎。一个特定的领域取得了伟大的进步是性能:火花创造一项新的世界纪录100年结核病排序,超过此前的纪录由Hadoop MapReduce举行三次,只用十分之一的资源;它收到一个新的SQL查询引擎先进的优化;和它的许多内置的算法快五倍

早在2010年,我们在加州大学伯克利分校的AMPLab火花为交互式查询和设计迭代算法,这是两个主要的用例不是由一批像MapReduce框架。因此,早期用户被吸引到火花,因为工作负载在这些明显的性能改善。然而,性能优化是一个永无止境的过程,已经引发的用例,所以有进一步改善的地方看着。用户反馈和详细测量了Apache火花开发者社区优先工作领域。从核心引擎,我将介绍一些最近的优化。

引发的生态系统
引发的生态系统

核心引擎

引发一个独特之处在于它的面向用户的api (SQL、流媒体、机器学习等)运行在一个共同的核心执行引擎。只要有可能,特定工作负载加速通过优化核心引擎。因此,这些优化加速所有组件。我们经常看到令人吃惊的结果:例如,当核心开发者减少延迟引入火花流,我们也看到SQL查询成为快两倍。

核心引擎,2014人的重大改进沟通。首先,洗牌在机器操作,数据点对点。它支撑着几乎所有工作负载。例如,一个SQL查询加入两个数据源使用洗牌将元组,应该连接到同一台机器,和产品推荐算法如ALS使用洗牌发送用户通过网络/产品重量。

最后两个版本的火花出现新的事洗牌层和网络层的基础上网状的零拷贝和显式的内存管理。这两个使火花更健壮的大规模的工作负载。在砖在自己的实验中,我们使用这个运行pb打乱250000任务。这两个变化也引发的关键设置当前世界纪录在大型排序,打破了之前Hadoop由30倍的记录每个节点的性能。

除了洗牌,核心开发人员改写引发的广播原始使用BitTorrent-like协议来减少网络流量。这加速了工作负载需要发送大量参数多台机器,包括SQL查询和许多机器学习算法。我们所看到的多五倍的性能改进这些工作负载。

Python API (PySpark)

Python也许是最流行的编程语言使用的数据科学家。引发社会观点Python作为一等公民引发的生态系统。性能时,Python程序历史上落后于JVM同行由于更多语言的动态特性。

引发广泛的核心开发人员工作的性能差距JVM语言和Python。特别是,PySpark现在可以运行在PyPy利用即时编译器,在某些情况下提高性能的50倍。Python的过程与主要的火花JVM程序也被重新启用工人重用。此外,广播处理通过更优化的序列化框架,使PySpark广播数据大于2 gb。后两个都一般的Python程序性能2 - 10倍。

SQL

一年前,鲨鱼,早先SQL火花引擎基于蜂巢,在砖弃用,我们建立了一个新的查询引擎基于一个新的查询优化器,催化剂设计上运行本地火花。这是一个有争议的决定,在Apache火花开发者社区以及内部数据砖,因为建立一个全新的查询引擎需要天文工程投资。一年后,115多个开源贡献者加入了这个项目,使其成为最活跃的bob下载地址开放源码的查询引擎。

鲨鱼和火花SQL
鲨鱼和火花SQL

尽管是不到一岁,火花SQL是优于鲨鱼几乎所有基准测试查询。决策支持基准,TPC-DS火花SQL是优于鲨鱼通常由一个数量级,由于更好的优化和代码生成

机器学习(MLlib)和图计算(GraphX)

从早期开始,引发与强大的标准库,可以优化包装以及核心引擎。这使得许多丰富优化这些库。例如,火花1.1出现一个新的通信模式聚合使用机器学习模型多层次的聚合树。这个模型聚合时间减少了一个数量级。这种新的沟通模式,再加上更高效的广播实现核心,导致在所有算法速度快1.5至5倍。

mllib-perf

除了优化沟通,替代最小二乘(ALS),常见的协同过滤算法,也重新实现1.3,这提供了另一个因素两个加速ALS对上述图表显示。此外,所有的内置算法GraphX也看到20%到50%的运行时性能改进,由于一个新的优化的API。

DataFrames:平整的Python和JVM

在火花1.3中,我们引入了一个DataFrameAPI。这个新的API使程序更简洁,更容易理解,同时暴露出更多的应用程序语义引擎。因此,火花可以使用催化剂来优化这些项目。

DataFrame性能

通过新的DataFrame API, Python程序可以实现相同的JVM性能水平项目,因为催化剂优化器为JVM字节码编译DataFrame操作。的确,有时比手写的Scala代码性能。

催化剂优化器还将随着时间的推移变得更聪明,选择更好的逻辑优化和物理执行优化。例如,在未来,火花将能够利用模式信息来创建一个定制的物理布局的数据,提高缓存位置和减少垃圾收集。这将有利于激发SQL和DataFrame项目。随着越来越多的图书馆将使用这个新的DataFrame API,他们也会自动从这些优化中受益。

火花的目标是提供一个平台,用户可以得到最好的分布式算法的数据处理任务。bob体育客户端下载我们将继续推进性能的边界,使得更多的用户更快和更强大的火花。

注意:这篇文章的早期版本出现在O ' reilly雷达

免费试着砖
看到所有工程的博客的帖子