集群管理MCP
一个MCP(模型上下文协议)服务器,它公开了一个自建和托管的Spark集群,作为一组可由LLM调用的工具。通过Ollama运行的Qwen2.5:1.5b的本地实例解释自然语言提示,并提交Spark作业提交的工具调用,并通过Wifi网络进行集群健康检查。
动机
云基础设施抽象了硬件约束、网络拓扑和资源分配。该工具旨在在本地编排一个真实的端到端机器学习工作负载,揭示构建一个功能集群所需的深思熟虑的选择,例如哪个节点作为Spark主节点运行,哪个节点可以作为Kafka节点,以及如何在保持执行环境稳定的同时提交作业。该工具演示了如何使用LLM来监控这些指标,并通过自然语言执行作业。
火花组规格
硬件
| 角色 | 硬件 | 操作系统 |
|---|---|---|
| 头节点/Spark主站 | 联想PC | Ubuntu 24.04 |
| Spark workers(×3) | Raspberry Pi 3B+ | Ubuntu |
| Kafka代理 | 树莓派3 | Ubuntu |
| 边缘推理主机 | NVIDIA Jetson Nano | Ubuntu |
该集群是自组装和自我管理的。节点配置为 通过以下方式处理 spark-env.sh 在头节点上。
架构规范
User (natural language prompt)
│
▼
Qwen2.5:1.5b via Ollama ◄──► MCP Server (tool definitions)
│
┌───────────────┼───────────────┐
▼ ▼ ▼
Spark REST API Prometheus API SSH / shell
(job submission) (health metrics) (start/stop)目前,本地实例Qwen2.5:1.5b用于托管Ollama,同时运行MCP服务器,该服务器通过本地Wifi网络向Spark头节点提交作业。还配置了远程作业提交的端口转发。MCP服务器目前支持对集群进行健康检查,如每个节点的CPU负载、内存使用情况以及通过对本地运行的Prometheus服务器的API调用检索的节点数量。
支持集群启动和拆除,在头节点上的spark-env.sh文件中指定了可用节点的正确配置。
示例:LLM驱动的作业提交
例如:“请在1000次试验中模拟一场有5名攻击者和3名防御者的风险战。”
Qwen2.5将此请求解释为提交 “风险滚动模拟” 将作业与适当的输入参数一起发送到集群,并存储在主节点上进行分析。这项工作模拟了游戏“风险”中不同数量的攻击者和防御者的战斗场景的获胜概率。
未来工作
作业结果当前未返回给LLM。而是写在磁盘上,供以后分析和绘图。在作业执行完毕后,创建实时解释结果的功能是这项工作的下一步。
堆栈
- 编排: Apache Spark(独立集群模式)
- 消息: Apache Kafka
- LLM运行时: 奥利玛(问题2.5:1.5b)
- 工具协议: MCP(模型上下文协议)
- 监控: 普罗米修斯,格拉法纳
- 边缘推断: NVIDIA Jetson Nano上的FastAPI
- 网络: 本地Wi-Fi,用于远程访问的端口转发
