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

HDFS

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

История

Разработка HDFS началась в 2005 году в рамках проекта Apache Hadoop, созданного Дагом Каттингом и Майком Каффареллой. Первоначально Hadoop создавался для поддержки поискового движка Nutch, но вскоре стало ясно, что распределённая файловая система может использоваться как самостоятельный продукт. В 2006 году HDFS была выделена в отдельный подпроект Hadoop. В 2008 году Yahoo! запустила крупнейший на тот момент кластер Hadoop из 4000 узлов, что подтвердило масштабируемость HDFS. С тех пор HDFS стала стандартом де-факто для хранения больших данных в корпоративных и научных средах.

Архитектура

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

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

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

DataNode (рабочие узлы)

DataNode хранят фактические данные в виде блоков фиксированного размера (по умолчанию 128 МБ). Каждый блок реплицируется на несколько DataNode (обычно 3) для обеспечения отказоустойчивости. DataNode периодически отправляют NameNode отчёты о состоянии хранимых блоков (heartbeat и blockreport). При сбое DataNode NameNode инициирует создание новых реплик на других узлах.

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

Разделение на блоки

Любой файл в HDFS разбивается на блоки одинакового размера (кроме последнего блока, который может быть меньше). Блоки распределяются по DataNode таким образом, чтобы обеспечить равномерную загрузку дисков и сети. Размер блока выбирается большим (128 МБ или 256 МБ) для снижения накладных расходов на метаданные и оптимизации потокового чтения.

Репликация

Каждый блок хранится в нескольких копиях (по умолчанию 3). Реплики размещаются на разных стойках (rack-aware placement) для защиты от отказа целой стойки. Стратегия размещения: первая реплика — на узле, где выполняется запись (если это возможно); вторая — на узле в другой стойке; третья — на другом узле в той же стойке, что и вторая. При потере реплики NameNode автоматически создаёт новую.

Потоковый доступ

HDFS оптимизирована для последовательного чтения больших объёмов данных, а не для произвольного доступа к отдельным записям. Типичные сценарии: однократная запись (write-once) и многократное чтение (read-many). Изменение файлов после записи не поддерживается — файлы можно только удалять или перезаписывать целиком. Для обновления данных используются транзакционные системы поверх HDFS (например, HBase).

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

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

Недостатки

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

Применение

HDFS используется в качестве основного хранилища данных в экосистеме Hadoop. Она служит базой для:

  • Пакетной обработки (MapReduce, Apache Spark) — чтение данных из HDFS и запись результатов обратно.
  • Хранения логов — веб-серверы, приложения, датчики генерируют огромные объёмы логов, которые накапливаются в HDFS.
  • Научных вычислений — обработка данных с больших адронных коллайдеров, геномных последовательностей, спутниковых снимков.
  • Архивного хранения — долговременное хранение редко используемых данных с возможностью быстрого доступа.

Альтернативы и развитие

С развитием облачных технологий и появлением объектных хранилищ (Amazon S3, Google Cloud Storage, Yandex Object Storage) HDFS частично вытесняется из облачных сред, так как объектные хранилища обеспечивают аналогичную отказоустойчивость без необходимости управления кластером. Однако в локальных (on-premise) дата-центрах HDFS остаётся популярным решением. Существуют также гибридные архитектуры, где HDFS используется для кэширования данных из облачного хранилища.

Современные версии HDFS (начиная с Hadoop 3.x) поддерживают:

  • Erasure codingкодирование с избыточностью, снижающее накладные расходы на репликацию (вместо 3 копий — 1.4 копии).
  • HDFS Federation — несколько независимых NameNode, управляющих разными разделами файловой системы.
  • HDFS Router — единая точка доступа для приложений.

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

  • HDFS не поддерживает символические ссылки и жёсткие ссылки на файлы.
  • В HDFS нет понятия «текущий каталог» — все пути абсолютные.
  • Размер блока в 128 МБ выбран не случайно: он позволяет уменьшить количество блоков в кластере и снизить нагрузку на NameNode.
  • Первая версия HDFS была написана на Java, что обеспечило кроссплатформенность, но привело к некоторым проблемам с производительностью.

Источники

  • Apache Hadoop Documentation: HDFS Architecture Guide
  • White, Tom. Hadoop: The Definitive Guide. O'Reilly Media, 2015.
  • Shvachko, Konstantin et al. "The Hadoop Distributed File System." IEEE MSST, 2010.
  • Официальная документация Apache Hadoop (hadoop.apache.org)

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

На главную BFOmetr →