1. Архитектура и ядро Hadoop: принципы работы HDFS, YARN и MapReduce
Архитектура и ядро Hadoop: принципы работы HDFS, YARN и MapReduce
В эпоху цифровой трансформации компании сталкиваются с парадоксом: чем больше данных генерируют системы, тем сложнее извлечь из них практическую пользу. Традиционные реляционные базы данных отлично справляются с гигабайтами структурированной информации, но когда счет идет на терабайты и петабайты разнородных логов, текстов и медиафайлов, классические подходы перестают работать. Один, даже самый мощный сервер, физически не способен вместить и обработать такой объем за адекватное время.
Для решения этой проблемы был создан Apache Hadoop — open-source фреймворк, который позволяет распределять хранение и обработку данных по кластерам, состоящим из сотен и тысяч обычных, недорогих серверов. Вместо того чтобы покупать один суперкомпьютер, Hadoop объединяет множество стандартных машин в единый вычислительный организм.
Фундамент этой экосистемы держится на трех ключевых компонентах, которые образуют ядро платформы. Понимание их внутренней механики — это первый и самый важный шаг к построению надежных систем аналитики больших данных.
!Схема архитектуры ядра Hadoop: HDFS, YARN и MapReduce
HDFS: Распределенная файловая система
HDFS (Hadoop Distributed File System) — это система хранения данных в Hadoop. Ее главная задача — надежно сохранить файлы любого размера, распределив их по жестким дискам множества серверов в кластере.
В основе HDFS лежат два фундаментальных принципа: разделение на блоки и репликация (дублирование) данных.
Когда вы загружаете файл в HDFS, система не сохраняет его целиком на одном диске. Файл нарезается на фрагменты фиксированного размера, которые называются блоками. По умолчанию размер одного блока в современных версиях Hadoop составляет 128 МБ.
Зачем нужен такой большой размер блока? В традиционных операционных системах размер блока обычно равен 4 КБ. В больших данных чтение тысяч мелких блоков привело бы к тому, что жесткий диск тратил бы больше времени на поиск нужного сектора (позиционирование магнитной головки), чем на саму передачу данных. Блок в 128 МБ минимизирует время поиска и обеспечивает высокую скорость потокового чтения.
Архитектура HDFS работает по принципу Master-Slave (ведущий-ведомый) и состоит из двух типов узлов:
NameNode (Master*) — «мозг» файловой системы. Он не хранит сами данные. NameNode хранит только метаданные: названия файлов, права доступа и, самое главное, карту того, на какие блоки разбит файл и на каких серверах эти блоки лежат. Вся эта информация держится в оперативной памяти для максимальной скорости доступа. DataNode (Slave*) — «рабочие лошадки». Это серверы, на жестких дисках которых физически хранятся блоки данных. Они регулярно отправляют NameNode отчеты о своем состоянии и наличии блоков.
Поскольку Hadoop изначально проектировался для работы на дешевом оборудовании, выход жесткого диска или целого сервера из строя считается нормой, а не исключением. Для защиты от потери данных HDFS использует репликацию. По умолчанию каждый блок данных копируется 3 раза и сохраняется на трех разных DataNode.
Рассмотрим конкретный пример с числами. Допустим, нам нужно сохранить лог-файл размером 400 МБ.
Количество блоков = Размер файла / Размер блока.
Округляем в большую сторону и получаем 4 блока. Три блока будут иметь размер ровно 128 МБ, а четвертый — оставшиеся 16 МБ (HDFS не занимает пустое место, если блок заполнен не до конца).
С учетом фактора репликации, равного 3, кластеру потребуется сохранить 12 физических фрагментов. Общий объем занятого дискового пространства составит МБ. Если один из серверов сгорит, NameNode мгновенно заметит пропажу реплик и даст команду оставшимся DataNode создать новые копии недостающих блоков на других серверах. Данные останутся в безопасности.
YARN: Операционная система кластера
Если HDFS — это жесткий диск кластера, то YARN (Yet Another Resource Negotiator) — это его операционная система. YARN отвечает за управление вычислительными ресурсами (оперативной памятью и ядрами процессора) и планирование задач.
В ранних версиях Hadoop (до версии 2.0) система могла выполнять только один тип задач. YARN отделил управление ресурсами от обработки данных, позволив запускать на одном кластере HDFS разные инструменты: потоковую аналитику, машинное обучение, графовые вычисления и SQL-запросы.
YARN также имеет архитектуру Master-Slave:
ResourceManager (Master*) — главный распределитель ресурсов. Он знает, сколько свободной памяти и CPU есть на каждом сервере, и решает, какому приложению отдать эти ресурсы прямо сейчас. NodeManager (Slave*) — агент, работающий на каждом узле кластера. Он следит за использованием ресурсов на своей конкретной машине и подчиняется командам ResourceManager. * ApplicationMaster — уникальный процесс, который создается для каждой запущенной задачи. Он запрашивает ресурсы у ResourceManager и контролирует выполнение конкретного приложения.
> YARN превратил Hadoop из системы одной функции в многоцелевую платформу для работы с данными, позволив множеству различных приложений одновременно и безопасно делить ресурсы одного кластера. > > Apache Software Foundation
Представьте себе большой ресторан. ResourceManager — это хостес на входе, который знает, какие столики свободны. NodeManager — это официанты, обслуживающие конкретные зоны. Когда приходит компания гостей (новая задача), хостес назначает им старшего менеджера банкета (ApplicationMaster). Этот менеджер просит у хостес нужное количество стульев и столов (ресурсов), а затем следит, чтобы его гостям вовремя приносили еду, не мешая при этом другим посетителям ресторана.
MapReduce: Парадигма распределенных вычислений
MapReduce — это программная модель для параллельной обработки огромных объемов данных.
Главная инновация MapReduce заключается в смене парадигмы. В традиционных системах данные из хранилища передаются по сети к процессору для вычислений. Если данных петабайты, сеть просто «ляжет». MapReduce делает наоборот: он отправляет вычислительный код к тем серверам, где физически лежат данные.
Процесс обработки делится на две основные фазы:
Рассмотрим классический пример из ритейла. У крупной торговой сети есть логи продаж со всех 1000 магазинов за год (терабайты данных). Задача: посчитать общую выручку по каждой категории товаров (электроника, продукты, одежда).
Вместо того чтобы скачивать все логи на один сервер центрального офиса, мы запускаем MapReduce.
На этапе Map каждый сервер, хранящий кусок логов, локально просматривает свои записи. Он создает пары: [Электроника: 5000 руб.], [Продукты: 200 руб.]. Эта работа выполняется параллельно на сотнях машин за считанные минуты.
Затем система группирует данные по ключу (категории). Все значения с ключом «Электроника» отправляются на один сервер, с ключом «Продукты» — на другой.
На этапе Reduce сервер получает список: Электроника: [5000, 12000, 3000...]. Программа просто суммирует эти числа и выдает итоговую строку: Итого Электроника: 15000000 руб..
Взаимодействие компонентов
Архитектура Hadoop — это слаженный механизм. Когда аналитик запускает задачу:
Понимание этой триады — HDFS (хранение), YARN (ресурсы) и MapReduce (вычисления) — позволяет дата-инженерам писать оптимизированные ETL-процессы. В следующих статьях мы рассмотрим, как над этим фундаментом надстраиваются более современные и быстрые инструменты, такие как Apache Spark и Hive, которые абстрагируют сложность MapReduce, сохраняя при этом всю мощь распределенного кластера.