На основе документации YARN предназначен для того, чтобы отдельные приложения (через ApplicationMaster) могли использовать ресурсы кластера совместно используемым, безопасным и многопользовательским способом. Кроме того, он по-прежнему осознает топологию кластера, чтобы эффективно планировать и оптимизировать доступ к данным, т. Е. Максимально сократить движение данных для приложений.
Для достижения этих целей центральный планировщик (в ResourceManager) имеет обширную информацию о потребностях ресурса приложения, что позволяет ему принимать более четкие решения о планировании для всех приложений в кластере. Это приводит нас к ResourceRequest и результирующему контейнеру.
По существу приложение может запрашивать конкретные запросы ресурсов через ApplicationMaster для удовлетворения своих потребностей в ресурсах. Планировщик отвечает на запрос ресурса, предоставляя контейнер, который удовлетворяет требованиям, изложенным ApplicationMaster в исходном ResourceRequest.
Как вы знаете, у нас есть три метода планирования в ПРЯЖИ:
- Fair Scheduler
- Емкость Планировщик
- FIFO Планировщик
Каждый из них имеет свои собственные способы расчета потребность в ресурсах приложений.
Например, CapacityScheduler имеет концепцию ResourceCalculator - подключаемый слой, который используется для выполнения математики распределения, просматривая все идентифицированные ресурсы. Это включает в себя служебные программы, которые могут принимать следующие решения:
- У этого узла достаточно ресурсов каждого типа ресурсов для удовлетворения этого запроса?
- Сколько контейнеров можно разместить на этом узле, сортируя список узлов с различными доступными ресурсами. Существует два вида калькуляторов, доступных в настоящее время в YARN - DefaultResourceCalculator и DominantResourceCalculator.
DefaultResourceCalculator учитывает память только при выполнении вычислений. Вот почему требования CPU игнорируются при выполнении распределений в CapacityScheduler по умолчанию. Вся математика распределений сводится к простому изучению памяти, требуемой запросами ресурсов, и памяти, доступной на узле, на который смотрят в течение определенного цикла планирования.
Итак, вы имеете в виду, что каждый планировщик имеет свои приоритеты, иногда процессор важен или иногда память? Что происходит, когда задачи завершены? все еще есть контейнеры? – mndn
@mndn Да, но оба они важны. Контейнер представляет собой двумерное пространство, состоящее как из процессора, так и из памяти. Приоритет будет рассчитываться планировщиком и передаваться в ResourceRequest. Когда задачи закончатся, контейнеры будут удалены. –
Спасибо за помощь. Мой последний вопрос - как планировщик оценивает количество ресурсов? Используют ли они историческую информацию? – mndn