Sail MCP Server for Spark SQL について
Sail は Rust で書かれた Apache Spark のドロップイン代替であり、バッチ処理、ストリーム処理、計算負荷の高い AI ワークロードを統合します。JVM を使わずに既存の PySpark コードを維持したいデータエンジニアを対象としています。
主な機能
- 01Spark Connect プロトコルへの対応
- 02Spark SQL と DataFrame API のサポート
- 03JVM を使わない Rust ネイティブエンジン
- 04Delta Lake と Apache Iceberg のサポート
- 05Apache Arrow ベースのカラムナー実行
活用シーン
- 01コードを書き換えずに PySpark ジョブを Sail へ移行する
- 02Kubernetes のクラスターモードで分散処理を実行する
- 03Python 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 は PyPI から Python パッケージとして入手できます。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。 Sail を Kubernetes にデプロイし、クラスター モードで実行して分散処理を行えます。 Docker イメージのビルドと Kubernetes マニフェスト YAML ファイルの作成手順については、Kubernetes デプロイガイドをご覧ください。
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>
実験的 このスクリプトは、あくまで最初の大まかな確認にのみ使用してください。スクリプトが確認するのは、参照されている PySpark 関数が Sail に_実装されている_かどうかです。動作が同等かどうかは検証しません。DataFrame 操作で使用されている関数を探しますが、Spark SQL の文字列は対象外です。
推奨される移行方法については、移行ガイドをご覧ください。
主な機能
レイクハウス形式とカタログプロバイダー
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 と同じ規約に従います。
Spark に対する Sail の優位性
- Rust ネイティブエンジン。 ガベージコレクションによる一時停止や JVM のメモリ調整が不要で、メモリ使用量も少なく抑えられます。
- カラムナー形式とベクトル化実行。 Apache Arrow と Apache DataFusion を基盤とし、カラムナーのインメモリ形式と SIMD 命令により、非常に高速なクエリ実行を実現します。
- 超高速な Python UDF。 Arrow 配列ポインターによるゼロコピーのデータ共有により、シリアライズのオーバーヘッドなしで Sail 内で Python コードを実行します。
- 高性能なデータシャッフル。 ワーカーが Arrow のカラムナーデータを直接交換することで、結合や集計にかかるシャッフルコストを最小限に抑えます。
- 軽量でステートレスなワーカー。 ワーカーは数秒で起動し、アイドル時のメモリ消費は数メガバイトにとどまります。また、柔軟にスケールすることでクラウドコストを削減し、運用を簡素化します。
- 信頼できる並行性とメモリ安全性。 Rust の所有権モデルにより、ヌルポインター、競合状態、安全でないメモリアクセスを防ぎ、比類のない信頼性を実現します。
既存のワークロードを移行する準備はできていますか?移行ガイド で手順をご確認ください。
ベンチマーク結果
派生 TPC-H の結果では、すべてのクエリで Sail が Apache Spark を上回っています。
- 実行時間:多様な SQL ワークロードで約 10 倍高速です。
- ハードウェアコスト:ピークメモリ使用量を大幅に抑え、シャッフルスピルもゼロにすることで、98%低減します。
| 指標 | Spark | Sail |
|---|---|---|
| クエリ合計時間 | 534.78 s | 52.81 s |
| クエリ高速化率 | 基準 | 176% – 2819% |
| ピークメモリ使用量 | 72 GB | 26 GB |
| ディスク書き込み(シャッフルスピル) | 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 サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。