Каждое приложение, представленное клиентом, может запустить сколько контейнеров YARN в каждом Node Manager?
Контейнер - это абстрактное понятие в YARN. При запуске Spark на YARN каждый исполнитель Spark работает как контейнер YARN. Сколько контейнеров YARN может быть запущено в каждом Node Manager каждым приложением, представленным клиентом?
2 ответа
Вы можете запустить столько исполнителей на одном NodeManager, сколько захотите, если у вас есть ресурсы. Если у вас есть сервер с 20 ГБ ОЗУ и 10 ядрами, вы можете запустить 10 2-гигабайтных 1-ядерных исполнителей на этом нод-менеджере. Было бы нецелесообразно запускать несколько исполнителей на одном и том же диспетчере узлов, поскольку при перетасовке данных между исполнителями возникают накладные расходы, даже если они обрабатываются на одной машине.
Каждый исполнитель работает в контейнере YARN.
В зависимости от того, насколько велик ваш кластер YARN, как ваши данные распределены по рабочим узлам, чтобы обеспечить лучшую локальность данных, сколько исполнителей вы запросили для своего приложения, сколько ресурсов (ядер на исполнителя, памяти на исполнителя) вы запросили на исполнителя и включили ли вы динамическое распределение ресурсов, Spark решает, сколько исполнителей необходимо в общей сложности и сколько исполнителей нужно запустить на рабочие узлы.
Если вы запросили ресурс, который кластер YARN не смог разместить, ваш запрос будет отклонен.
Ниже приведены свойства, которые нужно учитывать при создании запроса на отправку.
- --num-executors - количество исполнителей, которое вам нужно
- --executor-cores - количество ядер на одного исполнителя. Макс 5 рекомендуется.
- --executor-memory - объем памяти на одного исполнителя.
- --spark.dynamicAllocation.enabled
- - spark.dynamicAllocation.maxExecutors