Расчет памяти Spark Driver - PullRequest
0 голосов
/ 05 декабря 2018

Я знаю, как рассчитать ядра и память исполнителя. Но кто-нибудь может объяснить, на основании чего рассчитывается spark.driver.memory?

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Операции на Dataset с, например, collect take, требуют перемещения всех данных в процесс драйвера приложения, и при этом на очень большом наборе данных может произойти сбой процесса драйвера с OutOfMemoryError.

Вы увеличиваете spark.driver.memory, когда собираете большие объемы для драйвера.

Согласно

Высокопроизводительная искра от Холдена Карау и Рэйчел Уоррен (О'Рейли)

Большая часть вычислительной работы запроса Spark выполняется исполнителями, поэтому увеличение размера драйвера редко ускоряет вычисления.Тем не менее, задания могут потерпеть неудачу, если они собирают слишком много данных для драйвера или выполняют большие локальные вычисления.Таким образом, увеличение памяти драйвера и, соответственно, значение spark.driver.maxResultSize может предотвратить ошибки нехватки памяти в драйвере.

Хорошей эвристикой для установки памяти драйвера Spark является просто минимально возможное значение, которое делаетне приводит к ошибкам памяти в драйвере, т. е. дает максимально возможные ресурсы исполнителям.

0 голосов
/ 05 декабря 2018

Память драйвера Spark - это объем памяти, используемый для процесса драйвера, т.е. процесс, выполняющий функцию main () приложения, и где SparkContext инициализируется втот же формат, что и для строк памяти JVM с суффиксом единицы измерения размера («k», «m», «g» или «t») (например, 512m, 2g).

Память JVM разделена на отдельные части.На широком уровне память кучи JVM физически разделена на две части - Молодое поколение и Старое поколение .

Молодое поколение - это место, гдевсе новые объекты созданы.Когда молодое поколение заполнено, производится сбор мусора.Эта сборка мусора называется Minor GC.

Old Generation память содержит объекты, которые долгоживут и выжили после многих раундов Minor GC.Обычно сборка мусора выполняется в старом поколении памяти, когда она заполнена.Сборка мусора старого поколения называется Major GC и обычно занимает больше времени.

Сборка мусора Java - это процесс идентификации и удаления неиспользуемых объектов из памяти и свободного места, которое будет выделено объектам.создано в дальнейшей обработке.Одной из лучших функций языка программирования Java является автоматическая сборка мусора, в отличие от других языков программирования, таких как C, где выделение и освобождение памяти выполняется вручную.

Сборщик мусора - программа, выполняемаяв фоновом режиме, который просматривает все объекты в памяти и обнаруживает объекты, на которые нет ссылок ни в одной части программы.Все эти объекты, на которые нет ссылок, удаляются, и пространство освобождается для выделения другим объектам.

Источники:

https://spark.apache.org/docs/latest/configuration.html

https://www.journaldev.com/2856/java-jvm-memory-model-memory-management-in-java#java-memory-model-8211-permanent-generation

...