我在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)
有人可以帮我弄清楚:
最后我得到了下面的错误?
从我的经验来看,ES中的批量操作相当脆弱。我不知道Azure,但通过我的内部安装,我为ES提供了尽可能多的内存。然后,我尝试了单个批量的大小和批量之间的时间间隔。在你的情况下,尽量减少批量说100个文档,并介绍时间间隔说1秒。试用它。 –