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

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

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

История

Разработка HDFS началась в 2005 году в компании Yahoo! под руководством Дага Каттинга и Майка Кафареллы. Проект был вдохновлён статьёй Google File System (GFS), опубликованной в 2003 году. Первоначально HDFS создавалась как часть проекта Nutch — поисковой системы с открытым исходным кодом. В 2006 году Yahoo! выделила HDFS в отдельный проект Apache Hadoop, который вскоре стал стандартом де-факто для хранения и обработки больших данных в корпоративной среде.

В 2008 году Apache Software Foundation выпустила первую стабильную версию Hadoop 0.18.0, включавшую HDFS. С тех пор система прошла несколько этапов эволюции: от поддержки только одного NameNode до введения федерации NameNode (HDFS Federation) в версии 2.0 (2012 год), что позволило масштабировать пространство имён. В версии 3.0 (2017 год) была добавлена поддержка энкодеров Erasure Coding, что снизило избыточность хранения по сравнению с репликацией, а также улучшена работа с контейнерами и поддержка нескольких NameNode для высокой доступности (High Availability).

Архитектура

HDFS использует архитектуру «главный-подчинённый» (master-slave). В кластере выделяются два типа узлов:

NameNode (главный узел)

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

DataNode (подчинённый узел)

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

Secondary NameNode

В ранних версиях HDFS существовал Secondary NameNode, который не был резервным узлом, а выполнял функцию периодического слияния журнала изменений (edit log) с образом файловой системы (fsimage) для предотвращения переполнения журнала. В современных версиях (начиная с Hadoop 2) эту роль выполняет Standby NameNode.

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

Блочная структура

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

Репликация

Для обеспечения отказоустойчивости каждый блок реплицируется на несколько DataNode (по умолчанию — 3 копии). Реплики размещаются по правилу «rack-aware»: первая копия — на том же узле, что и клиент (или на случайном узле в той же стойке), вторая — на другом узле в той же стойке, третья — на узле в другой стойке. Это позволяет пережить отказ одного узла или целой стойки.

Erasure Coding (EC)

Начиная с Hadoop 3.0, HDFS поддерживает Erasure Coding — метод кодирования с исправлением ошибок, который позволяет хранить данные с меньшей избыточностью, чем репликация. Например, при схеме RS-6-3 данные делятся на 6 частей и добавляются 3 проверочных, что даёт возможность восстановить исходные данные при потере любых 3 частей. Это снижает затраты на хранение примерно на 50% по сравнению с тройной репликацией, но увеличивает нагрузку на процессор и сеть при восстановлении.

Операции записи

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

Операции чтения

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

Классификация

HDFS относится к классу распределённых файловых систем, предназначенных для работы с большими данными (Big Data). В отличие от традиционных файловых систем (NTFS, ext4), HDFS не предназначена для хранения мелких файлов (менее размера блока) и не поддерживает произвольный доступ к данным с низкой задержкой. Она оптимизирована для потокового чтения больших объёмов данных и для параллельной обработки с помощью MapReduce, Spark или других фреймворков.

Применение

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

  • Хранилища данных (Data Lake): HDFS служит основой для построения озёр данных, где хранятся неструктурированные, полуструктурированные и структурированные данные в исходном виде.
  • Обработка больших данных: HDFS является стандартным хранилищем для фреймворков MapReduce, Apache Spark, Apache Hive, Apache HBase и других.
  • Архивное хранение: благодаря низкой стоимости хранения на стандартном оборудовании HDFS используется для долгосрочного хранения логов, журналов, исторических данных.
  • Научные вычисления: в астрономии, геномике, климатологии HDFS применяется для хранения результатов экспериментов и симуляций.

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

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

  • Отказоустойчивость: репликация и Erasure Coding обеспечивают сохранность данных при отказах оборудования.
  • Масштабируемость: кластер может быть расширен до тысяч узлов без остановки работы.
  • Высокая пропускная способность: оптимизация для потокового чтения позволяет обрабатывать большие объёмы данных за короткое время.
  • Низкая стоимость: использование стандартного оборудования (commodity hardware) снижает затраты на инфраструктуру.

Недостатки

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

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

  • Размер блока по умолчанию в HDFS (128 МБ) был выбран на основе эмпирических наблюдений: меньшие блоки увеличивают накладные расходы на метаданные, большие — снижают параллелизм при обработке.
  • HDFS может работать на любом оборудовании, поддерживающем Java, включая виртуальные машины и облачные инстансы.
  • В 2010 году Yahoo! сообщила, что её кластер HDFS хранил более 100 петабайт данных на 42 000 узлах.
  • HDFS не поддерживает жёсткие ссылки (hard links) и символические ссылки (symlinks) в полном объёме, хотя в версии 2.0 была добавлена ограниченная поддержка символических ссылок.

Источники

  • Apache Hadoop Documentation. HDFS Architecture Guide. Apache Software Foundation, 2023.
  • White, Tom. Hadoop: The Definitive Guide. 4th Edition. O'Reilly Media, 2015.
  • Ghemawat, Sanjay; Gobioff, Howard; Leung, Shun-Tak. The Google File System. ACM SIGOPS Operating Systems Review, 2003.
  • Shvachko, Konstantin; Kuang, Hairong; Radia, Sanjay; Chansler, Robert. The Hadoop Distributed File System. IEEE 26th Symposium on Mass Storage Systems and Technologies, 2010.
  • Yahoo! Developer Network. Hadoop at Yahoo! Overview, 2010.

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

На главную BFOmetr →