2016-11-22 5 views
1

Я установил spark-jobserver, чтобы включить сложные запросы в сокращенный набор данных.Spark JobServer, настройки памяти для выпуска

jobserver выполняет две операции:

  • Синхронизировать с основной удаленной базой данных, он делает дамп некоторых таблиц сервера, сократить и агрегирует данные, сохранить результат в виде паркетной файла и кэшировать как таблица sql в памяти. Эта операция будет выполняться каждый день;
  • Запросы, когда операция синхронизации завершена, пользователи могут выполнять сложные SQL-запросы в агрегированном наборе данных (в конечном итоге), экспортируя результат в виде файла csv. Каждый пользователь может выполнить только один запрос во времени и дождаться его завершения.

Самый большой стол (до и после сокращения, включающий также некоторые соединения) имеет почти 30M строк, по меньшей мере, 30 полей.

На самом деле я работаю над dev-машиной с 32 ГБ оперативной памяти, предназначенной для сервера заданий, и все работает плавно. Проблема в том, что в производственной части мы имеем одинаковое количество RAM, совместно используемое с сервером PredictionIO.

Я спрашиваю, как определить конфигурацию памяти, чтобы избежать утечек памяти или сбоев для искры.

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

Спасибо

ответ

1

Возьмем пример, , если у вас есть сервер с 32г барана. установить следующие параметры:

spark.executor.memory = 32g 

принимает примечание:

Вероятный первый импульс будет использовать --num-исполнители 6 --executor-ядер 15 --executor - память 63G. Однако это неправильный подход, потому что:

63GB + служебные данные памяти для исполнителей не будут вписываться в объем хранения в 63 ГБ от NodeManagers. Мастер приложения займет ядро ​​на одном узлов, что означает, что на этом узле не будет места 15-ядерному исполнителю . 15 ядер на одного исполнителя могут привести к плохой пропускной способности HDFS I/O .

Лучшим вариантом было бы использовать --num-исполнители 17 - исполнительные ядра 5 --executor-memory 19G. Зачем?

Эта конфигурация приводит к выполнению трех исполнителей на всех узлах, за исключением одного с AM, который будет иметь двух исполнителей. --executor-memory - , полученный как (63/3 исполнителей на узел) = 21. 21 * 0.07 = 1.47. 21 - 1,47 ~ 19.

Это объясняется здесь, если вы хотите узнать больше: http://blog.cloudera.com/blog/2015/03/how-to-tune-your-apache-spark-jobs-part-2/

 Смежные вопросы

  • Нет связанных вопросов^_^