org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: []

谁都会走 提交于 2019-12-23 16:38:59

问题


I am running ElasticSearch on Docker which is available locally as

$ curl http://192.168.99.100:9200/?pretty
{
  "status" : 200,
  "name" : "Collector",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "1.4.4",
    "build_hash" : "c88f77ffc81301dfa9dfd81ca2232f09588bd512",
    "build_timestamp" : "2015-02-19T13:05:36Z",
    "build_snapshot" : false,
    "lucene_version" : "4.10.3"
  },
  "tagline" : "You Know, for Search"
}

I am using Elastic4s, for connecting to ElasticSearch, I tried following approach, but all of them gave me error as

val client = ElasticClient.remote(host = "192.168.99.100", port = 9200)

and

val settings = ImmutableSettings.settingsBuilder().put("cluster.name", "elasticsearch").build()
  val uri = ElasticsearchClientUri("elasticsearch://192.168.99.100:9200")
  val client = ElasticClient.remote(uri)

The error is

Exception in thread "main" org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: []
    at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:305)
    at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:200)
    at org.elasticsearch.client.transport.support.InternalTransportClient.execute(InternalTransportClient.java:106)
    at org.elasticsearch.client.support.AbstractClient.index(AbstractClient.java:102)
    at org.elasticsearch.client.transport.TransportClient.index(TransportClient.java:340)
    at com.sksamuel.elastic4s.IndexDsl$IndexDefinitionExecutable$$anonfun$apply$1.apply(IndexDsl.scala:23)
    at com.sksamuel.elastic4s.IndexDsl$IndexDefinitionExecutable$$anonfun$apply$1.apply(IndexDsl.scala:23)
    at com.sksamuel.elastic4s.Executable$class.injectFuture(Executable.scala:21)
    at com.sksamuel.elastic4s.IndexDsl$IndexDefinitionExecutable$.injectFuture(IndexDsl.scala:20)
    at com.sksamuel.elastic4s.IndexDsl$IndexDefinitionExecutable$.apply(IndexDsl.scala:23)
    at com.sksamuel.elastic4s.IndexDsl$IndexDefinitionExecutable$.apply(IndexDsl.scala:20)
    at com.sksamuel.elastic4s.ElasticClient.execute(ElasticClient.scala:28)
    at com.enterpriseconnector.persistence.Elastic$.insert(Elastic.scala:17)
    at com.enterpriseconnector.persistence.Test$$anonfun$1.apply(Elastic.scala:27)
    at com.enterpriseconnector.persistence.Test$$anonfun$1.apply(Elastic.scala:24)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245)
    at scala.collection.immutable.Range.foreach(Range.scala:166)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:245)
    at scala.collection.AbstractTraversable.map(Traversable.scala:104)
    at com.enterpriseconnector.persistence.Test$.delayedEndpoint$com$enterpriseconnector$persistence$Test$1(Elastic.scala:24)
    at com.enterpriseconnector.persistence.Test$delayedInit$body.apply(Elastic.scala:23)
    at scala.Function0$class.apply$mcV$sp(Function0.scala:34)
    at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
    at scala.App$$anonfun$main$1.apply(App.scala:76)
    at scala.App$$anonfun$main$1.apply(App.scala:76)
    at scala.collection.immutable.List.foreach(List.scala:381)
    at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:35)
    at scala.App$class.main(App.scala:76)
    at com.enterpriseconnector.persistence.Test$.main(Elastic.scala:23)
    at com.enterpriseconnector.persistence.Test.main(Elastic.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

My complete code is

import java.util.Calendar

import com.sksamuel.elastic4s.{ElasticsearchClientUri, ElasticClient}
import com.sksamuel.elastic4s.ElasticDsl._
import com.sksamuel.elastic4s.source.StringDocumentSource
import org.elasticsearch.common.settings.ImmutableSettings

object Elastic {
  println("Creating Elastic Connection")
  val settings = ImmutableSettings.settingsBuilder().put("cluster.name", "elasticsearch").build()
  val uri = ElasticsearchClientUri("elasticsearch://192.168.99.100:9200")
  val client = ElasticClient.remote(uri)

  def insert(monitorJson: String) = {
    client execute {
      index into "test" -> "elastic4s" doc StringDocumentSource(monitorJson)
    }
  }
}

object Test extends App {
  for (_ <- 1 to 100) yield {
    val json: String = s"{time: ${Calendar.getInstance().getTime()}}"
    println(s"inserting ${json}")
    Elastic.insert(json)
  }
}

回答1:


9200 is the port for connecting via HTTP, which is why it works from your browser. If you check you the top of your stack trace, you can see in your case that you're connecting via the Transport client (i.e. TCP) so you need to use the port 9300 instead. Try this:

val uri = ElasticsearchClientUri("elasticsearch://192.168.99.100:9300")
val client = ElasticClient.remote(uri)



回答2:


Make sure client version is same as ElasticSearch server.




回答3:


Try adding settigs with HTTP enabled

Just set host:

val host = "YOUR HOST NAME"

and then:

val settings = ImmutableSettings.settingsBuilder()
    .put("http.enabled", true).put("cluster.name", "CLUSTER-NAME").build()
val uri = ElasticsearchClientUri(s"${host}:9200")
val esClient = ElasticClient
    .remote(settings, uri)

It should work with port 9200 now



来源:https://stackoverflow.com/questions/32277401/org-elasticsearch-client-transport-nonodeavailableexception-none-of-the-configu

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!