我想让Netflix open source solution Edda与Elasticsearch合作。我知道我已经正确安装了Edda,因为我可以成功地使用MongoDB作为后端。我更喜欢使用Elasticsearch,因此我可以获得Kibana的好处,而不是自己编写前端。所以我现在在AWS的同一台服务器上运行Edda和Elasticsearch(只是想让它运行起来)。 Elasticsearch正在运作:
{
"name" : "Arsenic",
"cluster_name" : "elasticsearch",
"version" : {
"number" : "2.1.0",
"build_hash" : "72cd1f1a3eee09505e036106146dc1949dc5dc87",
"build_timestamp" : "2015-11-18T22:40:03Z",
"build_snapshot" : false,
"lucene_version" : "5.3.1"
},
"tagline" : "You Know, for Search"
}
并表明它在倾听:
netstat -tulpn | grep java
tcp 0 0 ::ffff:<myip>:9300 :::* LISTEN 2270/java
tcp 0 0 ::ffff:<myip>:9200 :::* LISTEN 2270/java
我的java版本我从1.7更新到1.8,因为我相信Elasticsearch的java版本以及服务器上运行的内容必须匹配。我无法看到1.8导致问题的原因:
java -version
openjdk version "1.8.0_65"
OpenJDK Runtime Environment (build 1.8.0_65-b17)
OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode)
这是我的edda属性文件:
cat /home/ec2-user/edda/src/main/resources/edda.properties | grep elasticsearch
edda.datastore.current.class=com.netflix.edda.elasticsearch.ElasticSearchDatastore
edda.elector.class=com.netflix.edda.elasticsearch.ElasticSearchElector
edda.elasticsearch.cluster=elasticsearch
edda.elasticsearch.address=<myip>:9300
edda.elasticsearch.shards=5
edda.elasticsearch.replicas=0
# http://www.elasticsearch.org/guide/reference/api/index_/
edda.elasticsearch.writeConsistency=quorum
edda.elasticsearch.replicationType=async
edda.elasticsearch.scanBatchSize=1000
edda.elasticsearch.scanCursorDuration=60000
edda.elasticsearch.bulkBatchSize=0
在我的elasticsearch.yml文件中:
network.host: <myip>
我还没有指定一个群集名称,因此它采用了默认的&#39; elasticseach&#39;。
因此,当我运行Edda以轮询AWS并使用它找到的数据填充elasticsearch时,我收到此错误:
[Collection aws.hostedZones] init: caught org.elasticsearch.client.transport.NoNodeAvailableException: No node available
at com.netflix.edda.Collection$$anonfun$init$1.apply$mcV$sp(Collection.scala:471)
at com.netflix.edda.Utils$$anon$1.act(Utils.scala:169)
at scala.actors.Reactor$$anonfun$dostart$1.apply(Reactor.scala:224)
at scala.actors.Reactor$$anonfun$dostart$1.apply(Reactor.scala:224)
at scala.actors.ReactorTask.run(ReactorTask.scala:33)
at scala.actors.ReactorTask.compute(ReactorTask.scala:63)
at scala.concurrent.forkjoin.RecursiveAction.exec(RecursiveAction.java:160)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
显然它无法连接到elasticsearch集群,但集群名称是正确的,它可以根据我的意思收听正确的端口和IP地址,我不会认为#39;是java版本的问题。
我错过了一些可能非常简单的事情。
提前感谢您的所有帮助。
此致 Neilos
答案 0 :(得分:0)
我已经弄明白了,Edda中使用的java客户端设置为使用版本0.90.0的elasticsearch,它在build.gradle中设置,如果你安装了那个版本的Elasticsearch它可以工作。显然,这是一个非常旧的Elasticsearch版本,你可能不想使用它。如果更改此文件中的版本号,则在尝试编译时由于路径损坏(缺少程序集)而失败。我正在权衡是否值得尝试解决这些程序集问题以使其与最新版本的Elasticsearch一起使用,或者选择使用MongoDB,它可以在没有任何代码更改的情况下工作,但只提供REST Api功能。至少问题已解决。