`

ELASTICSEARCH常见问题

 
阅读更多
1. ELASTICSEARCH建索引过程中崩溃问题追查
by LINECONG
前天用elasticsearch重建索引,总是在凌晨崩溃,ES甩出一坨java_pid[PID].hprof的文件,然后退出。查看日志,有java OutOfMemoryError的错误信息。用如下命令查看索引状态,发现在建的索引健康状态为red。

curl http://localhost:9200/_cat/indices?v
推测这是由于建索引太慢,redis队列阻塞,占据了太大内存而导致内存不足。于是删掉索引重建,并测控内存状况。今天凌晨又崩溃了,但此时redis占用的内存并不大。

发现日志中有“no index mapper found for field: [afv.好惹]”,于是想起前几天的升级索引,增加了一个afv的字段,这个字段是一个dict,dict的key是各种可能的关键词,由于关键词非常多,每一个关键词都会在mapping中生成一个”afv.[关键词]“的field,这会导致ES得到一个非常庞大的mapping,从而内存不足退出。

于是将afv这个字段用json方式转为string类型,从而避免生成”afv.[关键词]“这样的field。并用如下的mapping设置,将afv这个字段设置为不建索引。

mapping = {  'afv': { 'index': 'no', 'store': 'yes', 'type': 'string' }  }
重建索引后,一切顺利,CPU占用率也小了很多。


2. ElasticSearch报错None of the configured nodes are available

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

使用地方的代码是:

Client client = new TransportClient(settings).addTransportAddress(new InetSocketTransportAddress("172.16.2.13", 9300));​

经查,最后的问题在于前面初始化settings时给cluster设置了个新的名字,如:Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name", "tonsonmiao").build();

因为如果设置clustername后,容器会在添加transportaddress时,从集群名为tonsonmiao里查找是否有要设置的这个IP和端口,此时肯定找不到,所以会报这个错。​

将这个重命名给去掉即可。
分享到:
评论
1 楼 x_looking 2019-04-25  
Client client = new TransportClient(Settings.empty).addTransportAddress(new InetSocketTransportAddress("172.16.2.13", 9300))

问题2 正解 ,空的settings 也会报这个错

相关推荐

Global site tag (gtag.js) - Google Analytics