Совершенно новый для Elasticsearch. Я много читал, но надеюсь, что эксперты по SO, возможно, смогут взвесить конфигурацию моего кластера, чтобы увидеть, есть ли что-то, чего мне не хватает.
В настоящее время я использую ES (1.7.3) для индексации некоторых очень больших текстовых файлов (~ 700 миллионов строк) на файл и ищу один индекс для каждого файла. Я использую logstash (V2.1) в качестве предпочтительного метода индексации файлов. Файл конфигурации находится здесь для моего первого индекса:
input {
file {
path => "L:/news/data/*.csv"
start_position => "beginning"
sincedb_path => "C:/logstash-2.1.0/since_db_news.txt"
}
}
filter {
csv {
separator => "|"
columns => ["NewsText", "Place", "Subject", "Time"]
}
mutate {
strip => ["NewsText"]
lowercase => ["NewsText"]
}
}
output {
elasticsearch {
action => "index"
hosts => ["xxx.xxx.x.xxx", "xxx.xxx.x.xxx"]
index => "news"
workers => 2
flush_size => 5000
}
stdout {}
}
Мой кластер содержит 3 блока, работающих в Windows 10, в каждом из которых работает один узел. ES не устанавливается как служба, и я устанавливаю только один главный узел:
Главный узел: 8 ГБ ОЗУ, ES_HEAP_SIZE = 3500 м, одноядерный i7
Узел данных # 1: 8 ГБ ОЗУ, ES_HEAP_SIZE = 3500 м, одноядерный i7
На этом узле в настоящее время запущен экземпляр logstash с LS_HEAP_SIZE = 3000 м.
Узел данных # 2: 16 ГБ ОЗУ, ES_HEAP_SIZE = 8000 м, одноядерный i7
У меня ES в настоящее время настроен на 5 сегментов по умолчанию + 1 дубликат на индекс.
В настоящее время каждый узел настроен на запись данных на внешний жесткий диск и ведение журнала на другой.
В моем тестовом прогоне я усреднял 10K событий в секунду с помощью Logstash. Моя основная цель - оптимизировать скорость, с которой эти файлы загружаются в ES. Я думаю, что я должен быть ближе к 80К, основываясь на том, что я прочитал.
Я поигрался с изменением количества рабочих и размера слива, но не могу выйти за пределы этого порога. Думаю, мне не хватает чего-то фундаментального.
У меня два вопроса:
1) Есть ли что-нибудь подозрительное в конфигурации моего кластера или какие-то советы, которые могут улучшить процесс?
2) Помогло бы я, если бы я запускал экземпляр logstash на каждом узле данных, индексируя отдельные файлы?
Большое спасибо за любую помощь заранее и за то, что нашли время прочитать.
-Зинга
Есть ли что-нибудь подозрительное в конфигурации моего кластера или какие-то советы, которые могут улучшить процесс?
Я бы сказал, запустите Logstash на главном узле, чтобы он мог лучше использовать ресурсы (RAM), которые у него есть, и оставьте узлы данных их основной задачей по индексации в ES.
Вы, вероятно, будете связаны с процессором прежде всего, но я могу ошибаться в зависимости от скорости и типа дисков, которые у вас есть на узлах данных. Вы упомянули, что вы write data to an external HD
. Если он подключен через USB, он может не справиться с высокой скоростью ввода-вывода, необходимой для индексации всех ваших документов.
Помогло бы я, если бы я запускал экземпляр Logstash на каждом узле данных, индексируя отдельные файлы?
Я бы так не подумал. Вы не делаете много работы в Logstash (без грокков, только основные мутации), поэтому в конечном итоге вы ограничите скорость своих узлов данных и попросите их сделать больше, чем они уже есть, вероятно, разве не поможет.
Что касается других указателей, возможно, попробуйте уменьшить количество шардов до 3 и не иметь никаких реплик, поскольку это должно немного ускорить процесс. Вы всегда можете перенастроить свои индексы, чтобы они имели реплики после завершения индексации.
Наконец, вы должны следить за монитором ресурсов для своих систем во время индексации, чтобы понять, какие ресурсы подвергаются наибольшему налогообложению (ЦП, ОЗУ, диск, сеть?), Работая над устранением узкого места и повторяя, пока вы не будете довольны индексированием производительность.