Из чего состоит YARN?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
YARN: Yet Another Resource Negotiator
YARN — это менеджер ресурсов и планировщик заданий в Hadoop 2.x и выше. Он отделил управление ресурсами от обработки данных, позволяя различным приложениям (не только MapReduce) использовать один кластер.
Архитектура YARN
YARN состоит из четырёх основных компонентов:
1. Resource Manager (RM)
Главный мастер кластера, отвечающий за управление ресурсами.
Функции:
- Отслеживание доступных ресурсов (CPU, память) на узлах
- Приём заявок на ресурсы от приложений
- Распределение ресурсов между приложениями
- Контроль жизненного цикла приложений
Компоненты RM:
- Scheduler — выбирает какие заявки удовлетворять (FIFO, Fair Scheduler, Capacity Scheduler)
- Applications Manager — управляет запуском и отслеживанием приложений
2. Node Manager (NM)
Демон на каждом рабочем узле, управляющий локальными ресурсами и контейнерами.
Функции:
- Мониторинг доступных ресурсов (CPU, RAM, disk)
- Запуск и остановка контейнеров (Container)
- Отправка heartbeat сигналов RM (каждые 3 сек)
- Логирование и отслеживание использования ресурсов
- Управление локальным кешем
Node Manager
├── Container 1 (256MB RAM, 1 CPU core)
├── Container 2 (512MB RAM, 2 CPU cores)
└── Container 3 (256MB RAM, 1 CPU core)
3. Application Master (AM)
Это не отдельный процесс в архитектуре — это роль, которую выполняет контейнер для каждого приложения.
Функции:
- Управление жизненным циклом одного приложения
- Запрос ресурсов у Resource Manager
- Взаимодействие с Node Manager для запуска контейнеров
- Обработка сбоев (переправка упавших задач)
- Отправка статуса приложения RM
Пример для MapReduce:
- AM запускается в контейнере
- Запрашивает контейнеры для mapper и reducer задач
- Координирует выполнение и shuffle/sort
- Собирает результаты
4. Container
Это логическая единица ресурса (абстракция над CPU и памятью).
Container:
id: container_1234567890_0001
memory: 512 MB
v_cores: 2
status: RUNNING
process: /bin/java ...mapper...
Поток выполнения задания
1. Client отправляет заявку на запуск приложения
↓
2. Resource Manager принимает заявку
↓
3. RM выделяет контейнер для Application Master
↓
4. Node Manager запускает AM в выделенном контейнере
↓
5. AM запрашивает ресурсы для выполнения задач
↓
6. RM отправляет контейнеры для задач
↓
7. AM отправляет команду NM на запуск контейнеров
↓
8. NM запускает контейнеры с задачами
↓
9. AM отслеживает выполнение, переправляет сбойные задачи
↓
10. AM отправляет результат и завершает приложение
Типы данных в YARN
# Заявка на ресурсы (Resource Request)
request = {
"memory": 2048, # MB
"v_cores": 4, # Virtual cores
"rack_locality": "rack1" # Локальность (опционально)
}
# Выделение контейнера (Container Allocation)
allocation = {
"container_id": "container_1234567890_0001",
"resource": request,
"assigned_node": "hadoop-node-2.example.com:8042"
}
Планировщики в YARN
FIFO Scheduler:
- Простой, первый пришёл — первый ушёл
- Может блокировать малые задания
Capacity Scheduler (по умолчанию):
<queue name="production">
<capacity>60</capacity>
<maximum-capacity>100</capacity>
</queue>
<queue name="development">
<capacity>40</capacity>
</queue>
Fair Scheduler:
- Распределяет ресурсы поровну между заданиями
- Динамически перебалансирует ресурсы
Преимущества YARN
- Multi-tenancy: разные приложения (Spark, Hive, Flink) могут работать одновременно
- Лучшее использование ресурсов: контейнеры динамически выделяются
- Масштабируемость: работает на кластерах из тысяч узлов
- Отказоустойчивость: AM может переправить упавший контейнер
Современный статус
YARN остаётся стандартом в экосистеме Hadoop, но Kubernetes постепенно вытесняет YARN как платформу для оркестрации контейнеров в облаке.