Я так сбиваюсь с тем, какой подход мне следует использовать для настройки параметров приложения spark.
Давайте рассмотрим следующую конфигурацию кластера: 10 узлов, 16 ядер на узел и 64 ГБ ОЗУ на узел (пример из https://spoddutur.github.io/spark-notes/distribution_of_executors_cores_and_memory_for_spark_application.html0
- Исходя из вышеупомянутых рекомендаций, давайте присвоим
5 core per executors => --executor-cores = 5
(для хорошей пропускной способности HDFS) - Оставьте
1 core per node
для демонов Hadoop / Yarn => Количество ядер доступно на узел =16-1 = 15. Итак, общее количество доступных ядер в кластере = 15 x 10 = 150 - Количество доступных исполнителей = (общее количество ядер / num-core-per-executor) = 150/5 = 30
- Оставляя 1 исполнителя для ApplicationManager =>
--num-executors = 29
- Количество исполнителей на узел = 30/10 = 3
- Память на исполнителя = 64 ГБ / 3 = 21 ГБ
- Подсчет кучи служебных данных = 7% от 21 ГБ = 3 ГБ. Таким образом, фактический
--executor-memory = 21 - 3 = 18GB
В результате рекомендуемая конфигурация будет: 29 исполнителей, 18 ГБ памяти каждый и 5каждый ядро
Рассмотрим другой примергде подтверждение кластера: 6 узлов, 25 узлов ядра и 125 ГБ памяти на узел (пример из https://researchcomputing.princeton.edu/computational-hardware/hadoop/spark-memory)
рекомендуемая конфигурация; - num-executors 30 --executor-cores 4 --executor-memory 24G.
Вопрос: если мы используем правила, применяемые в примере 1, и вычисляем рекомендуемую конфигурацию для примера 2результат будет совсем другим.Фактически, если мы --executor-cores = 4
, а затем вычтем 1 ядро из каждого узла 6 * 24 = 144, то получим 144/4 = 26 исполнителей.оставив 1 ядро для AM ==> --num-executors = 25
.Теперь, если мы хотим вычислить количество исполнителей на узел = 25/6 = WHATTTT?Где моя ошибка?