JobHistory MCP Server

JobHistory MCP Server

Enables AI assistants to query Hadoop MapReduce job history, including job listing, details, counters, configuration, and logs via the JobHistory REST API.

Category
访问服务器

README

JobHistory MCP Server

基于 Hadoop JobHistory Server REST API 的 MCP (Model Context Protocol) 服务器实现。

该服务允许 AI 助手(如 Claude、Cursor)通过 MCP 协议查询 Hadoop MapReduce 作业的历史信息。

功能特性

  • 🔍 作业查询: 列出和搜索 MapReduce 作业,支持多种过滤条件
  • 📊 详细信息: 获取作业、任务、尝试的完整详情
  • 📈 计数器查询: 查看作业和任务的执行统计数据
  • ⚙️ 配置查询: 获取作业运行时的配置参数
  • 📜 日志查询: 获取容器日志内容,支持完整获取和部分读取
  • 🔄 灵活输出: 支持 Markdown(人类可读)和 JSON(程序处理)两种格式

部署方式

方式一:本地部署(stdio 模式)

适合 MCP Server 和客户端在同一台机器上运行。

1. 安装依赖

cd JobHistoryMcpServer
pip install -r requirements.txt

2. 配置环境变量

export JOBHISTORY_URL="http://your-history-server:19888/ws/v1/history"

3. 配置 MCP 客户端

Cursor (~/.cursor/mcp.json):

{
  "mcpServers": {
    "jobhistory_mcp": {
      "command": "python",
      "args": ["/path/to/JobHistoryMcpServer/jobhistory_mcp.py"],
      "env": {
        "JOBHISTORY_URL": "http://your-history-server:19888/ws/v1/history"
      }
    }
  }
}

Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "jobhistory_mcp": {
      "command": "python",
      "args": ["/path/to/JobHistoryMcpServer/jobhistory_mcp.py"],
      "env": {
        "JOBHISTORY_URL": "http://your-history-server:19888/ws/v1/history"
      }
    }
  }
}

方式二:远程服务器部署(HTTP 模式)

适合将 MCP Server 部署在靠近 Hadoop 集群的服务器,本地客户端通过 HTTP 远程连接。

┌─────────────────┐         HTTP          ┌─────────────────┐         HTTP          ┌─────────────────┐
│   本地客户端     │ ◄──────────────────► │   MCP Server    │ ◄──────────────────► │  JobHistory     │
│  (Cursor等)     │      (网络)           │   (远程服务器)   │      (内网)           │   Server        │
└─────────────────┘                       └─────────────────┘                       └─────────────────┘

优势

  • MCP Server 部署在靠近 Hadoop 集群的服务器,网络延迟低
  • 本地客户端无需直接访问 Hadoop 集群
  • 支持多个客户端同时连接

服务器端部署(使用 Conda)

1. 上传项目到服务器
scp -r JobHistoryMcpServer user@server:/app/
2. 创建 Conda 环境并安装依赖
# SSH 登录服务器
ssh user@server

# 创建并激活 conda 环境
conda create -n py310 python=3.10 -y
conda activate py310

# 安装依赖
cd /app/JobHistoryMcpServer
pip install -r requirements.txt
3. 配置环境变量文件

创建 /app/JobHistoryMcpServer/.env

# Hadoop 配置
JOBHISTORY_URL=http://your-hadoop-cluster:19888/ws/v1/history
NODEMANAGER_PORT=8052
REQUEST_TIMEOUT=30.0

# MCP Server 配置
MCP_TRANSPORT=http
MCP_HOST=0.0.0.0
MCP_PORT=8080

# 日志配置
LOG_LEVEL=INFO
LOG_FILE=/app/JobHistoryMcpServer/logs/jobhistory_mcp.log
LOG_MAX_SIZE=268435456
LOG_BACKUP_COUNT=5
LOG_TO_STDERR=true
4. 创建启动脚本

创建 /app/JobHistoryMcpServer/start.sh

#!/bin/bash
# 激活 conda 环境
source /app/miniconda3/etc/profile.d/conda.sh
conda activate py310

# 验证 Python 版本
echo "Python version:"
python --version

# 启动服务
exec python /app/JobHistoryMcpServer/jobhistory_mcp.py --http

添加执行权限:

chmod +x /app/JobHistoryMcpServer/start.sh
5. 配置 systemd 服务

创建 /etc/systemd/system/jobhistory-mcp.service

[Unit]
Description=JobHistory MCP Server
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/app/JobHistoryMcpServer
EnvironmentFile=/app/JobHistoryMcpServer/.env
ExecStart=/app/JobHistoryMcpServer/start.sh
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

启用并启动服务:

sudo systemctl daemon-reload
sudo systemctl enable jobhistory-mcp
sudo systemctl start jobhistory-mcp
sudo systemctl status jobhistory-mcp
6. 验证服务运行
# 检查服务状态
systemctl status jobhistory-mcp

# 检查端口监听
ss -tlnp | grep 8080

# 测试 MCP 端点
curl http://localhost:8080/mcp

本地客户端配置

Cursor (~/.cursor/mcp.json):

{
  "mcpServers": {
    "jobhistory_mcp": {
      "url": "http://your-server-ip:8080/mcp"
    }
  }
}

Claude Desktop

{
  "mcpServers": {
    "jobhistory_mcp": {
      "url": "http://your-server-ip:8080/mcp"
    }
  }
}

安全建议

  1. 防火墙规则:只允许特定 IP 访问 MCP Server 端口

    sudo ufw allow from YOUR_LOCAL_IP to any port 8080
    
  2. 使用 HTTPS:生产环境建议通过 Nginx 反向代理添加 SSL

  3. 网络隔离:将 MCP Server 部署在可访问 Hadoop 集群的内网中

可用工具列表

作业相关

工具名 功能描述
jobhistory_get_info 获取 JobHistory Server 基本信息
jobhistory_list_jobs 列出作业(支持过滤和分页)
jobhistory_get_job 获取作业详情
jobhistory_get_job_counters 获取作业计数器
jobhistory_get_job_conf 获取作业配置
jobhistory_get_job_attempts 获取作业 AM 尝试列表

任务相关

工具名 功能描述
jobhistory_list_tasks 列出作业的任务
jobhistory_get_task 获取任务详情
jobhistory_get_task_counters 获取任务计数器
jobhistory_list_task_attempts 列出任务尝试
jobhistory_get_task_attempt 获取任务尝试详情
jobhistory_get_task_attempt_counters 获取任务尝试计数器

日志相关

工具名 功能描述
jobhistory_get_task_attempt_logs 获取任务尝试的完整日志内容
jobhistory_get_task_attempt_logs_partial 部分读取任务尝试日志(按字节范围)

日志工具使用建议

  1. 优先使用部分读取jobhistory_get_task_attempt_logs_partial 默认读取 syslog 末尾 4KB,通常包含错误信息
  2. 按需调整范围:如果 4KB 不够,可以通过 start 参数调整,如 start=-8192(末尾 8KB)
  3. 完整日志兜底:只有在部分日志无法完成分析时,再使用 jobhistory_get_task_attempt_logs

部分读取参数说明

参数 默认值 说明
start -4096 起始字节位置,负数从末尾倒数
end 0 结束字节位置,0 表示文件末尾
log_type syslog 日志类型

常用场景

# 读取末尾 4KB(默认,适合任务失败分析)
start=-4096

# 读取末尾 8KB
start=-8192

# 读取开头 2KB(查看启动日志)
start=0, end=2048

支持的日志类型

  • stdout - 标准输出
  • stderr - 标准错误
  • syslog - 系统日志(默认)
  • syslog.shuffle - Shuffle 系统日志
  • prelaunch.out - 预启动输出
  • prelaunch.err - 预启动错误
  • container-localizer-syslog - 容器本地化系统日志

使用示例

示例 1: 查询最近的作业

请列出最近 10 个 MapReduce 作业

AI 助手会调用 jobhistory_list_jobs 工具,参数 limit=10

示例 2: 查询失败的作业

查找所有失败的 MapReduce 作业

AI 助手会调用 jobhistory_list_jobs 工具,参数 state="FAILED"

示例 3: 获取作业详情

获取作业 job_1326381300833_2_2 的详细信息

AI 助手会调用 jobhistory_get_job 工具。

示例 4: 分析作业性能

分析作业 job_xxx 的性能,包括任务执行时间和计数器

AI 助手会依次调用多个工具获取全面信息。

示例 5: 查看失败任务的日志

查看作业 job_xxx 失败任务的错误日志

AI 助手会:

  1. 调用 jobhistory_list_tasks 找到失败的任务
  2. 调用 jobhistory_list_task_attempts 找到失败的尝试
  3. 调用 jobhistory_get_task_attempt_logs_partial 读取 syslog 末尾内容分析错误原因

示例 6: 获取容器完整日志

获取 attempt_xxx 的完整 stdout 日志

AI 助手会调用 jobhistory_get_task_attempt_logs 工具,参数 log_type="stdout"

项目结构

JobHistoryMcpServer/
├── README.md                    # 项目说明文档
├── requirements.txt             # Python 依赖
├── jobhistory_mcp.py           # MCP Server 主代码
├── start.sh                     # 启动脚本
├── .env                         # 环境变量配置
└── docs/
    ├── REST_API.md             # JobHistory REST API 文档
    ├── CODE_EXPLANATION.md     # 代码详解
    └── LOGGING.md              # 日志配置指南

环境变量配置

Hadoop 相关

变量 默认值 说明
JOBHISTORY_URL http://localhost:19888/ws/v1/history JobHistory Server REST API 地址
NODEMANAGER_PORT 8052 NodeManager 端口,用于获取容器日志
REQUEST_TIMEOUT 30.0 HTTP 请求超时时间(秒)

MCP Server 相关

变量 默认值 说明
MCP_TRANSPORT stdio 传输模式:stdio(本地)或 http(远程)
MCP_HOST 0.0.0.0 HTTP 模式监听地址
MCP_PORT 8080 HTTP 模式监听端口

日志相关

变量 默认值 说明
LOG_LEVEL INFO 日志级别 (DEBUG/INFO/WARNING/ERROR)
LOG_FILE ./logs/jobhistory_mcp.log 日志文件路径
LOG_MAX_SIZE 268435456 (256MB) 单文件最大大小
LOG_BACKUP_COUNT 5 保留文件数量
LOG_TO_STDERR true 是否输出到 stderr

日志系统

日志系统记录工具调用和 REST 请求,支持滚动日志。每个请求都有唯一的请求 ID 用于追踪。

日志格式示例

2024-01-15 10:30:45 | INFO  | a1b2c3d4 | [TOOL_CALL] jobhistory_list_jobs, params: {"limit": 10}
2024-01-15 10:30:45 | INFO  | a1b2c3d4 | [REST_REQ] GET http://hadoop:19888/ws/v1/history/mapreduce/jobs?limit=10
2024-01-15 10:30:46 | INFO  | a1b2c3d4 | [REST_RSP] 200 OK, size: 1523 bytes, duration: 856.23ms
2024-01-15 10:30:46 | INFO  | a1b2c3d4 | [TOOL_RSP] success, size: 1856 bytes, duration: 892.45ms

详细说明请参考 日志配置指南

文档

依赖

  • Python 3.10+
  • fastmcp >= 2.0.0
  • pydantic >= 2.0.0
  • httpx >= 0.25.0

许可证

MIT License

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选