关于 Sail MCP Server for Spark SQL
Sail 是用 Rust 编写的 Apache Spark 直接替代品,统一批处理、流处理和计算密集型 AI 工作负载。面向希望在不改写 PySpark 代码的情况下降低成本的数据工程师。
主要功能
- 01兼容 Spark Connect 协议
- 02支持 Spark SQL 与 DataFrame API
- 03无 JVM 依赖的 Rust 原生引擎
- 04支持 Delta Lake 与 Apache Iceberg
- 05基于 Apache Arrow 的列式执行
适用场景
- 01在不改写代码的前提下将 PySpark 作业迁移到 Sail
- 02在 Kubernetes 集群模式下运行分布式数据处理
- 03使用 Python UDF 进行数据分析
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Sail
Sail 是一个用 Rust 编写的 可直接替换 Apache Spark 的方案,通过分布式多模态计算引擎,统一批处理、流处理和计算密集型 AI 工作负载。
- 与 Spark Connect 协议 兼容,支持 Spark SQL 和 DataFrame API,无需重写代码。
- 100% 原生 Rust,没有 JVM 开销,提供内存安全、即时启动和可预测的性能。
- 速度比 Spark 快约 10 倍,基础设施成本 降低 98%。参见 衍生 TPC-H 基准测试。
- 在 ClickBench 上经受验证,性能胜过 Spark、热门 Spark 加速器、Databricks 和 Snowflake。
文档
最新版本 Sail 的文档可在此处查看。
安装
快速入门
Sail 可作为 Python 软件包在 PyPI 上获取。你可以在 Python 环境中将其与 PySpark 一起安装。
pip install pysail
pip install "pyspark-client"
高级用例
你可以从源代码安装 Sail,以针对特定硬件架构优化性能。详细的安装指南会逐步指导你完成此过程。
如果需要在生产环境中部署 Sail,部署指南提供了在 Kubernetes 集群和其他基础设施配置上部署 Sail 的全面说明。
开始使用
启动 Sail 服务
选项 1:命令行界面。 你可以使用 sail 命令启动本地 Sail 服务。
sail spark server --port 50051
选项 2:Python API。 你可以使用 Python API 启动本地 Sail 服务。
from pysail.spark import SparkConnectServer
server = SparkConnectServer(port=50051)
server.start(background=False)
选项 3:Kubernetes。 你可以在 Kubernetes 上部署 Sail,并以集群模式运行 Sail 进行分布式处理。 请参阅 Kubernetes 部署指南,了解如何构建 Docker 镜像和编写 Kubernetes 清单 YAML 文件。
kubectl apply -f sail.yaml
kubectl -n sail port-forward service/sail-spark-server 50051:50051
连接到 Sail 服务
启动 Sail 服务后,你可以在 PySpark 中连接到它。 无需更改 PySpark 代码!
from pyspark.sql import SparkSession
spark = SparkSession.builder.remote("sc://localhost:50051").getOrCreate()
spark.sql("SELECT 1 + 1").show()
更多详情请参阅入门指南。
Spark 兼容性
Sail 旨在兼容 Spark 3.5.x、Spark 4.x 及更高版本。将 Spark 客户端会话通过 Spark Connect 协议连接到 Sail 后,现有 PySpark 代码即可直接运行。
作为入门参考,Sail 提供了一个 实验性 的 PySpark 函数兼容性检查脚本,用于扫描代码库中的 PySpark 函数,并报告 Sail 对这些函数的支持状态。
python -m pysail.examples.spark.compatibility_check <directory>
实验性 请仅将此脚本用于初步粗略检查。脚本会检查 Sail 是否_实现_了代码中引用的 PySpark 函数,但不会验证行为是否一致。它会查找 DataFrame 操作中使用的函数,但不涵盖 Spark SQL 字符串。
推荐的迁移实践请参阅迁移指南。
功能亮点
Lakehouse 格式和目录提供方
Sail 原生支持 Delta Lake 和 Apache Iceberg 表格式。 它集成了多种目录提供方,包括 Apache Iceberg REST Catalog、AWS Glue、Unity Catalog、Hive Metastore 和 Microsoft OneLake。
存储
Sail 支持多种存储后端,用于读取和写入数据,包括:
- AWS S3
- Azure
- Hugging Face
- Cloudflare R2
- Google Cloud Storage
- HDFS
- 文件系统
- HTTP/HTTPS
- 内存存储
更多详情请参阅存储指南。
为什么选择 Sail?
15 年来,Spark 一直是分布式数据处理的默认引擎,为几乎所有行业中的 ETL、机器学习和分析工作流提供支持。
但让 Spark 成为可能的 JVM 基础,如今也成了它发展的阻碍。Sail 旨在成为一个熟悉且高性能的替代方案,同时免去 JVM 带来的开销。
Sail 与 Spark 兼容
Sail 可直接替代 Spark SQL 和 Spark DataFrame API。将 Spark 客户端会话通过 Spark Connect 协议连接到 Sail 后,现有的 PySpark 代码即可开箱即用。
- Spark SQL 方言支持。 自定义 Rust 解析器(使用解析器组合子和 Rust 过程宏构建)能够以生产级精度覆盖 Spark SQL 语法。
- DataFrame API 支持。 Spark DataFrame 操作在 Sail 上运行时具有相同的语义。
- Python UDF、UDAF、UDWF 和 UDTF 支持。 Python、Pandas 和 Arrow UDF 均遵循与 Spark 相同的约定。
Sail 相较于 Spark 的优势
- Rust 原生引擎。 无垃圾回收暂停,无需调整 JVM 内存,内存占用低。
- 列式格式和向量化执行。 Sail 基于 Apache Arrow 和 Apache DataFusion 构建,列式内存格式和 SIMD 指令可实现极快的查询执行速度。
- 闪电般快速的 Python UDF。 通过 Arrow 数组指针实现零拷贝数据共享,Python 代码可在 Sail 内运行,且没有序列化开销。
- 高性能数据洗牌。 工作节点直接交换 Arrow 列式数据,最大限度地降低连接和聚合操作的洗牌成本。
- 轻量、无状态的工作节点。 工作节点数秒内即可启动,空闲时仅占用几 MB 内存,并可弹性扩展,从而降低云成本、简化运维。
- 值得信赖的并发性和内存安全性。 Rust 的所有权模型可防止空指针、竞态条件和不安全的内存访问,带来无与伦比的可靠性。
准备好迁移现有工作负载了吗?我们的迁移指南将为你介绍具体方法。
基准测试结果
衍生 TPC-H 结果表明,Sail 在所有查询中均优于 Apache Spark:
- 执行时间:在各种 SQL 工作负载中,速度约快 10 倍。
- 硬件成本:降低 98%,峰值内存使用量显著降低,且没有产生任何 shuffle 溢写。
| 指标 | Spark | Sail |
|---|---|---|
| 查询总时间 | 534.78 s | 52.81 s |
| 查询加速比 | 基线 | 176% – 2819% |
| 峰值内存使用量 | 72 GB | 26 GB |
| 磁盘写入(Shuffle 溢写) | 115 GB | 0 GB |
这些结果来自在 AWS r8g.4xlarge 实例上运行的衍生 TPC-H 基准测试(22 个查询、规模因子 100、Parquet 格式)。
请访问我们的基准测试结果页面,查看完整分析和图表。
延伸阅读
- 架构 – 概述 Sail 在本地模式和集群模式下的设计,以及如何在两种模式之间无缝切换。
- 查询规划 – 详细说明 Sail 如何解析 SQL 和 Spark 关系、构建逻辑计划和物理计划,以及如何处理本地模式和集群模式下的执行。
- SQL 和 DataFrame 功能 – Spark SQL 和 DataFrame API 兼容性的完整参考。
- LakeSail 博客 – Sail 版本更新、基准测试和技术见解。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。