2015-06-12 2 views
10

Открываю kibana и выполняю поиск, и я получаю сообщение об ошибке, когда осколки не сработали. Я посмотрел в файл elasticsearch.log, и я увидел эту ошибку:FIELDDATA Слишком большой объем данных

org.elasticsearch.common.breaker.CircuitBreakingException: [FIELDDATA] Data too large, data for [@timestamp] would be larger than limit of [622775500/593.9mb] 

Есть ли способ, чтобы увеличить этот лимит 593.9mb?

+1

Вы также можете увидеть эту ошибку непосредственно в Chrome, открыв инструменты разработчика, выбрав вкладку «Сеть», а затем снова запустите поисковый запрос. Это сообщение об ошибке будет доступно в поле 'Response' события' _msearch? '. Это помогает, если у вас нет прямого доступа к журналам сервера. – anothermh

ответ

15

Вы можете попытаться увеличить fielddata circuit breaker предел до 75% (по умолчанию 60%) в вашем файле конфигурации elasticsearch.yml и перезапустить кластер:

indices.breaker.fielddata.limit: 75% 

Или, если вы предпочитаете не перезапустить кластер можно изменить динамическая установка:

curl -XPUT localhost:9200/_cluster/settings -d '{ 
    "persistent" : { 
    "indices.breaker.fielddata.limit" : "40%" 
    } 
}' 

Дайте ему попробовать.

+0

Это сразу решило проблему, с которой я столкнулся, и будет работать, пока не смогу увеличить доступную память. – anothermh

+0

Как вы это делаете для elasticsearch 5.x? – Amar

+0

Я пробовал это для _cluster и моего имени кластера, но когда я нахожусь на _cluster/settings, он, похоже, не применялся. –

1

Я тоже встречаюсь с этой проблемой. Затем я проверяю память fielddata.

использование под заказ:

`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": { 

     } 
    } 
    } 
}, 

вы можете увидеть мои индексы имя базы DateTime и выселения все 0. Сложение, 2016.04.02 памяти 53009116, но 2016.04.29 равно 0.

так что я могу сделать вывод о том, что старые данные имеют занимают всю память, так что новые данные не могут использовать его, а затем, когда я сделать AGG запрос новых данные, повысить CircuitBreakingException

вы можете установить конфиг/elasticsearch. yml

indices.fielddata.cache.size: 20% 

Это может привести к высылке данных при достижении предела памяти.

но может быть реальным решением, которое вы должны добавить в память в furture.and контролировать использование памяти fielddata - это хорошие привычки.

более подробно: https://www.elastic.co/guide/en/elasticsearch/guide/current/_limiting_memory_usage.html

0

Я думаю, что это важно, чтобы понять, почему это происходит в первую очередь.

В моем случае у меня была эта ошибка, потому что я работал с агрегатами по полям "analyzed". Если вам действительно нужно, чтобы ваше поле строки было analyzed, вам следует рассмотреть возможность использования multifields и сделать его analyzed для поиска и not_analyzed для скопления.

0

Я столкнулся с этим вопросом на днях. В дополнение к проверке памяти fielddata, я бы также рассмотрел возможность проверки JVM и OS-памяти. В моем случае администратор забыл изменить ES_HEAP_SIZE и оставил его на 1gig.