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 →