Уменьшает ли количество ядер-исполнителей меньше памяти-исполнителя? - PullRequest
8 голосов
/ 29 апреля 2019

Сбой в задании My Spark с ошибкой YARN Container killed by YARN for exceeding memory limits 10.0 GB of 10 GB physical memory used.

Интуитивно я уменьшил количество ядер с 5 до 1 и задание было успешно выполнено.

Iне увеличил executor-memory, потому что 10g был максимумом для моего кластера YARN.

Я просто хотел подтвердить, что моя интуиция.Сокращение количества executor-cores потребляет меньше executor-memory?Если так, то почему?

Ответы [ 2 ]

2 голосов
/ 22 мая 2019
spark.executor.cores = 5, spark.executor.memory=10G

Это означает, что исполнитель может выполнять 5 задач параллельно.Это означает, что 10 ГБ должны быть распределены между 5 задачами. В среднем эффективно - для каждой задачи будет доступно 2 ГБ.Если все задачи занимают более 2 ГБ, то общая JVM в итоге будет использовать более 10 ГБ, и поэтому YARN уничтожит контейнер.

spark.executor.cores = 1, spark.executor.memory=10G

Это означает, что исполнитель может запустить только 1 задачу.Это означает, что 10 ГБ доступно для 1 задачи полностью.Так что, если задача использует более 2 ГБ, но менее 10 ГБ, она будет работать нормально.Так было в вашей работе, и так получилось.

2 голосов
/ 20 мая 2019

Да, каждый исполнитель использует дополнительно 7% memoryOverhead.

Этот расчет будет создан с учетом того, что у вас есть два узла, поэтому у нас есть три исполнителя на одном узле и два исполнителя на другом узле.

Memory per executor in the first node = 10GB/3 = 3,333GB
Counting off heap overhead = 7% of 3,333GB = 0,233GB. 

So, your executor-memory should be 3,333GB - 0,233GB = 3,1GB per node

Вы можете прочитать другое объяснение здесь: https://spoddutur.github.io/spark-notes/distribution_of_executors_cores_and_memory_for_spark_application.html

...