跳到主要内容
工程的博客

现在在Databricks:一个技术预览Databricks运行时7包括Apache Spark 3.0预览

2020年5月13日 工程的博客

分享这篇文章

介绍Databricks Runtime 7.0 Beta

我们很高兴地宣布Apache SparkTM3.0.0-preview2版本作为我们新的Databricks Runtime 7.0 Beta的一部分在Databricks上可用。3.0.0-preview2版本是开源社区为Spark生态系统提供新功能、性能提升和扩展兼容性的巨大贡献的结晶。使用预览版就像启动集群时选择“7.0 Beta”版本一样简单。

Spark 3.0.0预览Databricks Runtime 7.0 Beta

即将发布的Apache Spark 3.0构建在Spark 2.0的许多创新之上,带来了新的想法,并延续了已经在开发中的长期项目。我们的愿景一直是统一数据和人工智能,我们一直在继续投资,使Spark足够强大,可以解决您最棘手的大数据问题,但也容易使用,这样您就可以真正做到。这不仅适用于数据工程师和数据科学家,也适用于任何使用Spark SQL执行SQL工作负载的人。Spark的新版本解决了超过3000张Jira门票,虽然我们无法在这篇文章中深入介绍所有这些新功能,但我们想重点介绍一下这个版本中的一些项目。

自适应SQL查询优化

Spark SQL是Spark的引擎。通过Catalyst优化器,构建在DataFrame、Dataset、SQL、Structured Streaming、MLlib和其他第三方库上的Spark应用程序都得到了优化。为了生成良好的查询计划,查询优化器需要了解数据特征。在大多数场景中,通常不存在数据统计信息,特别是在统计信息收集比数据处理本身更昂贵的情况下。即使有统计数据,也很可能是过时的。由于Spark的存储和计算分离,数据到达的特性是不可预测的。由于所有这些原因,运行时自适应对于Spark来说比传统系统更加关键。此版本引入了一个新的自适应查询执行(AQE)框架和新的运行时过滤动态分区修剪(民进党):

  • AQE框架具有三个主要特性:1)动态合并shuffle分区,2)动态切换连接策略,3)动态优化倾斜连接。基于没有统计数据的1TB TPC-DS基准,Spark 3.0可以为q77提供8倍的加速,为q5提供2倍的加速,为另外26个查询提供超过1.1倍的加速。可以通过设置SQL配置启用AQEspark.sql.adaptive.enabled真正的(默认Spark 3.0)。

TPS-DS 1TB无统计,具有vs.不具有自适应查询执行。

  • 当优化器在编译时无法识别可以跳过的分区时,就会发生DPP。这在星型模式中并不少见,星型模式由引用任意数量维表的一个或多个事实表组成。在这样的连接操作中,我们可以通过识别过滤维度表产生的分区,来删除连接从事实表中读取的分区。在TPC-DS基准测试中,102个查询中有60个显示了2倍到18倍的显著加速。

tpc - ds1tb与不动态分区修剪

更丰富的api和功能

为了支持新的用例并简化Spark应用程序开发,该版本提供了新的功能并增强了现有特性。

  • 增强的pandas udf.Pandas udf最初是在Spark 2.3中引入的,用于扩展PySpark中的用户定义函数,并将Pandas api集成到PySpark应用程序中。但是,当添加更多的UDF类型时,现有的接口就很难理解了。这个版本引入了新的pandas UDF接口和python类型的提示。这个版本增加了两个新的熊猫UDF类型,级数的迭代器到级数的迭代器而且多个系列的迭代器到系列的迭代器,以及三个新的熊猫函数api,分组地图,地图而且co-grouped地图
  • 一组完整的连接提示.虽然我们一直在让编译器变得更智能,但并不能保证编译器总是能对每种情况做出最优的决策。连接算法的选择基于统计和启发式。当编译器无法做出最佳选择时,用户仍然可以使用连接提示来影响优化器选择更好的计划。该版本扩展了现有的连接提示,添加了新的提示:SHUFFLE_MERGE、SHUFFLE_HASH和SHUFFLE_REPLICATE_NL。
  • 新的内置函数: Scala api中新增了32个内置函数和高阶函数。在这些内置函数中,有一组map特定的内置函数[Transform_key, transform_value, map_entries, map_filter, map_zip_with]是为了简化数据类型MAP的处理。

增强的监控功能

此版本包括许多增强功能,使监控更加全面和稳定。高效的增强对性能的影响不大。

  • 结构化流的新UI:结构化流最初是在Spark 2.0中引入的。该版本增加了专门的新Spark UI,用于检查这些流作业。这个新的UI提供了两组统计信息:1)完成的流查询作业的汇总信息,2)关于流查询的详细统计信息,包括输入速率、处理速率、输入行数、批处理持续时间、操作持续时间等。

新的Spark UI可通过Databricks Runtime 7.0检查流作业

  • 增强的EXPLAIN命令:读取计划对于理解和调优查询至关重要。现有的解决方案看起来很混乱,每个操作符的字符串表示可能非常宽,甚至被截断。该版本使用新的格式化模式对其进行了增强,并提供了将计划转储到文件中的功能。
  • 观察指标:持续监视数据质量的变化是管理数据管道非常需要的特性。此版本为批处理和流应用程序引入了这样的功能。可观察指标被命名为可以在查询(数据帧)上定义的任意聚合函数。一旦数据帧的执行到达一个完成点(例如,完成批量查询或到达流epoch),就会触发一个命名事件,其中包含自最后一个完成点以来处理的数据的度量。

在Runtime 7.0 Beta中尝试Spark 3.0预览版

即将发布的Apache Spark 3.0版本为Spark生态系统带来了许多新特性、性能改进和扩展的兼容性。除了在Apache Spark上对数据工程、数据科学、数据分析和机器学习工作负载进行核心功能和性能改进外,这些改进还显著改善了SQL分析师使用Spark的体验,包括报告作业和交互式查询。再次感谢Spark社区为实现这一目标所做出的贡献。

这篇博客文章只总结了这个版本的一些显著特性。请继续关注,我们将发布一系列技术博客,更深入地解释其中一些功能。

BOB低频彩了解更多关于Spark 3.0的信息预览网络研讨会。如果您想尝试即将在Databricks Runtime 7.0中推出的Apache Spark 3.0预览版,请注册一个免费试用账号

免费试用Databricks
看到所有工程的博客的帖子