Spark + Elastic - проблема с производительностью поиска и записи

Видя низкое количество записей в asticsearch с использованием искры Java.

Вот конфигурации

использование 13. больших машин для кластера ES

 4 instances each have 4 processors.
 Set refresh interval to -1 and replications to '0' and other basic 
 configurations required for better writing.

Искра:

Кластер EMR с 2 узлами с

 2 Core instances
  - 8 vCPU, 16 GiB memory, EBS only storage
  - EBS Storage:1000 GiB

1 Master node
  - 1 vCPU, 3.8 GiB memory, 410 SSD GB storage

Индекс ES имеет 16 сегментов, определенных в отображении.

имея ниже конфиг при запуске задания,

executor-memory - 8g
spark.executor.instances=2
spark.executor.cores=4

и используя

es.batch.size.bytes - 6MB
es.batch.size.entries - 10000
es.batch.write.refresh - false

в этой конфигурации я пытаюсь загрузить 1 миллион документов (каждый документ имеет размер 1300 байт), поэтому он загружает 500 записей / документов на узлы ES.

и в журнале искр вижу каждое задание

 -1116 bytes result sent to driver

Искровой код

    JavaRDD<String> javaRDD = jsc.textFile("<S3 Path>");
    JavaEsSpark.saveJsonToEs(javaRDD,"<Index name>");

Также, когда я смотрю на график In-Network в кластере ES, он очень низкий, и я вижу, что EMR не отправляет огромные данные по сети. Есть ли способ, которым я могу сказать Spark отправить правильное количество данных, чтобы сделать запись быстрее?

ИЛИ ЖЕ

Есть ли другие конфигурации, которые мне не хватает, чтобы настроить. Потому что я вижу, что 500docs в секунду за экземпляр ниже. Может кто-нибудь, пожалуйста, направьте, что мне не хватает с этими настройками, чтобы улучшить мою производительность записи ES

заранее спасибо

1 ответ

У вас может быть проблема здесь.spark.executor.instances=2

Вы ограничены двумя исполнителями, где вы можете иметь 4 на основе конфигурации вашего кластера. Я бы изменил это на 4 или больше. Я также мог бы попробовать executor-memory = 1500M, cores=1, instance =16. Мне нравится оставлять немного памяти в моей памяти, поэтому я упал с 2G до 1,5G(но вы не можете сделать 1,5G, поэтому нам нужно сделать 1500M). Если вы подключаетесь через своих исполнителей, это улучшит производительность.

Нужен код для дальнейшей отладки. Интересно, вы подключены к упругому поиску только в вашем драйвере, а не в ваших рабочих узлах. Это означает, что вы получаете только одно соединение вместо одного для каждого исполнителя.

Другие вопросы по тегам