intro
В документации Apache Spark я вижу, что память разделена на три группы, которые можно настроить с помощью нескольких параметров.Допустим, у нас есть машина AWS EMR m4.xlarge.На этой машине Yarn имеет максимальный объем памяти, равный 12288 МБ.Используя эти параметры конфигурации:
- spark. (Исполнитель | драйвер) .memoryOverhead = 0.2
- spark. (Исполнитель | драйвер) .memory = 10g
- spark.memory.fraction = 0,6 (по умолчанию)
- spark.storage.fraction = 0,3 (по умолчанию)
Я получаю:
- накладные расходы памяти =2G
- память исполнителя = 10G
- память выполнения = 3G (
spark.executor.memory * spark.memory.fraction * spark.storage.fraction
) - память хранения = 3G (
spark.executor.memory * spark.memory.fraction * spark.storage.fraction
) - память пользователя =4G (
spark.executor.memory * 1-spark.memory.fraction
)
Я использую одинаковую конфигурацию как для драйвера, так и для исполнителя.
Прежде всего - правильно ли это вычисление?Эти параметры в порядке?Мне в основном интересно, оставит ли он достаточно оперативной памяти на машине, чтобы f.ex.Демоны YARN не выйдут из строя?
основной вопрос
Что именно хранится в этих областях памяти?
Мне интересно, потому что я делаю довольно большой сбор (создаю карту ~ 1.5G [(Long, Long)]), которую я затем намереваюсь передать всем исполнителям.Когда я выполнил сбор данных без явного указания издержек (по умолчанию 0,1), кластер вышел из строя, контейнеры были убиты YARN за превышение пределов памяти, но с накладными расходами в 0,2 все прошло гладко.Кажется, что моя Карта хранится в служебной информации, но какова цель хранения исполнителя?
Заранее спасибо!