Apache Nutch 2.3.1在SolrCloud模式下执行SolrIndexer时连接被拒
解决Nutch 2.3.1索引Solr 6.6.3 Cloud模式时的连接拒绝问题
我之前在集成Nutch和Solr Cloud的时候也碰到过一模一样的连接报错,结合你给出的错误信息,咱们从几个关键点来排查解决:
1. 先确认Solr Cloud集群是否正常运行
首先得排除Solr服务本身的问题:
- 直接在浏览器访问
http://10.11.22.156:8983/solr,如果能打开Solr Admin UI,说明服务基本正常;如果打不开,先检查Solr进程是否启动,或者集群有没有出现故障。 - 也可以用命令行测试:
curl http://10.11.22.156:8983/solr/admin/collections?action=LIST,如果能返回集群的集合列表,说明Solr服务没问题。
2. 修正Nutch的Solr Cloud配置
因为你用的是Solr Cloud模式,不能直接配置单个Solr节点的地址,必须通过ZooKeeper来发现集群节点:
- 打开Nutch的
conf/nutch-site.xml,检查以下两个配置项:solr.server.url:设置为你要索引的Solr集合名称(比如my_crawled_docs),而不是单个Solr的URL。solr.zookeeper.host:设置为你的ZooKeeper集群地址(比如10.11.22.156:2181,如果是多节点ZK就用逗号分隔,比如10.11.22.156:2181,10.11.22.157:2181)。
- 另外,确保
conf/solrindex-mapping.xml中的字段映射和Solr集合的Schema匹配,避免后续索引时出现字段不匹配的问题。
3. 检查网络和端口连通性
运行Nutch的机器可能无法访问Solr节点的端口:
- 用
ping 10.11.22.156测试网络是否可达,如果不通,先排查网络路由、防火墙设置。 - 用
telnet 10.11.22.156 8983或者nc -zv 10.11.22.156 8983检查8983端口是否开放;同时也要检查ZK的2181端口是否能访问,因为Nutch需要和ZK通信来获取Solr节点信息。 - 如果是云环境,还要检查安全组规则,确保运行Nutch的机器能访问Solr和ZK的端口。
4. 解决版本兼容性问题
Nutch 2.3.1默认的Solr客户端版本比较旧,和Solr 6.6.3可能存在兼容性问题:
- 替换Nutch
lib目录下的Solr相关jar包,比如将旧的solr-solrj-*.jar替换成Solr 6.6.3对应的solr-solrj-6.6.3.jar,同时还要替换相关的依赖包(比如httpclient、httpcore等,最好从Solr 6.6.3的dist目录下复制对应的jar)。
5. 正确执行solrindex命令
针对Solr Cloud模式,推荐使用ZK参数来执行索引命令,示例:
bin/nutch solrindex -Dsolr.zookeeper.host=10.11.22.156:2181 my_crawled_docs -all
如果还是想用Solr URL的方式,需要指定集合的完整URL:
bin/nutch solrindex http://10.11.22.156:8983/solr/my_crawled_docs -all
按照上面的步骤一步步排查,应该就能解决连接拒绝的问题了。
内容的提问来源于stack exchange,提问作者Hafiz Muhammad Shafiq
相关产品推荐
相关产品推荐

