spark-sense-ai
spark-sense-ai
MCP-сервер (Model Context Protocol), который предоставляет AI-агентам — Claude Desktop, Claude Code, Devin или любому MCP-совместимому клиенту — две возможности для работы с задачами Apache Spark:
🔴
diagnose_spark_failure— задача Spark завершилась с ошибкой; получите первопричину и конкретное исправление, основанное на фактическом журнале ошибок и конкретном коде, который не сработал.🟢
optimize_spark_performance— задача Spark выполнилась, но работает медленно или требует больших затрат; получите адресные рекомендации по настройке, основанные на фактах.
Создан инженером данных с 12+ годами практического опыта работы с Apache Spark, чтобы перенести тот самый инстинкт отладчика — «о каком именно файле на самом деле говорит эта ошибка и почему» — в процесс с использованием ИИ.
Зачем это нужно
Сбои Spark обычно можно диагностировать по одному лишь журналу, но чтение стек-трейса на 200 строк, сопоставление его с нужным файлом в большой кодовой базе с множеством задач и понимание, какая из дюжины возможных причин действительно имеет место, требует реального опыта работы со Spark. Этот инструмент автоматизирует этот первый этап: он находит релевантный код (а не весь репозиторий), передаёт его LLM вместе с журналом и возвращает структурированный диагноз, который можно проверить и на основе которого можно действовать.
Чем он отличается
Особенность дизайна | Почему это важно |
Не зависит от источника — EMR (ID кластера + шага) или локальная папка | Работает независимо от того, выполняется ли ваша задача в AWS или локально/on-prem |
Не зависит от провайдера — Bedrock, Anthropic, OpenAI или ничего | Отсутствие привязки к вендору; |
Умный выбор файлов | В крупных проектах выполняется много задач — этот инструмент разбирает стек-трейс из журнала ошибок (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Обратите внимание: инструмент автоматически подтянул CustomerHelper.scala (файл, на который на самом деле указывает Caused by из трейса), а не весь проект и даже не корневой входной файл CustomerOrderJoin.scala — потому что парсер стек-трейса определил самый глубокий значимый фрейм.
Установка
pip install spark-sense-aiУстанавливайте дополнительные зависимости только под то, что реально будете использовать:
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] # everythingprovider="none" с source_type="local" вообще не требует дополнительных зависимостей — только базовую зависимость mcp.
Четыре способа использования
# | Источник журнала/кода | LLM-провайдер | Требуются доп. зависимости | Нужны ли учётные данные AWS? |
1 | Кластер EMR + шаг | Bedrock |
| Да — для получения и диагностики |
2 | Кластер EMR + шаг | Anthropic / OpenAI |
| Да — только для получения |
3 | Локальная папка | Нет (агент анализирует сам, например внутри Devin) | нет | Нет |
4 | Локальная папка | 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-mcpDevin
См. документацию Devin по MCP — там описан актуальный способ настройки для вашего режима агента Devin (Cascade и Devin Local используют немного разные расположения конфигурации). Укажите команду 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
Параметр | Обязательный | Примечания |
| Да |
|
| Если | |
| Если | |
| Нет | S3 URI исходного кода |
| Если | Файл или папка |
| Нет | Локальная папка с исходным кодом |
| Нет | Конкретное имя файла или относительный путь для прямого использования, без автоматического извлечения — лучше всего, когда вы уже знаете, какая задача не сработала |
| Нет (по умолчанию |
|
| Нет | Для anthropic/openai; в противном случае читает |
optimize_spark_performance
Те же параметры, что и выше, плюс:
Параметр | Обязательный | Примечания |
| Нет | Память исполнителя, ядра, количество партиций при shuffle и т.д. |
Логика выбора файлов (для обоих инструментов)
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Переменные окружения
Переменная | По умолчанию | Назначение |
|
| Регион для вызовов EMR/S3/Bedrock |
|
| Модель Bedrock для использования |
| — | Используется, если |
| — | Используется, если |
Тестирование
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Оба скрипта сначала выполняют бесплатную проверку без вызовов API (provider="none"), прежде чем совершать какие-либо платные вызовы LLM.
Дорожная карта
Автоматический запуск через Lambda/EventBridge по завершении задач EMR/Glue
Databricks как третий
source_typeИнтеграция со структурированным API Spark History Server
Обнаружение перекоса данных с помощью статистики на уровне партиций
Лицензия
MIT — см. LICENSE.
This server cannot be installed
Maintenance
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
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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