工程的博客

Spark Connect - Apache Spark的力量,无处不在

分享这篇文章

在上周的数据和人工智能峰会上,我们突出显示一个名为Spark Connect的新项目。这篇博文详细介绍了项目的动机、高层提案和下一步。

Spark Connect为Apache Spark引入了一种解耦的客户端-服务器架构,允许使用DataFrame API和未解析的逻辑计划作为协议远程连接到Spark集群。客户端和服务器之间的分离使得Spark及其开放的生态系统可以从任何地方利用。它可以嵌入到现代数据应用程序、ide、notebook和编程语言中。

动机

在过去的十年中,开发人员、研究人员和整个社区已经成功地使用Spark构建了数万个数据应用程序。在此期间,现代数据应用程序的用例和需求发生了变化。今天,每个应用程序,从运行在应用服务器上的web服务,交互式环境(如笔记本电脑和ide),到边缘设备(如智能家居设备),都希望利用数据的力量。

Spark的驱动程序架构是整体的,在调度器、优化器和分析器之上运行客户端应用程序。这种架构很难满足这些新需求:除了SQL之外,没有内置的功能可以从其他语言远程连接到Spark集群。当前的架构和api要求应用程序在靠近REPL的地方运行,即在驱动程序上运行,因此不能满足交互式数据探索的需求,这是通常的做法笔记本电脑,或者允许构建现代ide中常见的丰富的开发人员体验。最后,没有JVM互操作性的编程语言目前无法利用Spark。

Spark的单片驱动程序带来了几个挑战
Spark的单片驱动程序带来了几个挑战

此外,Spark的单片驱动程序架构也会导致操作问题:

  • 稳定性:由于所有应用程序都直接在驱动程序上运行,用户可能会导致严重异常(例如内存不足),这可能会导致所有用户的集群宕机。
  • 可升级性:当前平台和客户端api的纠缠(例如,类路径中的第一个和第三方bob体育客户端下载依赖关系)不允许在Spark版本之间进行无缝升级,阻碍了新功能的采用。
  • 可调试性和可观察性:用户可能没有连接到主Spark进程的正确安全权限,并且调试JVM进程本身解除了Spark设置的所有安全边界。此外,在应用程序中不容易直接访问详细的日志和度量。

Spark Connect的工作原理

为了克服所有这些挑战,我们介绍了Spark Connect,这是一种用于Spark的解耦客户机-服务器架构。

客户端API设计得很薄,因此可以嵌入到任何地方:应用服务器、ide、笔记本电脑和编程语言中。Spark Connect API建立在Spark著名且受人喜爱的DataFrame API之上,使用未解析的逻辑计划作为客户端和Spark驱动程序之间的语言无关协议。

Spark Connect为Spark提供一个客户端API
Spark Connect为Spark提供一个客户端API

Spark Connect客户端将DataFrame操作转换为未解析的逻辑查询计划,这些逻辑查询计划使用协议缓冲区进行编码。使用gRPC框架将这些文件发送到服务器。在这个例子中下面,一个数据帧操作序列(项目,排序,限制)在日志表被转换为逻辑计划并发送到服务器。

处理Spark中的Spark Connect操作
处理Spark中的Spark Connect操作

Spark Connect端点嵌入在Spark Server上,接收未解决的逻辑计划并将其转换为Spark的逻辑计划操作符。这类似于解析SQL查询,其中解析属性和关系并构建初始解析计划。从那里开始,标准的Spark执行流程开始生效,确保Spark Connect利用所有Spark的优化和增强。结果通过gRPC以Apache arrow编码的行批的形式流回客户端。

克服多租户操作问题

有了这个新的架构,Spark Connect缓解了当前的运营问题:

  • 稳定性:使用过多内存的应用程序现在只会影响它们自己的环境,因为它们可以在自己的进程中运行。用户可以在客户端上定义自己的依赖关系,不需要担心与Spark驱动程序的潜在冲突。
  • 可升级性:Spark驱动程序现在可以独立于应用程序无缝升级,例如从性能改进和安全修复中受益。这意味着只要服务器端RPC定义设计为向后兼容,应用程序就可以向前兼容。
  • 可调试性和可观察性:Spark Connect可以在开发过程中直接从您喜欢的IDE进行交互式调试。类似地,可以使用应用程序框架的本机度量和日志库监视应用程序。

下一个步骤

Spark改进流程建议投票并被社区所接受。我们计划与社区合作,让Spark Connect作为实验性API在即将发布的Apache Spark版本中可用。

我们最初的重点是为PySpark提供DataFrame API覆盖,以便无缝过渡到这个新API。然而,Spark Connect为Spark在其他编程语言社区中变得更加普遍提供了一个很好的机会,我们期待看到将Spark Connect客户端引入其他语言的贡献。

我们期待着与Apache Spark社区的其他成员一起开发这个项目。如果你想在Apache Spark中跟踪Spark Connect的开发,请确保遵循(电子邮件保护)邮件列表或提交您的兴趣使用这种形式

免费试用Databricks

相关的帖子

看到所有bob下载地址 的帖子