云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

CDN_阿里云服务器便宜_促销

小七 141 0

apachespark最近的性能改进:SQL、Python、DataFrames等

在本文中,我们回顾并介绍apachespark中最近的性能工作。在下周的后续博客文章中,我们将期待并与您分享我们对Spark性能未来发展的看法。2014年是迄今为止Spark开发最活跃的一年,整个发动机都有重大改进。它在性能方面取得了长足的进步:Spark在100TB的排序方面创下了新的世界纪录,比Hadoop MapReduce保持的记录高出三倍,仅使用了十分之一的资源;它获得了一个新的SQL查询引擎,并配备了最先进的优化器;它的许多内置算法速度提高了五倍。早在2010年,我们在加州大学伯克利分校的AMPLab为交互式查询和迭代算法设计了Spark,因为这两个主要用例在MapReduce这样的批处理框架中没有得到很好的服务。因此,早期的用户被吸引到Spark,因为这些工作负载的性能有了显著的改进。然而,性能优化是一个永无止境的过程,随着Spark的用例不断增长,需要进一步改进的领域也在增加。用户反馈和详细的度量帮助apachespark开发人员社区确定工作区域的优先级。从核心引擎开始,我将介绍一些最近进行的优化。星火生态系统堆芯发动机Spark的一个独特之处在于它面向用户的api(SQL、流、机器学习等)运行在一个通用的核心执行引擎上。只要有可能,通过在核心引擎中进行优化来加速特定的工作负载。因此,这些优化加快了所有组件的速度。我们经常看到这种非常令人惊讶的结果:例如,当核心开发人员减少延迟来引入Spark流时,我们也看到SQL查询速度提高了两倍。在核心引擎方面,2014年的主要改进是在通信方面。首先,shuffle是一种跨机器点对点移动数据的操作。它支持几乎所有的工作负载。例如,连接两个数据源的SQL查询使用shuffle将应该连接在一起的元组移动到同一台机器上,而诸如ALS之类的产品推荐算法使用shuffle在网络上发送用户/产品权重。Spark的前两个版本有一个新的基于sort的shuffle层和一个基于Netty的新的网络层,具有零拷贝和显式内存管理。这两个特性使得Spark在非常大规模的工作负载下更加健壮。在我们自己在Databricks上的实验中,我们已经用它在250000个任务上运行了petabyte的洗牌。这两个变化也是Spark刷新当前大规模排序世界纪录的关键,它在每节点性能上超过了之前基于Hadoop的记录30倍。除了shuffle之外,核心开发人员重写了Spark的广播原语,以使用类似BitTorrent的协议来减少网络流量。这加快了需要向多台机器发送大参数的工作负载,包括SQL查询和许多机器学习算法。我们看到这些工作负载的性能提高了五倍多。Python API(PySpark)Python可能是数据科学家使用的最流行的编程语言。Spark社区将Python视为Spark生态系统的一流公民。在性能方面,由于Python语言更具动态性,Python程序在历史上落后于JVM程序。Spark的核心开发人员进行了大量的工作,以弥合JVM语言和Python之间的性能差距。特别是,PySpark现在可以在PyPy上运行以利用just-In-time编译器,在某些情况下可以将性能提高50倍。Python进程与主要Spark JVM程序的通信方式也经过了重新设计,以支持工人重用。此外,广播是通过一个更优化的序列化框架来处理的,这使得PySpark能够广播大于2GB的数据。后两种方法使一般Python程序的性能提高了2到10倍。SQL语言一年前,Shark,一个早期的基于Hive的sqlonspark引擎被弃用,我们Databricks基于一个新的查询优化器Catalyst构建了一个新的查询引擎,Catalyst被设计成在Spark上本机运行。在apachespark开发人员社区以及Databricks内部,这是一个有争议的决定,因为构建一个全新的查询引擎需要大量的工程投资。一年后,超过115个开源贡献者加入了这个项目,使其成为最活跃的开源查询引擎之一。Shark与Spark SQL尽管sparksql还不到一年的历史,但它在几乎所有的基准查询上都优于Shark。在决策支持基准测试TPC-DS中,sparksql的性能通常比Shark高出一个数量级,这是由于更好的优化和代码生成。机器学习(MLlib)和图计算(GraphX)从早期开始,Spark就被打包成强大的标准库,这些库可以与核心引擎一起优化。这允许对这些库进行大量丰富的优化。例如,Spark 1.1提供了一种新的通信模式,用于使用多级聚合树聚合机器学习模型。这将模型聚合时间缩短了一个数量级。这种新的通信模式,再加上核心中更高效的广播实现,使得所有算法的速度提高1.5到5倍。除了通信方面的优化,替代最小二乘法(ALS),一种常见的协作过滤算法,也被重新实现了1.3,这为ALS提供了比上表所示的两个加速因子。此外,GraphX中所有内置算法的运行时性能也得到了20%到50%的改进,这是由于一个新的优化API。数据帧:为Python和JVM调配字段在Spark 1.3中,我们引入了一个新的数据帧API。这个新的API使Spark程序更加简洁和易于理解,同时向引擎公开了更多的应用程序语义。因此,Spark可以使用Catalyst来优化这些程序。通过新的dataframeapi,Python程序可以获得与JVM程序相同的性能水平,因为Catalyst优化器将数据帧操作编译成JVM字节码。实际上,性能有时胜过手工编写的Scala代码。随着时间的推移,Catalyst优化器也将变得更加智能,可以选择更好的逻辑优化和物理执行优化。例如,在将来,Spark将能够利用模式信息来创建数据的自定义物理布局,从而改进缓存位置并减少垃圾收集。这对sparksql和DataFrame程序都有好处。随着越来越多的库转换为使用这个新的dataframeapi,它们也将自动从这些优化中获益。Spark的目标是提供一个单一的平台,用户可以在其中获得任何数据处理任务的最佳分布式算法。我们将继续突破性能的界限,让Spark更快、更强大,为更多用户服务。注:这篇博文的早期版本出现在O'Reilly雷达上。免费试用Databricks。今天就开始吧