Skip to main content
Glama

spark-sense-ai

License: MIT Python 3.10+

MCP(Model Context Protocol)サーバー — AIエージェント(Claude Desktop、Claude Code、Devin、またはMCP互換クライアント)に、Apache Sparkジョブを扱うための2つの機能を提供します:

  • 🔴 diagnose_spark_failure — Sparkジョブが失敗しました。実際のエラーログと失敗した特定のコードに基づいて、根本原因と具体的な修正方法を取得します。

  • 🟢 optimize_spark_performance — Sparkジョブは成功したが、遅い、またはコストがかかる場合。的を絞った、エビデンスに基づくチューニングの推奨事項を取得します。

Apache Sparkの実務経験12年以上を持つデータエンジニアによって構築され、「このエラーは実際にはどのファイルに関するもので、なぜなのか」というデバッグの勘所をAI支援ワークフローに取り込みます。


なぜこれが必要か

Sparkの障害は通常、ログだけでも診断可能です。しかし、200行のスタックトレースを読み、大規模で複数のジョブを含むコードベース内の正しいファイルに対応付け、十数ある可能性のある原因のうち実際にどれなのかを判断するには、本物のSpark経験が必要です。このツールはその最初のパスを自動化します。関連するコード(リポジトリ全体ではなく)を特定し、ログと一緒にLLMに渡し、検証して対処できる構造化された診断結果を返します。


他との違い

設計上の選択

重要な理由

ソース非依存 — EMR(クラスター + ステップID)またはローカルフォルダ

ジョブがAWS上でもオンプレミス/ローカルでも動作します

プロバイダー非依存 — Bedrock、Anthropic、OpenAI、またはなし

ベンダーロックインなし。provider="none" の場合、呼び出し元エージェント(例:Devin)が取得したコンテンツ自体を推論でき、このサーバーはLLM呼び出しを一切行いません

スマートなファイル選択

大規模プロジェクトでは多数のジョブが実行されます。このツールはエラーログのスタックトレース(Python および Scala/Java、混合PySparkトレースを含む)を解析し、失敗に関係する特定のファイルのみを最大10ファイルまで取り込みます。コードベース全体をプロンプトにダンプすることはありません

認証情報を一切バンドルしない

すべてのユーザーが自身のAWSおよび/またはLLM認証情報を持ち込みます。ここではユーザー間で課金やアクセスを共有することは一切ありません


出力例

このサンプルScalaエラーログ とその対応するプロジェクトファイル を指定すると、diagnose_spark_failure(プロバイダー設定済み)は次を返します:

ROOT CAUSE:
CustomerHelper.validate() calls .trim() on the "email" field without
checking for null first. Records with a missing email cause a
NullPointerException, which aborts the job after 4 failed task retries.

EVIDENCE:
- Caused by: java.lang.NullPointerException: Cannot invoke "String.trim()"
  because "email" is null
- at com.company.jobs.CustomerHelper$.validate(CustomerHelper.scala:22)
- Source shows: email.trim().nonEmpty with no null check beforehand

SUGGESTED FIX:
def validate(row: Row): Boolean = {
  val email = Option(row.getAs[String]("email"))
  email.exists(_.trim.nonEmpty)
}

CONFIDENCE: High

このツールが、トレースの Caused by が実際に指すファイル CustomerHelper.scala を自動的に取り込んでいることに注目してください。プロジェクト全体や、最上位のエントリファイル CustomerOrderJoin.scala ではなく。スタックトレースパーサーが最も深い関連フレームを解決したためです。


インストール

pip install spark-sense-ai

実際に使用する分のextrasだけをインストールしてください:

pip install spark-sense-ai[aws]         # for EMR source or Bedrock provider
pip install spark-sense-ai[anthropic]   # for provider="anthropic"
pip install spark-sense-ai[openai]      # for provider="openai"
pip install spark-sense-ai[all]         # everything

provider="none"source_type="local" の組み合わせは、extrasを一切必要としません。ベースの mcp 依存関係のみで十分です。


4つの利用方法

#

ログ/コードソース

LLMプロバイダー

必要なextras

AWS認証情報が必要?

1

EMRクラスター + ステップ

Bedrock

[aws]

はい — 取得および診断のため

2

EMRクラスター + ステップ

Anthropic / OpenAI

[aws] + [anthropic|openai]

はい — 取得のみ

3

ローカルフォルダ

なし(エージェントが推論、例:Devin内)

なし

いいえ

4

ローカルフォルダ

Anthropic / OpenAI

[anthropic|openai]

いいえ

AWS認証情報は、必要な場合、既存の設定(aws configure、アタッチされたIAMロール、標準のAWS_*環境変数など)から自動的に取得されます。ツールのパラメータとして渡されることは決してありません


セットアップ

Claude Desktop

claude_desktop_config.json を編集:

{
  "mcpServers": {
    "sparksense": {
      "command": "sparksense-mcp",
      "env": {
        "SPARKSENSE_AWS_REGION": "ap-south-1"
      }
    }
  }
}

Claude Code

claude mcp add sparksense -- sparksense-mcp

Devin

お使いのDevinエージェントモード(CascadeとDevin Localでは構成ファイルの場所が少し異なります)の現在の構成方法については、DevinのMCPドキュメント を参照してください。上記と同じ方法で sparksense-mcp コマンドを指定します。


使用例

「Sparkジョブが失敗しました — EMRクラスター j-ABC123、ステップ s-XYZ789。sparksenseを使ってBedrockで診断してください。」

「ローカルジョブのログは ./logs/error.log、コードは ./src にあります — 失敗を診断してください。」

「失敗したのは jobs/customer_order_join.py だとわかっています — それをエントリポイントとしてsparksenseを使ってください。」

「sparksenseを使って ./logs/job.log のログを取得してください — 自分で確認します。」 provider="none" — ツールは取得するだけで、推論は呼び出し元エージェントが行います)

「ジョブは成功しましたが、40分かかりました。最適化の機会がないか、sparksenseで実行統計を確認してください。」


ツールリファレンス

diagnose_spark_failure

パラメータ

必須

備考

source_type

はい

"emr" または "local"

emr_cluster_id

source_type="emr" の場合

emr_step_id

source_type="emr" の場合

s3_project_location

いいえ

ソースコードへのS3 URI

local_log_path

source_type="local" の場合

ファイルまたはフォルダ

local_project_path

いいえ

ローカルのソースコードフォルダ

job_entry_point

いいえ

自動抽出をスキップして直接使用する特定のファイル名/相対パス — 失敗したジョブがすでにわかっている場合に最適

provider

いいえ(デフォルト "none"

"bedrock" / "anthropic" / "openai" / "none"

api_key

いいえ

anthropic/openai用。それ以外の場合は ANTHROPIC_API_KEY / OPENAI_API_KEY を読み取ります

optimize_spark_performance

上記と同じパラメータに加えて:

パラメータ

必須

備考

current_spark_config

いいえ

エグゼキューターのメモリ、コア数、シャッフルパーティション数など

ファイル選択ロジック(両ツール共通)

1. job_entry_point given?
     → use ONLY that file. No auto-extraction.

2. Else, parse the error log for:
     → Python:      File "<path>", line <N>
     → Scala/Java:  at <package>.<Class>.<method>(<Filename>:<N>)
     (handles mixed PySpark traces — Python frames bottoming into JVM
     frames — by scanning for both patterns in the same log)
     → filters out framework/library internals (site-packages, pyspark,
       org.apache.spark, scala.*, java.*, etc.)
     → fetches up to 10 matched files

3. Else, fallback: broad scan of the project folder, capped at 10 files

環境変数

変数

デフォルト

目的

SPARKSENSE_AWS_REGION

ap-south-1

EMR/S3/Bedrock呼び出しのリージョン

SPARKSENSE_BEDROCK_MODEL_ID

global.anthropic.claude-haiku-4-5-20251001-v1:0

使用するBedrockモデル

ANTHROPIC_API_KEY

provider="anthropic" かつ api_key パラメータが指定されていない場合に使用

OPENAI_API_KEY

provider="openai" かつ api_key パラメータが指定されていない場合に使用


テスト

git clone https://github.com/YOUR_GITHUB_USERNAME/spark-sense-ai.git
cd spark-sense-ai
pip install -e ".[all]"

# Local source + Anthropic provider, includes Python and Scala samples
export ANTHROPIC_API_KEY="sk-ant-..."
python tests/test_local_anthropic.py

# EMR source + Bedrock provider (needs a real EMR cluster/step)
aws configure
python tests/test_emr_bedrock.py --cluster-id j-XXXXXXX --step-id s-XXXXXXX

どちらのスクリプトも、有料のLLM呼び出しを行う前に、無料のAPI呼び出しなしの健全性チェック(provider="none")を最初に実行します。


ロードマップ

  • EMR/Glueジョブ完了時のLambda/EventBridgeによる自動トリガー

  • 3つ目の source_type としてのDatabricks

  • 構造化されたSpark History Server APIの統合

  • パーティションレベルの統計によるスキュー検出

ライセンス

MIT — LICENSE を参照してください。

-
license - not tested
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • MCP server providing access to the Scorecard API to evaluate and optimize LLM systems.

  • MCP server for AI dialogue using various LLM models via AceDataCloud

  • Cloud-hosted MCP server for durable AI memory

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sun7singh/spark-sense-ai'

If you have feedback or need assistance with the MCP directory API, please join our Discord server