HDFS — это распределённая файловая система из экосистемы Apache Hadoop, предназначенная для хранения очень больших наборов данных на кластере обычных серверов. Она разбивает файлы на блоки, размещает их на разных узлах и хранит несколько копий, чтобы данные оставались доступными даже при сбоях оборудования.
Содержание статьи
Как HDFS работает простыми словами
HDFS хранит один большой файл не целиком на одном сервере, а частями на множестве машин. Такой подход даёт масштабирование, параллельную обработку и устойчивость к отказам.
Когда файл загружают в кластер, система делит его на блоки фиксированного размера. Затем эти блоки распределяются между узлами хранения. Обычно каждая часть хранится не в одном экземпляре, а в нескольких копиях. Если один сервер перестаёт отвечать, система использует оставшиеся копии и продолжает работу.
Это особенно полезно там, где данные занимают не гигабайты, а терабайты и больше. Переносить такие объёмы между машинами дорого по времени и по сети. Поэтому в Hadoop вычисления по возможности запускают рядом с данными, а не наоборот.
Что входит в архитектуру HDFS
Архитектура HDFS строится вокруг двух основных ролей: NameNode и DataNode. Первый управляет структурой файловой системы, вторые хранят сами блоки данных.
NameNode знает, какие файлы существуют в кластере, где лежат их блоки, какие права доступа назначены и сколько копий должно храниться. Он работает как управляющий узел и ведёт пространство имён файловой системы: каталоги, имена файлов, операции открытия, закрытия и переименования.
DataNode отвечает за хранение блоков на локальном диске конкретного узла. Он обрабатывает чтение, запись, удаление и репликацию блоков. В типичной конфигурации на каждом сервере кластера работает один DataNode.
Из-за такого разделения обязанностей пользовательские данные обычно не проходят через NameNode. Это упрощает управление метаданными и снижает нагрузку на управляющий узел.
Роль NameNode
NameNode — это центральный компонент, который хранит метаданные HDFS и отслеживает состояние файловой системы. Без него кластер не понимает, где находятся блоки и как устроена структура каталогов.
Он не хранит все пользовательские файлы внутри себя. Его задача — знать, на каких DataNode размещены блоки, сколько копий существует и какие изменения произошли в пространстве имён. По этой причине стабильность NameNode критична для всей системы.
Роль DataNode
DataNode — это рабочий узел HDFS, который хранит блоки данных и выполняет команды NameNode. Именно на этих узлах лежат реальные файлы в разобранном на части виде.
Каждый DataNode регулярно отправляет управляющему узлу сигналы состояния и отчёты о блоках. Если такие сигналы перестают поступать, NameNode считает узел недоступным и перестраивает размещение копий данных на других серверах.
Какие преимущества даёт HDFS
HDFS ценят за отказоустойчивость, масштабируемость и высокую пропускную способность при работе с большими объёмами данных. Система рассчитана на пакетную обработку и длительное хранение крупных файлов.
- Отказоустойчивость. Данные дублируются на нескольких узлах, поэтому сбой одного сервера не означает потерю файла.
- Горизонтальное масштабирование. Кластер можно расширять добавлением новых машин.
- Высокая пропускная способность. HDFS ориентирована на потоковое чтение больших массивов данных.
- Работа на обычном оборудовании. Для кластера не требуются дорогие специализированные системы хранения.
- Поддержка больших наборов данных. Система рассчитана на файлы от гигабайтов до терабайтов и выше.
- Переносимость. Компоненты Hadoop работают на разных операционных системах, если среда поддерживает Java.
При этом HDFS обычно выбирают не ради мгновенного отклика интерфейса, а ради стабильной обработки больших потоков данных. Это файловая система для больших задач, а не для частого редактирования маленьких файлов в реальном времени.
Почему HDFS считается отказоустойчивой
Отказоустойчивость HDFS обеспечивается репликацией блоков и постоянным контролем состояния узлов. Если часть кластера выходит из строя, система продолжает работать за счёт копий на других серверах.
Каждый DataNode отправляет NameNode периодические сигналы, которые подтверждают, что узел доступен. Вместе с ними передаются сведения о размещённых блоках. Если сигналы прекращаются, узел исключается из активной схемы работы, а недостающие копии блоков создаются заново в других местах кластера.
Дополнительную защиту даёт размещение копий по разным стойкам. Если проблема затронет целую стойку, данные останутся доступны на других физических сегментах инфраструктуры.
Как устроены блоки и репликация данных
В HDFS файл хранится как последовательность блоков, а каждый блок может иметь несколько копий. Это основа распределённого хранения и восстановления после сбоев.
Блоки позволяют системе работать с очень большими файлами без необходимости держать их в одном месте. Для HDFS характерен крупный размер блока. В Hadoop 2.x значением по умолчанию был блок 128 МБ. Крупные блоки уменьшают число обращений к метаданным и сокращают время позиционирования на диске.
Коэффициент репликации задаёт, сколько копий каждого файла или блока нужно хранить. Его можно определить при создании файла и при необходимости изменить позже.
У HDFS есть важная особенность: файл обычно записывается одним писателем и не меняется произвольным образом после записи. Такая модель упрощает согласованность данных в распределённой среде.
Чем HDFS отличается от обычной файловой системы
Обычная файловая система рассчитана на один сервер или одно устройство хранения, а HDFS — на целый кластер машин. Она создавалась под большие данные и пакетную обработку, а не под интерактивную работу с небольшими файлами.
| Критерий | Обычная файловая система | HDFS |
| Масштаб хранения | Один сервер или одно хранилище | Кластер из множества узлов |
| Тип нагрузки | Повседневная файловая работа | Потоковое чтение и пакетная обработка |
| Отказоустойчивость | Зависит от диска и резервирования | Копии блоков на разных узлах |
| Работа с файлами | Частые мелкие операции | Крупные файлы и последовательный доступ |
| Модель размещения | Файл целиком в одном месте | Файл разбит на блоки по кластеру |
Пользователь видит привычную иерархию каталогов и файлов, но внутри всё устроено иначе. За знакомой структурой скрывается распределённая схема размещения блоков и учёт метаданных на уровне всего кластера.
Как устроено пространство имён файловой системы
Пространство имён HDFS похоже на традиционную иерархию каталогов и файлов. Пользователь может создавать папки, перемещать файлы, удалять их и переименовывать.
Эта иерархия хранится и поддерживается NameNode. Он фиксирует изменения в структуре каталогов, следит за связью между файлами и блоками, а также хранит информацию о числе требуемых копий. За счёт этого HDFS выглядит знакомо на уровне логики работы, хотя физически данные разбросаны по разным узлам.
Как данные читаются и записываются в HDFS
При записи файл разбивается на блоки и распределяется между DataNode, а при чтении клиент получает информацию о местоположении нужных блоков и забирает их напрямую. Это снижает лишнюю нагрузку на управляющий узел.
- Клиент обращается к NameNode за метаданными.
- NameNode сообщает, где должны быть записаны блоки или откуда их читать.
- Клиент передаёт данные на DataNode или считывает их оттуда.
- DataNode создают и реплицируют блоки по правилам кластера.
- NameNode обновляет сведения о размещении блоков.
Такой механизм полезен при работе с большими файлами и длительными заданиями. Он плохо подходит для сценариев, где требуется много мелких изменений и частая случайная запись в разные части файла.
Где применяют HDFS
HDFS используют там, где нужно хранить и обрабатывать очень большие объёмы разнородных данных на кластере. Чаще всего речь идёт о системах аналитики, озёрах данных и пакетной обработке.
Система подходит для хранения структурированных, полуструктурированных и неструктурированных данных. Её применяют как слой хранения в экосистеме Hadoop, а также как основу для задач, где нужно собирать большие массивы журналов, телеметрии, архивов, данных датчиков или исторических выгрузок.
В качестве простого образа можно представить огромный телефонный справочник, который нельзя хранить на одной машине целиком. HDFS раскладывает его по частям по всему кластеру и хранит дополнительные копии, чтобы справочник можно было собрать и обработать даже после отказа отдельных узлов.
Типовые сценарии использования
На практике HDFS применяют в тех областях, где поток данных непрерывен, а объём хранения быстро растёт. Особенно это заметно в аналитических и инфраструктурных задачах.
- Энергетика. Сбор телеметрии и показаний из сетевой инфраструктуры.
- Здравоохранение. Хранение медицинских записей, данных оборудования и сенсоров.
- Маркетинг. Анализ данных из CRM, кассовых систем, кампаний и социальных платформ.
- Нефтегазовая отрасль. Объединение данных разных форматов для последующей аналитики.
- Розница. Сведение в одно хранилище продаж, обращений в поддержку и поведенческих данных.
- Телеком. Анализ поведения сети, истории эксплуатации и пользовательской активности.
Чем HDFS отличается от HBase
HDFS и HBase решают разные задачи. HDFS — это файловая система для распределённого хранения больших файлов, а HBase — колоночная NoSQL СУБД, которая работает поверх HDFS.
Если нужна основа для хранения больших наборов данных и пакетной обработки, используют HDFS. Если требуется более удобный доступ к данным на уровне таблиц и операций, близких к работе с базой данных, рассматривают HBase. Путать эти компоненты не стоит: один отвечает за хранение файловых блоков, другой — за модель доступа к данным поверх этого слоя.
Какие интерфейсы доступа поддерживает HDFS
HDFS предоставляет несколько способов доступа к данным: через Java API, через обёртки для других языков и через HTTP-интерфейс для просмотра файлов. Это упрощает встраивание системы в разные инструменты обработки данных.
Поскольку HDFS написана на Java, она естественно интегрируется с Java-приложениями и компонентами Hadoop. При этом использовать её можно и из других языков, если для них есть соответствующие средства взаимодействия.
Какие ограничения у HDFS нужно учитывать
HDFS лучше всего подходит для больших файлов, последовательного чтения и пакетной обработки. Для сценариев с частыми интерактивными запросами и большим количеством мелких файлов она подходит хуже.
Система изначально проектировалась под высокую пропускную способность, а не под минимальную задержку. Поэтому её сильная сторона — долговременная обработка больших наборов данных. Если задаче нужен быстрый отклик на отдельные записи, обычно рассматривают другие инструменты поверх или рядом с Hadoop.
Как HDFS связана с экосистемой Hadoop
HDFS — один из базовых компонентов Apache Hadoop. Она отвечает за хранение данных, тогда как другие части экосистемы занимаются вычислениями, управлением ресурсами и дополнительными сервисами.
В классической связке Hadoop рядом с HDFS находятся MapReduce для обработки данных и YARN для управления ресурсами кластера. Вокруг них существует широкий набор проектов: HBase, Hive, Pig, Oozie, Spark, ZooKeeper и другие. HDFS в этой схеме выступает фундаментом, на котором строятся вычислительные и аналитические процессы.
Как появилась HDFS
HDFS выросла из идей, описанных в работах Google о распределённом хранении и обработке данных на больших кластерах. Разработка Hadoop началась в рамках проекта Apache Nutch, а позже оформилась в отдельную экосистему.
С Hadoop обычно связывают имена Doug Cutting и Mike Cafarella. В ранних версиях проекта уже присутствовали основы HDFS и MapReduce. Позже экосистема расширилась и перешла под управление Apache Software Foundation.
Когда HDFS уместна, а когда нет
HDFS уместна, если нужно надёжно хранить очень большие объёмы данных на кластере и обрабатывать их пакетно. Если задача сводится к быстрому доступу к небольшим файлам или к частым изменениям записей, лучше подходят другие системы.
Коротко критерий выбора выглядит так: большие файлы, много узлов, потоковое чтение, репликация и аналитические задачи — это естественная среда для HDFS. Небольшие документы, интерактивные операции и частое редактирование отдельных частей файла — уже менее подходящий сценарий.