FIELDDATA Данные слишком велики
Я открываю кибану и выполняю поиск, и я получаю ошибку, где осколки не сработали. Я просмотрел файл elasticsearch.log, и я увидел эту ошибку:
org.elasticsearch.common.breaker.CircuitBreakingException: [FIELDDATA] Data too large, data for [@timestamp] would be larger than limit of [622775500/593.9mb]
Есть ли способ увеличить этот предел в 593.9mb?
Ответы
Ответ 1
Вы можете увеличить ограничение fielddata > до 75% (по умолчанию 60%) в конфигурационном файле elasticsearch.yml
и перезапустить ваш кластер:
indices.breaker.fielddata.limit: 75%
Или, если вы предпочитаете не перезапускать кластер, вы можете изменить настройку динамически, используя:
curl -XPUT localhost:9200/_cluster/settings -d '{
"persistent" : {
"indices.breaker.fielddata.limit" : "40%"
}
}'
Попробуйте.
Ответ 2
Я тоже сталкиваюсь с этой проблемой. Затем я проверяю память поля данных.
используйте ниже запрос:
GET /_stats/fielddata?fields=*
выходной дисплей:
"logstash-2016.04.02": {
"primaries": {
"fielddata": {
"memory_size_in_bytes": 53009116,
"evictions": 0,
"fields": {
}
}
},
"total": {
"fielddata": {
"memory_size_in_bytes": 53009116,
"evictions": 0,
"fields": {
}
}
}
},
"logstash-2016.04.29": {
"primaries": {
"fielddata": {
"memory_size_in_bytes":0,
"evictions": 0,
"fields": {
}
}
},
"total": {
"fielddata": {
"memory_size_in_bytes":0,
"evictions": 0,
"fields": {
}
}
}
},
вы можете видеть мои индексы по имени base datetime, а evictions равны 0. Кроме того, 2016.04.02 память - 53009116, но 2016.04.29 - также 0.
поэтому я могу сделать вывод, что старые данные занимают всю память, поэтому новые данные не могут использовать их, а затем, когда я делаю agg запрос новых данных, это вызывает CircuitBreakingException
Вы можете установить config/asticsearch.yml
indices.fielddata.cache.size: 20%
он может вытеснить данные, когда достигнет предела памяти.
но может быть реальным решением, вы должны добавить свою память в furture. и контролировать использование памяти полевых данных - это хорошие привычки.
более подробно: https://www.elastic.co/guide/en/elasticsearch/guide/current/_limiting_memory_usage.html
Ответ 3
Альтернативное решение для CircuitBreakingException: [FIELDDATA] Data too large
ошибка данных - очистка старого/неиспользуемого кэша FIELDDATA.
Я обнаружил, что fielddata.limit
распределяется между индексами, поэтому удаление кеша неиспользуемого индекса/поля может решить проблему.
curl -X POST "localhost:9200/MY_INDICE/_cache/clear?fields=foo,bar"
Для получения дополнительной информации https://www.elastic.co/guide/en/elasticsearch/reference/7.x/indices-clearcache.html
Ответ 4
Я думаю, что важно понять, почему это происходит в первую очередь.
В моем случае у меня была эта ошибка, потому что я выполнял агрегации в "analyzed"
. Если вам действительно нужно, чтобы ваше строковое поле было analyzed
, вам следует рассмотреть возможность использования multifields и сделать его analyzed
для поиска и not_analyzed
для агрегаций.
Ответ 5
Я столкнулся с этим вопросом на днях. В дополнение к проверке памяти fielddata, я бы также рассмотрел возможность проверки JVM и OS-памяти. В моем случае администратор забыл изменить ES_HEAP_SIZE и оставил его на 1gig.
Ответ 6
просто используйте:
ES_JAVA_OPTS="-Xms10g -Xmx10g" ./bin/elasticsearch
так как куча по умолчанию 1G, если ваши данные большие, вы должны установить их больше