我在本地计算机上通过docker运行elasticsearch,并且可以通过端口9200上的REST API正常访问它。
Apache flink用于通过端口9300与elasticsearch进行通信。
我的目标是将来自apache flink的数据放到sink上的elasticsearch中,但是在每次执行程序时我都会遇到java错误:
Elasticsearch client is not connected to any Elasticsearch nodes!
我运行容器的docker命令如下所示:
docker run --rm -d -p 9200:9200 -p 9300:9300 -p 5601:5601 --name es-kibana nshou/elasticsearch-kibana
我还尝试在“-p 0.0.0.0:9300:9300”上打开端口9300,或者使用官方的docker容器进行弹性搜索。
是否有人遇到此问题并有任何解决方案?我想要尝试的另一件事是在我的机器上本地安装elasticsearch,但我认为docker方式更有价值。
这也是我的flink代码以及在elasticsearch中创建索引和映射:
List<InetSocketAddress> transports = new ArrayList<>();
transports.add(new InetSocketAddress(InetAddress.getByName("0.0.0.0"), 9300));
tweets.addSink(new ElasticsearchSink<Tuple2<String, Integer>>(
config,
transports,
new ESSink()));
用于索引ES的卷曲:
curl --request PUT --url http://localhost:9200/twitter-bd
用于映射ES的卷曲:
curl --request PUT
--url http://localhost:9200/twitter-bd/_mapping/twitter-wordcount \
--header 'content-type: application/json' \
--data '{
"twitter-wordcount": {
"properties": {
"word": {"type": "string"},
"cnt": {"type": "integer"}
}
}
}'
答案 0 :(得分:1)
创建一个docker-compose文件 的搬运工-compose.yml 强>
version: '2'
services:
elasticsearch:
container_name: elasticsearch
image: elasticsearch:2.4.1
# UNCOMMENT BELOW LINES TO HAVE PERSISTAN STORAGE
# volumes:
# - /var/db/elasticsearch/:/usr/share/elasticsearch/data/
ports:
- 9200:9200
- 9300:9300
生成强>
docker-compose up -d
使用9300端口与ES通信
创建内容
curl -XPUT&#34; http://localhost:9200/playground/equipment/1&#34; -d&#39; {&#34;输入&#34;:&#34;幻灯片&#34;,&#34;数量&#34;:2}&#39;
阅读内容
curl -XGET&#34; http://localhost:9200/playground/equipment/1&#34;
How To Interact with Data in ElasticSearch Using CRUD Operations