有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Spark使用Java没有可用的实时SolrServer来处理此请求

完整代码

public class SolrToMongodb {

private static final Logger LOGGER = LoggerFactory.getLogger(SolrToMongodb.class);
public static void main(String[] args) throws IOException, SolrServerException {
    SolrToMongodb main = new SolrToMongodb();
    main.run();
}

public void run() throws IOException, SolrServerException {
    SparkConfig config = new SparkConfig();
    JavaSparkContext jsc = new JavaSparkContext(config.sparkConf("admiralty-stream"));

    SolrClient client = new HttpSolrClient(Constant.SOLR_STREAMING);
    SolrQuery q = new SolrQuery();
    q.set("q","*:*");
    q.set("indent","on");
    q.set("wt", "json");

    client.query(q);


    try {
        CloudSolrClient cloudSolrClient = new CloudSolrClient(Constant.ZOOKEEPER_SOLR);

        SolrJavaRDD solrRDD = SolrJavaRDD.get(cloudSolrClient.getZkHost(), "admiraltyStream", jsc.sc());

        JavaRDD<SolrDocument> resultsRDD = solrRDD.queryShards(q);

        JavaRDD<Object> objectJavaRDD = resultsRDD.map(new Function<SolrDocument, Object>() {

            @Override
            public Object call(SolrDocument v1) throws Exception {
                System.out.println(v1.getFieldValueMap());
                return v1.getFieldValueMap();
            }
        });

    }
    catch (Exception e){
        System.out.println("Exception here : "+e.getMessage());
    }
}}

错误日志:

2017-08-02 10:02:58,709 [main] ERROR CloudSolrClient - Request to collection admiraltyStream failed due to (0) java.net.ConnectException: Connection refused (Connection refused), retry? 0 2017-08-02 10:02:59,688 [main] ERROR CloudSolrClient - Request to collection admiraltyStream failed due to (0) java.net.ConnectException: Connection refused (Connection refused), retry? 1 2017-08-02 10:03:01,630 [main] ERROR CloudSolrClient - Request to collection admiraltyStream failed due to (0) java.net.ConnectException: Connection refused (Connection refused), retry? 2 2017-08-02 10:03:02,579 [main] ERROR CloudSolrClient - Request to collection admiraltyStream failed due to (0) java.net.ConnectException: Connection refused (Connection refused), retry? 3 2017-08-02 10:03:03,540 [main] ERROR CloudSolrClient - Request to collection admiraltyStream failed due to (0) java.net.ConnectException: Connection refused (Connection refused), retry? 4 2017-08-02 10:03:04,484 [main] ERROR CloudSolrClient - Request to collection admiraltyStream failed due to (0) java.net.ConnectException: Connection refused (Connection refused), retry? 5

例外情况:

Exception here : No live SolrServers available to handle this request:[http://xxx.xxx.ph:8983/solr/admiraltyStream, http://xxx.xxx.ph:8983/solr/admiraltyStream, http://xxx.xxx.ph:8983/solr/admiraltyStream]

共 (1) 个答案

  1. # 1 楼答案

    使用CloudSolrClient而不是HttpSolrClient可以让solrj在可用的solr服务器之间进行循环负载平衡,当然,在SolrCloud环境中也建议这样做。“No live SolrServers”消息表明集合AdmiraltStream存在问题

    具体来说,SolrJ在幕后使用LBHttpSolrClient(它使用一组HttpSolrClient实例)来处理碎片之间的循环请求。我认为你的问题实际上是这样的:一些碎片不可用(即领导者和复制品)

    我将回顾当前在线的副本(http://solr.server:8983/#/~cloud):在那里,你应该看到你的收藏的所有副本是否在线
    每个碎片必须至少有一个副本;我认为在你的情况下:

    • 您试图使用HttpSolrClient直接连接的节点已启动并正在运行
    • 当使用CloudSolrClient(即Zookeeper->;Solr)时,集群状态有问题:Solr认为至少一个碎片没有副本,因此给定的LBHttpSolrClient实例中可用的HttpSolrClient实例列表为空