简体   繁体   中英

ElasticSearch 2.0 Transport Client - No Node Available exception

[Using ElasticSearch version 2.0]

In etc/hosts file "esnode" is mapped to IP address(some other machine where ES is running) as shown

192.168.2.219 esnode

The Transport Client code is ::

public Client getClient() { 
    if ((this.client == null)) { 
        try { 
            Settings settings = Settings.settingsBuilder() 
                    .put("cluster.name", "myclustername").build(); 
            TransportClient tClient = TransportClient.builder().settings(settings).build(); 
            String[] nodes = "esnode:9300".split(COMMA); 
            for (String node : nodes) { 
                String[] hostPort = node.split(COLON); 

                tClient.addTransportAddress(new InetSocketTransportAddress( 
                        InetAddress.getByName(hostPort[0]), Integer.parseInt(hostPort[1]))); 
            } 
            this.client = tClient; 

        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
    } 
    return this.client; 
} 

This client code runs but when executing the below code : this.getClient().prepareGet(indexName, typeName, String.valueOf(id)).get();

The exception is thrown:

NoNodeAvailableException[None of the configured nodes are available: []] 
        at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:280) 
        at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:197) 
        at org.elasticsearch.client.transport.support.TransportProxyClient.execute(TransportProxyClient.java:55) 
        at org.elasticsearch.client.transport.TransportClient.doExecute(TransportClient.java:272) 
        at org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:347) 
        at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:85) 
        at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:59) 
        at org.elasticsearch.action.ActionRequestBuilder.get(ActionRequestBuilder.java:67) 

I have also tried using IPAddress instead of host name. The above code runs properly if

esnode is mapped to 127.0.0.1

Can somebody help...

Setup elasticsearch host ip address to network.host value in elasticsearch.yml

network.host: es_host_ip

This is solve TransportClient NoNodeAvailableException issue.

Check if your elasticsearch server have also version 2.0, if no, upgrade. Client and server must have the same version to work, I don't know why but this solved my problem.

Cheers,

Other reason could be, your Elasticsearch Java client is a different version from your Elasticsearch server .

Elasticsearch Java client version is nothing but your elasticsearch jar version in your code base.

For example: In my code it's elasticsearch-2.4.0.jar

To verify Elasticsearch server version,

$ /Users/kkolipaka/elasticsearch/bin/elasticsearch -version Version: 5.2.2, Build: f9d9b74/2017-02-24T17:26:45.835Z, JVM: 1.8.0_111

As you can see, I've downloaded latest version of Elastic server 5.2.2 but forgot to update the ES Java API client version 2.4.0 https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/client.html

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM