使用Solr 5.4.1与Apache Nutch 1.12索引失败报错求助
解决Nutch 1.12索引Solr 5.4.1时的Job Failed问题
我之前也踩过Nutch 1.12对接Solr 5.4.1的坑,碰到过一模一样的Indexer: java.io.IOException: Job failed错误,结合实际排查经验,给你梳理几个核心方向:
1. 排查Solr连接配置冲突
这是最常见的错误点:
- 如果你用的是单机Solr,只需要配置
solr.server.url,删掉solr.zookeeper.hosts; - 如果是SolrCloud模式,只保留
solr.zookeeper.hosts,去掉solr.server.url。
两者同时配置会让Nutch不知道该用哪种连接方式,直接导致索引Job失败。
2. 校验字段映射与Solr Schema匹配
打开你配置的solr.mapping.file(默认是solrindex-mapping.xml),逐一核对里面的字段:
- 确保Nutch要索引的字段(比如
url、title、content、host等)在Solr核心的schema.xml(或managed-schema)中都存在; - 字段类型必须匹配:比如Nutch的
content是文本类型,Solr里不能定义成int或其他不兼容类型。
你可以查看Nutch的logs/nutch.log或Hadoop的Job日志,里面会明确提示“字段不存在”或“类型不匹配”这类具体错误。
3. 调整批量提交参数
如果你的抓取数据单条内容过大(比如长文本网页),默认的solr.commit.size=1000可能会导致批量提交超时。试试把这个值调小,比如改成200:
solr.commit.size=200
减少单次提交的数据量,降低Solr的处理压力。
4. 检查Solr认证配置
如果你的Solr开启了身份验证(比如Basic Auth):
- 必须把
solr.auth设为true; - 完整配置
solr.auth.username和solr.auth.password(你之前的配置里没写完密码项,别漏了)。
如果Solr没开认证,就保持solr.auth=false,多余的认证配置会导致连接失败。
5. 查看Hadoop Job的详细日志
Job failed只是表层错误,真正的原因藏在Hadoop的Task日志里:
- 打开Hadoop的Web UI(默认端口8088),找到失败的索引Job;
- 查看对应的Map/Reduce Task日志,里面会有完整的异常栈信息,比如Solr连接超时、权限不足、核心未启动等。
这是定位问题最精准的方法,我之前就是通过日志发现Solr核心因为磁盘满了处于不可用状态,清理磁盘后就正常了。
6. 确认Solr核心状态
先手动访问Solr的管理界面,比如http://your-solr-ip:8983/solr:
- 查看目标核心的状态是否为
active; - 测试核心的
select和update接口是否正常,确保Solr本身没有故障。
内容的提问来源于stack exchange,提问作者Aditya Parmar
相关产品推荐
相关产品推荐

