2017-08-02 53 views
0

全碼星火使用Java - 沒有可用來處理此請求

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()); 
    } 
}} 

錯誤日誌直播SolrServers: - 請求58709 [主]錯誤CloudSolrClient:

2017年8月2日10:02收集admiraltyStream因(0)java.net.ConnectException失敗:連接拒絕(Connection refused),重試? 0 2017-08-02 10:02:59,688 [main] ERROR CloudSolrClient - 請求集合admiraltyStream失敗,原因是(0)java.net.ConnectException:連接拒絕(Connection refused),重試? 1 2017-08-02 10:03:01,630 [main]錯誤CloudSolrClient - 請求收集admiraltyStream失敗,原因是(0)java.net.ConnectException:連接被拒絕(連接被拒絕),重試? 2 2017-08-02 10:03:02,579 [main] ERROR CloudSolrClient - 請求集合admiraltyStream失敗,原因是(0)java.net.ConnectException:連接被拒絕(連接被拒絕),重試? 3 2017-08-02 10:03:03,540 [main] ERROR CloudSolrClient - 請求集合admiraltyStream失敗,原因是(0)java.net.ConnectException:連接拒絕(Connection refused),重試? 4 2017-08-02 10:03:04,484 [main] ERROR CloudSolrClient - 請求收集admiraltyStream失敗,原因是(0)java.net.ConnectException:連接被拒絕(連接被拒絕),重試? 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] 

回答

0

使用CloudSolrClient代替HttpSolrClient允許solrj做循環負載可用solr的服務器之間的平衡,當然在SolrCloud上下文推薦。 SolrJ使用LBHttpSolrClient(它使用一組HttpSolrClient實例)來處理分片之間的循環請求,我認爲這是一個問題,因爲SolrJ在使用LBHttpSolrClient(使用一組HttpSolrClient實例)您的問題實際上是這樣的:一些碎片不可用(即領導和副本)

我會檢討目前的在線副本(http://solr.server:8983/#/~cloud):有你應該看到,如果所有的副本爲您收集網上
每個分片必須至少有一個副本;我認爲在您的情況下:

  • 當您嘗試使用HttpSolrClient直接連接的節點啓動並運行時
  • 當使用CloudSolrClient(即, Zookeeper - > Solr)中,您的羣集狀態有問題:Solr認爲至少有一個分片沒有副本,因此LBHttpSolrClient的給定實例中的可用HttpSolrClient實例列表爲空