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

Распределённая файловая система Hadoop

Распределённая файловая система Hadoop (Hadoop Distributed File System, HDFS) — это распределённая, отказоустойчивая файловая система, предназначенная для хранения данных большого объёма (петабайты и более) на кластерах из стандартных серверов. HDFS является основным компонентом экосистемы Apache Hadoop и обеспечивает высокую пропускную способность при потоковом доступе к данным, что делает её ключевой технологией для задач обработки больших данных (Big Data).

История

Разработка HDFS началась в 2005 году в рамках проекта Apache Nutch, который ставил целью создание масштабируемого поискового робота. Архитектура HDFS была вдохновлена публикациями Google File System (GFS), вышедшими в 2003 году. В 2006 году HDFS стала частью отдельного проекта Apache Hadoop, который был создан Дагом Каттингом (Doug Cutting) и Майком Кафареллой (Mike Cafarella). Первая стабильная версия Hadoop (1.0.0) вышла в 2011 году. С тех пор HDFS активно развивается, поддерживая новые функции, такие как федерация имён (HDFS Federation) и высокая доступность (High Availability). В настоящее время HDFS является стандартом де-факто для хранения данных в корпоративных хранилищах данных и системах машинного обучения.

Архитектура

HDFS построена по архитектуре «ведущий-ведомый» (master-slave). Кластер состоит из одного или нескольких узлов-имен (NameNode) и множества узлов данных (DataNode).

NameNode (узел-имя)

NameNode — это центральный сервер, который управляет метаданными файловой системы: иерархией каталогов, правами доступа, а также отображением блоков данных на узлы. Он хранит всю информацию о том, какие блоки составляют файл и на каких DataNode они расположены. NameNode является критической точкой отказа: при его выходе из строя кластер становится недоступным до восстановления. Для обеспечения отказоустойчивости используются механизмы резервирования (Standby NameNode) и ведение журнала транзакций (EditLog).

DataNode (узел данных)

DataNode — это рабочие узлы, на которых физически хранятся блоки данных. Каждый DataNode периодически отправляет NameNode отчёты о своём состоянии (heartbeat) и списке хранящихся блоков (block report). DataNode отвечают за чтение и запись блоков по запросам клиентов или NameNode.

Блоки данных

Файлы в HDFS разбиваются на блоки фиксированного размера (по умолчанию — 128 МБ, ранее — 64 МБ). Каждый блок хранится на нескольких DataNode (по умолчанию — 3 копии) для обеспечения отказоустойчивости. Размер блока существенно больше, чем в традиционных файловых системах (например, 4 КБ в ext4), что снижает накладные расходы на метаданные и улучшает производительность при потоковой обработке.

Репликация

Репликация данных — ключевой механизм отказоустойчивости HDFS. По умолчанию каждый блок реплицируется трижды: две копии на узлах одной стойки и одна копия на узле другой стойки. Это позволяет кластеру пережить отказ нескольких узлов или даже целой стойки. При обнаружении потери реплики NameNode запускает процесс восстановления, создавая новые копии на доступных DataNode.

Принципы работы

Запись данных

При записи файла клиент обращается к NameNode, который определяет, на какие DataNode и в какой последовательности следует отправлять блоки. Клиент разбивает файл на блоки и передаёт их первому DataNode, который реплицирует блок на следующий узел, и так далее. После завершения записи всех блоков клиент уведомляет NameNode, который обновляет метаданные.

Чтение данных

При чтении файла клиент запрашивает у NameNode список DataNode, на которых хранятся блоки. Затем клиент напрямую обращается к ближайшему DataNode (с учётом топологии сети) и считывает блоки последовательно. Такой подход минимизирует задержки и обеспечивает высокую пропускную способность.

Топология сети

HDFS учитывает физическое расположение узлов в стойках (rack awareness). Это позволяет оптимизировать размещение реплик и минимизировать межстоечный трафик. Администратор задаёт топологию в конфигурации кластера, а NameNode использует её для принятия решений о репликации.

Классификация и виды

HDFS является частью экосистемы Apache Hadoop, которая включает также:

  • MapReduceмодель распределённых вычислений, работающая с данными на HDFS.
  • YARN (Yet Another Resource Negotiator) — менеджер ресурсов, управляющий выполнением задач.
  • Hive — система для выполнения SQL-запросов над данными в HDFS.
  • HBase — распределённая база данных, работающая поверх HDFS.

Существуют также коммерческие дистрибутивы Hadoop, включающие HDFS, например, Cloudera, Hortonworks (ныне часть Cloudera) и MapR.

Применение

HDFS широко используется в различных областях, где требуется обработка больших объёмов данных:

  • Хранилища данных (Data Lakes): HDFS служит основой для хранения неструктурированных и структурированных данных, таких как логи, данные сенсоров, изображения, тексты.
  • Машинное обучение и анализ данных: библиотеки и фреймворки, такие как Apache Spark, TensorFlow, PyTorch, могут напрямую читать данные из HDFS.
  • Обработка логов и потоковых данных: системы типа Apache Flume, Apache Kafka, Apache Storm используют HDFS для долговременного хранения данных.
  • Научные исследования: HDFS применяется в геномике, астрофизике, климатологии для хранения и обработки больших массивов данных.
  • Поисковые системы: HDFS лежит в основе многих поисковых систем, включая ранние версии Yahoo! Search.

Преимущества и недостатки

Преимущества

  • Масштабируемость: кластеры HDFS могут содержать тысячи узлов и хранить петабайты данных.
  • Отказоустойчивость: репликация данных и автоматическое восстановление после сбоев.
  • Высокая пропускная способность: оптимизация для потокового чтения/записи больших файлов.
  • Низкая стоимость: использование стандартных серверов вместо специализированного оборудования.
  • Переносимость: реализована на Java, работает на любых платформах, поддерживающих JVM.

Недостатки

  • Высокая задержка: HDFS не подходит для задач, требующих низкой задержки доступа (например, OLTP-системы).
  • Неэффективность для малых файлов: большое количество маленьких файлов приводит к перегрузке NameNode из-за роста метаданных.
  • Сложность администрирования: требуется настройка и мониторинг кластера, а также управление топологией сети.
  • Ограниченная поддержка произвольного доступа: HDFS оптимизирована для последовательного доступа, а не для случайных операций чтения/записи.

Интересные факты

  • HDFS изначально была разработана для поддержки поискового робота Yahoo!, который обрабатывал миллиарды веб-страниц.
  • По умолчанию размер блока в HDFS составляет 128 МБ, но для кластеров с очень большими данными (сотни петабайт) может быть увеличен до 256 МБ или 512 МБ.
  • HDFS не поддерживает жёсткие ссылки (hard links) и символические ссылки (symlinks) в полном объёме, как это делают традиционные файловые системы.
  • Для обеспечения высокой доступности NameNode используется механизм Quorum Journal Manager (QJM), который хранит журнал транзакций на нескольких узлах.

Источники

  • Apache Hadoop Documentation. HDFS Architecture Guide.
  • White, T. (2015). Hadoop: The Definitive Guide. 4th Edition. O'Reilly Media.
  • Ghemawat, S., Gobioff, H., & Leung, S.-T. (2003). The Google File System. ACM SIGOPS Operating Systems Review.
  • Shvachko, K., Kuang, H., Radia, S., & Chansler, R. (2010). The Hadoop Distributed File System. IEEE 26th Symposium on Mass Storage Systems and Technologies (MSST).

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

На главную BFOmetr →