искра от конфигурации кучи памяти и вольфрама

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

Для чего используются spark.memory.offheap.size и spark.memory.offheap.enabled? Нужно ли мне вручную указывать здесь объем памяти вне кучи для Tungsten?


person Georg Heiler    schedule 10.04.2017    source источник


Ответы (2)


Spark/Tungsten использует кодировщики/декодеры для представления объектов JVM в виде узкоспециализированных объектов Spark SQL Types, которые затем можно сериализовать и обрабатывать с высокой производительностью. Представление во внутреннем формате очень эффективно и удобно для использования памяти GC.

Таким образом, даже работая в режиме on-heap по умолчанию, Tungsten снижает большие накладные расходы на структуру памяти объектов JVM и время работы GC. Tungsten в этом режиме действительно выделяет объекты в куче для своих внутренних целей, и выделяемые фрагменты памяти могут быть огромными, но это происходит гораздо реже и плавно переживает переходы генерации GC. Это почти устраняет необходимость переноса этой внутренней структуры за пределы кучи.

В наших экспериментах с включением и выключением этого режима мы не увидели существенного улучшения времени работы. Но то, что вы получаете с включенным режимом без кучи, заключается в том, что необходимо тщательно спроектировать распределение памяти вне вашего процесса JVM. Это может вызвать некоторые трудности в менеджерах контейнеров, таких как YARN, Mesos и т. д., когда вам нужно будет разрешить и запланировать дополнительные фрагменты памяти, помимо конфигурации вашего процесса JVM.

Также в режиме вне кучи Tungsten использует sun.misc.Unsafe, что может быть нежелательным или даже невозможным в ваших сценариях развертывания (например, с ограничительной конфигурацией диспетчера безопасности Java).

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

person kasur    schedule 26.04.2017

Зачем нужны spark.memory.offheap.size и spark.memory.offheap.enabled? spark.memory.offHeap.enabled: параметр для включения/отключения использования памяти вне кучи. spark.memory.offHeap.size: общий объем памяти в байтах для выделения вне кучи (из собственной памяти). Это не влияет на использование памяти кучи, также следите за тем, чтобы не превышались общие ограничения вашего исполнителя.

Нужно ли мне вручную указывать здесь объем памяти вне кучи для Tungsten? Да. Помимо включения памяти Off-Heap, вам необходимо вручную установить ее размер, чтобы использовать память Off-Heap для искровых приложений. Обратите внимание, что модель памяти вне кучи включает только память хранения и память выполнения.

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

введите здесь описание изображения

• Если включена память вне кучи, в Executor будет память как в куче, так и вне кучи.

• Объем памяти исполнителя = Память для хранения в куче + Память для хранения вне кучи

• Память выполнения исполнителя = память выполнения в куче + память выполнения вне кучи

person Amardeep Kohli    schedule 12.06.2019