Spark Connect 是 Apache Spark 从 3.4 版本开始引入的远程连接能力,核心思路是将客户端与 Spark 服务端分离。客户端通过 gRPC 协议向远端 Spark 服务发送查询请求,服务端接收请求后完成查询优化、任务调度和分布式计算,再将结果返回客户端。
在这种架构下,客户端只负责构建逻辑查询计划(Unresolved Logical Plan)和接收执行结果,不需要在本地启动完整的 Spark Driver,也不需要与 Spark 集群直接交互。用户可以在 Notebook、IDE 或应用程序中像调用本地库一样使用 Spark 的 DataFrame 和 SQL 能力,而实际计算在远端完成,更多Spark Connect 的介绍请参见:Spark Connect 社区文档。
EMR ServerlessSpark Connect 是火山引擎基于 ApacheSpark Connect 构建的托管式远程 Spark 连接服务。用户通过 EMR 提供的 Python Client 或 Java Client 连接远端 EMR ServerlessSpark Connect App,即可使用 Serverless Spark 的弹性计算能力,无需关心底层集群的创建、扩缩容和运维。
整体流程可以概括为:用户在本地编写 Spark DataFrame / SQL 代码 → 客户端将查询计划发送到 EMR ServerlessSpark Connect App → 服务端执行实际计算并返回结果。
这种方式让本地开发环境和远端生产计算环境打通,开发阶段就可以使用真实数据和完整的 Spark 运行时进行调试和验证。
当前客户端能力分为两部分:
核心能力对比:
能力 | Java Client | Python Client | 说明 |
|---|---|---|---|
创建新的Spark Connect App | ✅ | ✅ | 两端均可 |
查询已有Spark Connect App | ✅ | ✅ | 两端均可 |
停止已有Spark Connect App | ✅ | ✅ | 两端均可 |
查询 App 状态与 Tracking URL | ✅ | ✅ | 两端均可 |
创建 SparkSession 并连接Spark Connect App | ✅ | ✅ | 两端均可 |
支持环境变量配置认证信息 | ✅ | ✅ | 两端均可 |
支持从 | ✅ | ✅ | 两端均可 |
支持手动指定 Spark 配置文件,并覆盖默认目录读取逻辑 | ✅ | ✅ | 两端均可 |
支持常见 Spark 参数配置 | ✅ | ✅ | 两端均可 |
Notebook 进度展示 | ❌ | ✅ | Python 增强,更适合 Notebook 场景下的过程反馈。 |
与 Jupyter / IPython 更友好的使用方式 | ❌ | ✅ | Python 增强,更适合交互式分析与 Python 生态集成。 |
请根据目标Spark Connect App 的 Spark 版本,选择对应的客户端环境。
目标Spark Connect App 版本 | Java Client | Python 环境 | 说明 |
|---|---|---|---|
Spark 3.5.1 | 使用 Spark 3.5.1 对应的 Java Client JAR | pyspark3.5.1,py4j0.10.9.7 | Python Client wheel 通用,但 pyspark 版本需要匹配 |
Spark 4.1.2 | 使用 Spark 4.1.1 对应的 Java Client JAR | pyspark4.1.1,py4j0.10.9.9 | Python Client wheel 通用,但 pyspark 版本需要匹配 |
说明
Python Client 的 wheel 只有一份,但运行环境中的 pyspark 版本需要与目标Spark Connect App 对应的 Spark 大版本一致。
Spark Connect 采用客户端与服务端分离架构,因此部分传统 Spark 本地模式或 Driver 内部能力不可直接使用。当前主要限制如下:
pyspark / py4j 版本需要与目标Spark Connect App 的 Spark 版本匹配,Java Client 需要选择与目标 Spark 版本对应的 JAR。serverId + getOrCreate() 连接已有的Spark Connect App,避免重复创建。spark.stop() 释放当前 SparkSession。addArtifact 动态上传。详细操作请参见添加 Spark Connect App 依赖。EMR ServerlessSpark Connect 使用主要分为以下几个步骤:
查看作业进度和作业运行信息,可以使用插件提升作业管理体验,详细操作请参见作业管理:Notebook 进度条与 UI 插件。