lakehq/sail
GitHub: lakehq/sail
一个基于 Rust 的统一分布式多模态计算框架,通过兼容 Spark 协议实现批处理、流处理和 AI 工作负载的高效统一执行。
Stars: 1253 | Forks: 83
# Sail
[](https://github.com/lakehq/sail/actions)
[](https://app.codecov.io/gh/lakehq/sail)
[](https://pypi.org/project/pysail/)
[](https://www.launchpass.com/lakesail-community/free)
Sail 是一个由 [LakeSail](https://lakesail.com/) 创建的开源**统一分布式多模态计算框架**。
我们的使命是**统一批处理、流处理和计算密集型 AI 工作负载**。Sail 是一个具备以下特点的计算引擎:
- **兼容** Spark Connect 协议,支持 Spark SQL 和 DataFrame API,无需重写代码。
- 在基准测试中比 Spark **快约 4 倍**(在特定工作负载中最高可达 8 倍)。
- 基础设施成本**降低 94%**。
- **100% Rust 原生**实现,无 JVM 开销,提供内存安全性、即时启动和可预测的性能。
**🚀 Sail 在 [ClickBench](https://go.lakesail.com/clickbench) 上的表现优于 Spark、主流 Spark 加速器、Databricks 和 Snowflake。**
**💬 [加入我们的 Slack 社区](https://www.launchpass.com/lakesail-community/free)** 以提问、分享反馈,并与其他 Sail 用户和贡献者交流。
## 文档
最新版本的 Sail 文档可以在[这里](https://docs.lakesail.com/sail/latest/)找到。
## 安装说明
### 快速开始
Sail 已作为 Python 包发布在 PyPI 上。您可以在 Python 环境中将其与 PySpark 一起安装。
```
pip install pysail
pip install "pyspark[connect]"
```
或者,由于 Spark 4.0 的发布,您可以安装轻量级客户端包 `pyspark-client`。
与 `pyspark[connect]` 等效的 `pyspark-connect` 包也已支持 Spark 4.0。
### 进阶使用场景
您可以从源代码安装 Sail,以针对您的特定硬件架构优化性能。详细的[安装指南](https://docs.lakesail.com/sail/latest/introduction/installation/)将逐步引导您完成此过程。
如果您需要在生产环境中部署 Sail,[部署指南](https://docs.lakesail.com/sail/latest/guide/deployment/)提供了在 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 进行分布式处理。
有关构建 Docker 镜像和编写 Kubernetes 清单 YAML 文件的说明,请参阅 [Kubernetes 部署指南](https://docs.lakesail.com/sail/latest/guide/deployment/kubernetes.html)。
```
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()
```
请参阅[入门指南](https://docs.lakesail.com/sail/latest/introduction/getting-started/)了解更多详情。
## 核心特性
### 存储
Sail 支持多种用于读写数据的存储后端。您可以在我们的[存储指南](https://docs.lakesail.com/sail/latest/guide/storage/)中了解更多详情。
以下是支持的存储选项:
- AWS S3
- Cloudflare R2
- Azure
- Google Cloud Storage
- Hugging Face
- HDFS
- 文件系统
- HTTP/HTTPS
- 内存存储
### 湖仓格式
Sail 为现代湖仓表格式提供了原生支持,提供具有强大数据管理保证的可靠存储层,并确保与现有数据集的互操作性。
有关支持的格式,请参阅以下指南:
- [Delta Lake 指南](https://docs.lakesail.com/sail/latest/guide/formats/delta.html)
- [Apache Iceberg 指南](https://docs.lakesail.com/sail/latest/guide/formats/iceberg.html)
### Catalog 提供商
Sail 支持多种 Catalog 提供商,例如 Apache Iceberg REST Catalog 和 Unity Catalog。您可以将数据集作为外部表进行管理,并与更广泛的数据平台生态系统集成。
有关使用方法和最佳实践的更多详情,请参阅 [Catalog 指南](https://docs.lakesail.com/sail/latest/guide/catalog/)。
## 基准测试结果
衍生 TPC-H 结果表明,Sail 在每一项查询中的表现均优于 Apache Spark:
- **执行时间**:在各种 SQL 工作负载中快约 4 倍。
- **硬件成本**:降低 94%,峰值内存使用量显著降低,且零 Shuffle 溢写。
| 指标 | Spark | Sail |
| -------------------------- | -------- | --------------- |
| 总查询时间 | 387.36 s | **102.75 s** |
| 查询加速 | 基线 | **43% – 727%** |
| 峰值内存使用量 | 54 GB | **22 GB (1 s)** |
| 磁盘写入 (Shuffle 溢写) | > 110 GB | **0 GB** |
这些结果来自在 AWS `r8g.4xlarge` 实例上进行的衍生 TPC-H 基准测试(22 项查询,比例因子 100,Parquet 格式)。

请在我们的[基准测试结果](https://docs.lakesail.com/sail/latest/introduction/benchmark-results/)页面上查看完整的分析和图表。
## 为什么选择 Sail?
15 年多前 Spark 诞生时,它具有革命性意义。它重新定义了分布式数据处理,并驱动了各行各业的 ETL、机器学习和分析流水线。
但是,Spark 基于 JVM 的架构如今已难以满足现代对性能和云效率的需求:
- **垃圾回收停顿**会导致延迟峰值。
- **序列化开销**拖慢了 JVM 和 Python 之间的数据交换。
- **笨重的执行器**推高了云成本,并使扩展变得复杂。
- **基于行的处理**在分析工作负载上表现不佳,未能充分利用硬件效率。
- **缓慢的启动**延迟了工作负载,影响了交互式和按需使用场景。
Sail 通过现代的、Rust 原生设计解决了这些问题。
### Sail 兼容 Spark
Sail 提供了对 Spark SQL 和 Spark DataFrame API 的无缝替代方案。一旦您通过 Spark Connect 协议将 Spark 客户端会话连接到 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 内存调优,且内存占用低。
- **列式格式与向量化执行。** 基于 [Apache Arrow](https://github.com/apache/arrow) 和 [Apache DataFusion](https://github.com/apache/datafusion) 构建,列式内存格式和 SIMD 指令解锁了极速查询执行。
- **闪电般的 Python UDF。** Python 代码在 Sail 内部运行,具有零序列化开销,因为 Arrow 数组指针实现了零拷贝数据共享。
- **高性能数据 Shuffle。** Worker 直接交换 Arrow 列式数据,最大限度地降低了 Join 和聚合操作中的 Shuffle 成本。
- **轻量级、无状态 Worker。** Worker 在几秒钟内启动,空闲时仅消耗几兆内存,并可弹性扩展以降低云成本并简化运维。
- **值得信赖的并发与内存安全。** Rust 的所有权模型可防止空指针、竞态条件和 unsafe 内存访问,提供无与伦比的可靠性。
想知道 Sail 与 Spark 相比表现如何?请浏览我们的 [为什么选择 Sail?](https://lakesail.com/why-sail/) 页面。准备好迁移您现有的工作负载了吗?我们的[迁移指南](https://docs.lakesail.com/sail/latest/introduction/migrating-from-spark/)将向您展示如何操作。
## 延伸阅读
- [架构](https://docs.lakesail.com/sail/latest/concepts/architecture/) – 概述 Sail 在本地和集群模式下的设计,以及它如何在两者之间无缝切换。
- [查询计划](https://docs.lakesail.com/sail/latest/concepts/query-planning/) – 详细解释 Sail 如何解析 SQL 和 Spark 关系,构建逻辑和物理计划,并处理本地和集群模式下的执行。
- [SQL](https://docs.lakesail.com/sail/latest/guide/sql/) 和 [DataFrame](https://docs.lakesail.com/sail/latest/guide/dataframe/) 功能 – Spark SQL 和 DataFrame API 兼容性的完整参考。
- [LakeSail 博客](https://lakesail.com/blog/) – 关于 Sail 版本发布、基准测试和技术洞察的最新动态。
**✨正在使用 Sail?[分享您的故事](https://lakesail.com/share-story/)并获取免费周边!✨**
标签:AI工作负载, ClickBench基准测试, Databricks替代, DataFrame API, LakeSail, Python包, Rust-native, Rust实现, Snowflake替代, Spark Connect协议, Spark SQL, Spark兼容, 代码示例, 内存安全, 分布式计算框架, 可视化界面, 大数据计算, 子域名突变, 开源框架, 恶意软件检测, 批处理, 持续集成, 数据分析, 无JVM开销, 替代Spark, 流处理, 统一计算引擎, 逆向工具, 通知系统, 降低基础设施成本, 高性能计算