Загрузка данных из HDFS в ES занимает очень много времени - PullRequest
2 голосов
/ 12 марта 2019

Я создал внешнюю таблицу в кусте и мне нужно переместить данные в ES (из 2 узлов, каждый по 1 ТБ).Ниже обычный запрос занимает очень много времени (более 6 часов) для исходной таблицы с 9 ГБ данных.

INSERT INTO TABLE <ES_DB>.<EXTERNAL_TABLE_FOR_ES> 
SELECT COL1, COL2, COL3..., COL10 
  FROM <HIVE_DB>.<HIVE_TABLE>;

В индексе ES по умолчанию 5 сегментов и 1 реплика.Увеличение количества осколков может ускорить прием пищи?Может кто-нибудь предложить какие-либо улучшения, чтобы ускорить прием узлов ES.

1 Ответ

0 голосов
/ 15 марта 2019

Вы не упоминаете методологию, которую вы используете для подачи данных в ES, поэтому трудно понять, используете ли вы конвейер приема или какую технологию для преодоления разрыва.Учитывая это, я буду придерживаться общего совета по оптимизации загрузки в Elasticsearch .

. Elastic опубликовал некоторые рекомендации по оптимизации систем для приема внутрь, и есть три момента, которые мынайденное действительно имеет значение:

  1. Отключить реплики : установите число реплик равным нулю при одновременном повреждении данных, чтобы исключить необходимость копировать данные и наносить им вред.Это настройка уровня индекса ("number_of_replicas")
  2. Не указывать идентификатор : из схемы базы данных неясно, сопоставляете ли вы какие-либо идентификаторы, но еслиВы можете избежать указания идентификатора документа в Elastic и позволить ему указывать свой собственный, что значительно повышает производительность.
  3. Использование параллельных групповых операторов : используйте BulkAPI для передачи данных в ES и подачи их несколькимипотоки, поэтому он всегда имеет более одного массового запроса для работы на стороне сервера.

Наконец, вы установили Kibana и контролировали ваши узлы, чтобы знать, чем они ограничены?В частности процессор или память?

...