在对Solr进行几次成功更新后,抛出SolrException:java.util.concurrent.TimeoutException:无法连接到ZooKeeper

时间:2018-09-20 06:57:22

标签: apache-zookeeper solrj solrcloud

我正在使用solr 7.3.1版,并将其与3个外部Zookeeper节点一起使用。

下面是我对一个节点的zookeeper配置,所有配置都相似:

tickTime=2000

initLimit=10
syncLimit=5
dataDir=/Users/<user>/zookeeper/zookdata/zk2/
clientPort=2182

server.1=localhost:2666:3666
server.2=localhost:2667:3667
server.3=localhost:2668:3668

然后,我正在使用这3个节点来启动solr。在我的应用程序中,我使用localhost:2182,localhost:2183使用以下代码连接到solr。

List<String> zkHosts = Arrays.asList(solrZkHostPort.split(","));
    CloudSolrClient.Builder builder = new CloudSolrClient.Builder(zkHosts, Optional.empty());
    solrClient = builder.build();

我正在使用多个spark执行程序将文档更新为solr。更新失败后出现以下异常,对于某些1100-1300条记录的更新工作正常:

Caused by: org.apache.solr.common.SolrException: java.util.concurrent.TimeoutException: Could not connect to ZooKeeper localhost:2182,localhost:2183 within 10000 ms
    at org.apache.solr.common.cloud.SolrZkClient.<init>(SolrZkClient.java:183)
    at org.apache.solr.common.cloud.SolrZkClient.<init>(SolrZkClient.java:120)
    at org.apache.solr.common.cloud.SolrZkClient.<init>(SolrZkClient.java:110)
    at org.apache.solr.common.cloud.ZkStateReader.<init>(ZkStateReader.java:285)
    at org.apache.solr.client.solrj.impl.ZkClientClusterStateProvider.connect(ZkClientClusterStateProvider.java:155)
    at org.apache.solr.client.solrj.impl.CloudSolrClient.connect(CloudSolrClient.java:399)
    at org.apache.solr.client.solrj.impl.CloudSolrClient.requestWithRetryOnStaleState(CloudSolrClient.java:828)
    at org.apache.solr.client.solrj.impl.CloudSolrClient.request(CloudSolrClient.java:818)
    at org.apache.solr.client.solrj.SolrRequest.process(SolrRequest.java:194)
    at org.apache.solr.client.solrj.SolrClient.add(SolrClient.java:106)
    at com.package.SomeApplicationClass
    ... 16 more
Caused by: java.util.concurrent.TimeoutException: Could not connect to ZooKeeper localhost:2182,localhost:2183 within 10000 ms
    at org.apache.solr.common.cloud.ConnectionManager.waitForConnected(ConnectionManager.java:232)
    at org.apache.solr.common.cloud.SolrZkClient.<init>(SolrZkClient.java:175)
    ... 26 more

我也低于异常,虽然不确定是否有意义:

18/09/20 12:45:40 WARN ClientCnxn: Session 0x0 for server localhost/127.0.0.1:2183, unexpected error, closing socket connection and attempting reconnect

    java.io.IOException: Connection reset by peer
        at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
        at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39)
        at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
        at sun.nio.ch.IOUtil.read(IOUtil.java:192)
        at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380)
        at org.apache.zookeeper.ClientCnxnSocketNIO.doIO(ClientCnxnSocketNIO.java:68)
        at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:366)
        at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1081)

知道是什么问题吗?我需要更改zookeeper配置,还是我创建Solr客户端的方式需要更改?

1 个答案:

答案 0 :(得分:0)

菜鸟的错误。

我的spark工作正在创建超过1000个spark执行程序,并且对于每个执行程序,正在创建solr客户端,而我没有关闭solrClient。执行程序完成后关闭solrclient。