JobTracker¶
JobTracker — это центральный компонент программной платформы Apache Hadoop, отвечающий за управление заданиями (jobs) и распределение задач (tasks) между узлами кластера в рамках модели распределённых вычислений MapReduce. JobTracker выполняет функции планировщика, монитора и координатора, обеспечивая выполнение пользовательских заданий на множестве машин, объединённых в вычислительный кластер. В экосистеме Hadoop JobTracker является ключевым элементом первого поколения (Hadoop 1.x), однако в более поздних версиях (Hadoop 2.x и выше) его функции были перераспределены между компонентами YARN (ResourceManager и ApplicationMaster).
¶Архитектура и роль в Hadoop
В классической архитектуре Hadoop 1.x JobTracker работает в паре с TaskTracker — компонентом, запущенным на каждом узле кластера. JobTracker принимает от пользователя задание, описывающее этапы обработки данных (Map и Reduce), разбивает его на отдельные задачи, назначает их конкретным узлам и отслеживает их выполнение. TaskTracker, в свою очередь, запускает на своих узлах задачи (процессы Map или Reduce) и регулярно отправляет JobTracker отчёты о состоянии (heartbeats). JobTracker также отвечает за повторное выполнение задач в случае сбоев на узлах.
¶Основные функции JobTracker:
- Приём заданий: получение от клиента (например, через командную строку
hadoop jar) описания задания, включая входные данные, код MapReduce и параметры. - Планирование: разбиение задания на задачи (map tasks и reduce tasks) и определение порядка их выполнения. JobTracker учитывает доступные ресурсы (количество слотов на узлах) и политику планировщика.
- Назначение задач: распределение задач между узлами с учётом локальности данных (data locality) — стремление запускать задачи на узлах, где хранятся обрабатываемые блоки данных (HDFS), чтобы минимизировать сетевой трафик.
- Мониторинг: сбор heartbeat-сообщений от TaskTracker, отслеживание прогресса выполнения задач, фиксация завершённых задач и выявление сбоев.
- Обработка сбоев: при обнаружении отказа узла или задачи (например, из-за тайм-аута) JobTracker переназначает задачу на другой узел. При повторяющихся сбоях (например, из-за ошибки в коде) задание может быть полностью остановлено.
- Управление жизненным циклом: JobTracker управляет состоянием задания (подготовка, выполнение, завершение) и предоставляет интерфейсы для мониторинга (веб-интерфейс, API).
¶История и развитие
JobTracker был представлен в составе Apache Hadoop версии 0.1 в 2006 году, как часть реализации модели MapReduce, описанной в работах Google. В первых версиях Hadoop JobTracker был единственным координатором, что обеспечивало простоту, но создавало узкие места.
¶Проблемы JobTracker в Hadoop 1.x:
- Единая точка отказа (SPOF): при сбое JobTracker все выполняющиеся задания терялись, и кластер требовал перезапуска с восстановлением состояния.
- Ограниченная масштабируемость: JobTracker мог обслуживать кластеры до 4000—5000 узлов (на практике — около 2000), так как вся нагрузка по планированию и мониторингу ложилась на один процесс.
- Неэффективное использование ресурсов: JobTracker управлял фиксированными слотами (map slots и reduce slots), что не позволяло гибко распределять ресурсы между разными типами задач.
- Отсутствие поддержки альтернативных вычислительных моделей: JobTracker был жёстко привязан к MapReduce, не поддерживая другие фреймворки (например, Spark, Tez).
В 2012 году с выходом Hadoop 2.0 была представлена архитектура YARN (Yet Another Resource Negotiator), которая заменила JobTracker двумя компонентами:
- ResourceManager — глобальный планировщик ресурсов, управляющий распределением вычислительных мощностей (CPU, память) между приложениями.
- ApplicationMaster — экземпляр, запускаемый для каждого приложения, отвечающий за координацию его задач (аналог JobTracker, но для конкретного задания).
Таким образом, JobTracker как отдельный компонент был упразднён, а его функции были разделены и децентрализованы. В Hadoop 3.x (2017) поддержка классического JobTracker полностью удалена.
¶Планировщики JobTracker
JobTracker использует подключаемые планировщики для определения порядка выполнения заданий. В Hadoop 1.x было три основных варианта:
- FIFO Scheduler (по умолчанию): задания выполняются в порядке поступления, без учёта приоритетов. Простой, но неэффективный при смешанной нагрузке.
- Fair Scheduler: разработан компанией Facebook (продукт Meta, признанной экстремистской и запрещённой в РФ), распределяет ресурсы между заданиями так, чтобы каждое задание получало примерно равную долю времени (fair share). Поддерживает очереди и приоритеты.
- Capacity Scheduler: разработан компанией Yahoo, позволяет создавать очереди с гарантированными ресурсами (ёмкостью) для разных групп пользователей (например, отделы компании). Поддерживает гибкое распределение неиспользованных ресурсов.
¶Взаимодействие с другими компонентами Hadoop
JobTracker тесно связан с Hadoop Distributed File System (HDFS). При запуске задания JobTracker получает от клиента информацию о входных данных (пути в HDFS). Планировщик старается размещать map-задачи на узлах, где хранятся соответствующие блоки данных (data locality), что снижает сетевые накладные расходы. TaskTracker, запущенный на каждом узле, взаимодействует с HDFS для чтения и записи промежуточных и выходных данных.
JobTracker также взаимодействует с NameNode (сервером HDFS) для получения информации о расположении блоков данных, что необходимо для планирования локальности.
¶Пример работы JobTracker
- Пользователь отправляет задание: через клиент Hadoop (например,
hadoop jar myjob.jar) пользователь указывает JAR-файл с кодом MapReduce, входные и выходные пути в HDFS, а также параметры (число reducers, настройки памяти). - JobTracker принимает задание: он создаёт объект Job, присваивает ему идентификатор и помещает в очередь.
- Планирование: JobTracker разбивает входные данные на сплиты (splits) — логические части, соответствующие блокам HDFS (обычно 64—128 МБ). Каждый сплит становится одной map-задачей. Число reduce-задач задаётся пользователем (по умолчанию 1).
- Назначение задач: JobTracker получает от TaskTracker heartbeat-сообщения с информацией о свободных слотах. Он назначает map-задачи на узлы, где хранятся соответствующие блоки данных (локальные задачи), или на ближайшие узлы. Reduce-задачи назначаются после завершения всех map-задач.
- Выполнение: TaskTracker запускает задачи в отдельных JVM-процессах. Каждый TaskTracker периодически отправляет JobTracker отчёты о прогрессе (например, процент выполненных map-задач).
- Завершение: после завершения всех map-задач JobTracker запускает reduce-задачи. Когда все reduce-задачи завершены, задание помечается как успешное, и JobTracker уведомляет клиента.
¶Критика и ограничения
JobTracker подвергался критике за централизованность и ограниченную масштабируемость. В крупных кластерах (более 2000 узлов) JobTracker становился узким местом, так как обрабатывал до 100 000 heartbeat-сообщений в секунду. Кроме того, при сбое JobTracker все задания терялись, что требовало ручного восстановления. Эти недостатки стали основными причинами перехода на YARN.
¶Источники
- Apache Hadoop Documentation (Hadoop 1.x), Apache Software Foundation.
- "Hadoop: The Definitive Guide" by Tom White, 4th Edition, O'Reilly Media, 2015.
- "Apache Hadoop YARN: Moving beyond MapReduce and Batch Processing" by Arun C. Murthy et al., Addison-Wesley, 2014.
- Официальная документация Apache Hadoop, раздел "MapReduce Tutorial" (архивная версия для Hadoop 1.x).
- "The Hadoop Distributed File System" by Konstantin Shvachko et al., IEEE MSST, 2010.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →


