Накладные расходы памяти Spark

Вопрос, связанный с накладными расходами памяти Spark, задавался несколько раз в SO, я рассмотрел большинство из них. Однако, просмотрев несколько блогов, я запутался.

Ниже приведены вопросы, которые у меня есть

  • являются ли накладные расходы памяти частью памяти исполнителя или отдельно? Поскольку некоторые из блогов говорят, что накладные расходы памяти являются частью памяти исполнителя, а другие говорят, что память исполнителя + накладные расходы памяти (это означает, что накладные расходы памяти не являются частью памяти исполнителя)?
  • Накладные расходы памяти и off-heap - это одно и то же?
  • Что произойдет, если я не упомянул накладные расходы как часть искры, будет ли по умолчанию 18,75 или нет?
  • Будут ли какие-либо побочные эффекты, если мы увеличим накладные расходы на память, чем значение по умолчанию?

https://docs.qubole.com/en/latest/user-guide/engines/spark/defaults-executors.htmlhttps://spoddutur.github.io/spark-notes/distribution_of_executors_cores_and_memory_for_spark_application.html

Ниже приведен случай, который я хочу понять. У меня есть 5 узлов с каждым узлом, 16 виртуальных ядер и 128 ГБ памяти (из которых 120 можно использовать), теперь я хочу отправить искровое приложение, ниже - конф, я думаю

Total Cores 16 * 5 = 80
Total Memory 120 * 5 = 600GB

случай 1: служебная часть памяти в памяти исполнителя

spark.executor.memory=32G
spark.executor.cores=5
spark.executor.instances=14 (1 for AM)
spark.executor.memoryOverhead=8G ( giving more than 18.75% which is default)
spark.driver.memoryOverhead=8G
spark.driver.cores=5

Случай 2: накладные расходы на память не являются частью памяти исполнителя

spark.executor.memory=28G
spark.executor.cores=5
spark.executor.instances=14 (1 for AM)
spark.executor.memoryOverhead=6G ( giving more than 18.75% which is default)
spark.driver.memoryOverhead=6G
spark.driver.cores=5

Согласно приведенному ниже видео, я пытаюсь использовать 85% узла, то есть около 100 ГБ из 120 ГБ, не уверен, можем ли мы использовать больше.

https://www.youtube.com/watch?v=ph_2xwVjCGs&list=PLdqfPU6gm4b9bJEb7crUwdkpprPLseCOB&index=8&t=1281s (4:12)

1 ответ

Чтобы ответить на ваш вопрос, являются ли накладные расходы памяти частью памяти исполнителя или отдельной?Накладные расходы памяти не являются частью памяти исполнителя.

Менеджер ресурсов запускает контейнеры для выполнения внутри них исполнителей. так что в основном память исполнителя + накладные расходы памяти = память контейнера..... искра разбивает память исполнителя на память приложения и кеш-память.

Накладные расходы памяти исполнителя в основном включают память вне кучи и буферы nio, а также память для выполнения потоков, зависящих от контейнера (стеки потоков). если вы не укажете накладные расходы памяти, диспетчер ресурсов вычисляет значение накладных расходов памяти, используя значения по умолчанию и соответственно запускает контейнеры.

Всегда рекомендуется оставлять ядра и память для ОС (это 1 ядро ​​для nodemanager и 1 ядро ​​для других демонов и 2 ядра для оптимальной работы ОС).

Вы можете изменить свой расчет, как указано ниже, 12 * 5 = 60 ядер и общий объем памяти 116 * 5 = 580 ГБ - это общий объем доступных ресурсов.. затем вы настраиваете другие параметры соответственно.

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