当前位置: 首页 > news >正文

【MongoDB + Spark】 技术问题汇总与解决方案笔记

场景背景

最近练手项目:Spark 结合 MongoDB 构建商品推荐系统的过程中,过程中出现多种环境配置与兼容性问题,主要涉及 MongoDB 连接、版本兼容性、Casbah 驱动使用问题等。汇总调试过程中遇到的常见错误及其解决方案,供参考复用。


一、MongoDB 无法连接错误

错误现象

com.mongodb.MongoTimeoutException: Timed out after 30000 ms while waiting for a server that matches WritableServerSelector...
Caused by: java.net.UnknownHostException: linux

原因分析

  • MongoDB URI 中使用了错误的主机名 linux
  • 本机没有叫 linux 的 host,也没有在 hosts 文件中做映射

解决方案

// 将配置中的 URI 改为 localhost 或本地 IP
"mongo.uri" -> "mongodb://localhost:27017/orecommender"

检测连接可以拿navicat去连接


二、MongoDB Shell 无法使用 mongosh 命令

错误现象

'mongosh' 不是内部或外部命令

原因分析

  • 安装的是 MongoDB 的旧版本(如 4.x),默认没有 mongosh
  • 环境变量配置可能未添加或路径错误

解决方案

  • 使用 mongo 命令替代 mongosh
  • 检查并添加环境变量 Path:
C:\Program Files\MongoDB\Server\4.4\bin

三、连接正常但执行 .dropCollection() 报错

错误现象

com.mongodb.MongoCommandException: Command failed with error 352: 'Unsupported OP_QUERY command: drop'

原因分析

  • 当前 MongoDB 为 v5.x 或 v6.x
  • 使用的 Casbah 驱动过老,使用了已废弃的 OP_QUERY 协议
  • MongoDB 6.0+ 默认禁用了对旧协议的支持

解决方案

  • 方法一:注释掉 .dropCollection()
// productCollection.dropCollection()
// ratingCollection.dropCollection()
  • 方法二:手动在 Compass 或 mongo shell 中删除集合
use orecommender
db.Product.drop()
db.Rating.drop()
  • 方法三(长期):升级 MongoDB Java 驱动 + 改写为 Mongo Spark Connector 10.x

四、兼容推荐版本说明

组件推荐版本
MongoDB4.2.x 或 4.4.x
Casbah 驱动兼容 Mongo <= 4.4
Spark + Mongo 连接器Mongo Spark Connector 2.4(老版)

五、降级 MongoDB 操作步骤(Windows)

  1. 卸载当前 MongoDB(控制面板)
  2. 下载旧版本(如 MongoDB 4.4):
    • 阿里云镜像:https://developer.aliyun.com/mirror/mongodb
  3. 安装 .msi 并设置为服务
  4. 验证:
mongod -version
mongo

六、配置环境变量路径建议

JAVA_HOME=C:\Program Files\Java\jdk1.8.0_xx
MONGO_BIN=C:\Program Files\MongoDB\Server\4.4\bin
  • 添加到系统 Path:
%JAVA_HOME%\bin
%MONGO_BIN%

相关文章:

  • JavaScript学习教程,从入门到精通,XMLHttpRequest 与 Ajax 请求详解(25)
  • java 富文本转pdf
  • C#源码分析 --- Random
  • 深度解析:基于Python的微信小程序自动化操作实现
  • MySQL存储STM32F407上的HX711数据
  • 高光谱相机在生物医学中的应用:病理分析、智慧中医与成分分析
  • 【C++】模版初阶:函数模板、类模板
  • 1.1 java开发的准备工作(入门)
  • 2025/4/23 心得
  • 使用logrotate实现日志轮转
  • 专题二十:路由策略与策略路由
  • 详解 synchronized 关键字【通俗易懂】
  • GPLT-2025年第十届团体程序设计天梯赛总决赛题解(2025天梯赛题解,266分)
  • nginx部署前端项目时,正常访问前端页面成功后,浏览器刷新报404解决访问
  • Android开发常用外部组件及使用指南(下)
  • 【自我介绍前端界面分享】附源码
  • java后端开发day35--集合进阶(四)--双列集合:MapHashMapTreeMap
  • 深入剖析PHP反弹Shell:OSCP场景下的实现、原理与优化
  • sql 根据时间范围获取每日,每月,年月的模版数据
  • MOS管驱动电路以及阻值选取
  • 牧原股份一季度归母净利润44.91亿元,同比扭亏为盈
  • 夜读丨修车与“不凑合”
  • 国防部就美军“压力测试”大演习答澎湃:中国从来不信邪,不怕打,不怕压
  • 研究显示:日行9000步最高可将癌症风险降低26%
  • 神二十瞄准明日17时17分发射
  • 国防部发布、中国军号及多家央媒官博发祝福海报:人民海军76岁生日快乐