Открыть сервис

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

  1. Пользователь отправляет задание: через клиент Hadoop (например, hadoop jar myjob.jar) пользователь указывает JAR-файл с кодом MapReduce, входные и выходные пути в HDFS, а также параметры (число reducers, настройки памяти).
  2. JobTracker принимает задание: он создаёт объект Job, присваивает ему идентификатор и помещает в очередь.
  3. Планирование: JobTracker разбивает входные данные на сплиты (splits) — логические части, соответствующие блокам HDFS (обычно 64—128 МБ). Каждый сплит становится одной map-задачей. Число reduce-задач задаётся пользователем (по умолчанию 1).
  4. Назначение задач: JobTracker получает от TaskTracker heartbeat-сообщения с информацией о свободных слотах. Он назначает map-задачи на узлы, где хранятся соответствующие блоки данных (локальные задачи), или на ближайшие узлы. Reduce-задачи назначаются после завершения всех map-задач.
  5. Выполнение: TaskTracker запускает задачи в отдельных JVM-процессах. Каждый TaskTracker периодически отправляет JobTracker отчёты о прогрессе (например, процент выполненных map-задач).
  6. Завершение: после завершения всех map-задач JobTracker запускает reduce-задачи. Когда все reduce-задачи завершены, задание помечается как успешное, и JobTracker уведомляет клиента.

Критика и ограничения

JobTracker подвергался критике за централизованность и ограниченную масштабируемость. В крупных кластерах (более 2000 узлов) JobTracker становился узким местом, так как обрабатывал до 100 000 heartbeat-сообщений в секунду. Кроме того, при сбое JobTracker все задания терялись, что требовало ручного восстановления. Эти недостатки стали основными причинами перехода на YARN.

Источники

  1. Apache Hadoop Documentation (Hadoop 1.x), Apache Software Foundation.
  2. "Hadoop: The Definitive Guide" by Tom White, 4th Edition, O'Reilly Media, 2015.
  3. "Apache Hadoop YARN: Moving beyond MapReduce and Batch Processing" by Arun C. Murthy et al., Addison-Wesley, 2014.
  4. Официальная документация Apache Hadoop, раздел "MapReduce Tutorial" (архивная версия для Hadoop 1.x).
  5. "The Hadoop Distributed File System" by Konstantin Shvachko et al., IEEE MSST, 2010.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →