2016-08-23 53 views
0

我在azure上有3個主節點+3個數據節點elasticsearch集羣。我試圖執行批量操作,但我得到失敗有關節點本身的錯誤,這裏是我的設置怎麼我的客戶:elasticsearch對批量操作沒有響應

final Builder builder = Settings.builder(); 
    final org.elasticsearch.client.transport.TransportClient.Builder transBuilder = TransportClient.builder(); 
    builder.put("cluster.name", esCluster); 
    if (esShield) { 
     builder.put("shield.user", esUsername + ":" + esPassword); 
     transBuilder.addPlugin(ShieldPlugin.class); 
    } 
    final Settings settings = builder.build(); 
    TransportClient esClient = transBuilder.settings(settings).build(); 
    final String[] hosts = esHost.split(","); 
    for (String host : hosts) { 
     esClient.addTransportAddress(new InetSocketTransportAddress(new InetSocketAddress(host, Integer.parseInt(esPort)))); 
    } 

這裏是批量操作:

BulkProcessor bulkProcessor = BulkProcessor.builder(getClient(), new BulkProcessor.Listener() { 
     @Override 
     public void beforeBulk(long executionId, BulkRequest request) { 
      LOGGER.info("Going to execute new bulk composed of {" + request.numberOfActions() + "} actions"); 
     } 

     @Override 
     public void afterBulk(long executionId, BulkRequest request, BulkResponse response) { 
      LOGGER.info("Executed bulk composed of {" + request.numberOfActions() + "} actions"); 
     } 

     @Override 
     public void afterBulk(long executionId, BulkRequest request, Throwable failure) { 
      LOGGER.info("Error executing bulk"); 
      failure.printStackTrace(); 
     } 
    }).setBulkActions(docs.size()).setConcurrentRequests(250).build(); 
    for (DBObject doc : docs) { 
     bulkProcessor.add(getClient().prepareIndex(indexName, typeName).setSource(doc.toMap()).request()); 
    } 

它開始爲應對精細1000記錄批這樣的:

Going to execute new bulk composed of {1001} actions

Executed bulk composed of {1001} actions

然後,我開始收到以下錯誤:

怎麼回事,如何解決它

bulk:148 - [Stanley Stewart] Failed to execute bulk request 1. NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{10.0.0.10}{10.0.0.10:9300}, {#transport#-2}{10.0.0.11}{10.0.0.11:9300}, {#transport#-3}{10.0.0.12}{10.0.0.12:9300}]] at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:290) at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:207) at org.elasticsearch.client.transport.support.TransportProxyClient.execute(TransportProxyClient.java:55) at org.elasticsearch.client.transport.TransportClient.doExecute(TransportClient.java:288) at org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:359) at org.elasticsearch.client.support.AbstractClient.bulk(AbstractClient.java:436) at org.elasticsearch.action.bulk.Retry$AbstractRetryHandler.execute(Retry.java:219) at org.elasticsearch.action.bulk.Retry.withAsyncBackoff(Retry.java:72) at org.elasticsearch.action.bulk.BulkRequestHandler$AsyncBulkRequestHandler.execute(BulkRequestHandler.java:121) at org.elasticsearch.action.bulk.BulkProcessor.execute(BulkProcessor.java:312) at org.elasticsearch.action.bulk.BulkProcessor.executeIfNeeded(BulkProcessor.java:303) at org.elasticsearch.action.bulk.BulkProcessor.internalAdd(BulkProcessor.java:285) at org.elasticsearch.action.bulk.BulkProcessor.add(BulkProcessor.java:268) at org.elasticsearch.action.bulk.BulkProcessor.add(BulkProcessor.java:264) at org.elasticsearch.action.bulk.BulkProcessor.add(BulkProcessor.java:250)

有人可以幫我弄清楚:

最後我得到了下面的錯誤?

+0

從我的經驗來看,ES中的批量操作相當脆弱。我不知道Azure,但通過我的內部安裝,我爲ES提供了儘可能多的內存。然後,我嘗試了單個批量的大小和批量之間的時間間隔。在你的情況下,儘量減少批量說100個文檔,並介紹時間間隔說1秒。試用它。 –

回答