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).
Преимущества и недостатки
Преимущества
- Масштабируемость: кластер может содержать тысячи узлов и хранить петабайты данных.
- Отказоустойчивость: автоматическое восстановление реплик при сбоях.
- Экономичность: работает на стандартном оборудовании без дорогих RAID-массивов.
- Потоковая производительность: высокая пропускная способность при последовательном чтении.
Недостатки
- Высокая задержка: 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 →