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

NameNode

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

История

Происхождение

Разработка Hadoop началась в 2005 году в компании Yahoo! под руководством Дага Каттинга (Doug Cutting) и Майка Каффарелла (Mike Cafarella). Проект был вдохновлён двумя публикациями Google: статьёй о Google File System (GFS) (2003) и статьёй о MapReduce (2004). NameNode, как аналог GFS Master в архитектуре Google, был реализован в рамках HDFS — распределённой файловой системы, предназначенной для хранения больших объёмов данных на кластерах из недорогих серверов.

Развитие

Первая версия Hadoop (0.1.0) вышла в апреле 2006 года. В ней NameNode уже выполнял функции управления метаданными, но обладал серьёзным недостатком — единой точкой отказа (SPOF). При выходе из строя NameNode весь кластер становился недоступным, а восстановление требовало ручного вмешательства. В версии Hadoop 2.0 (2012) была представлена High Availability (HA) для NameNode, позволяющая иметь активную и резервную копии. В Hadoop 3.0 (2017) появилась поддержка Erasure Coding (стирающего кодирования), что снизило нагрузку на NameNode за счёт уменьшения количества блоков.

Архитектура и принцип работы

Компоненты

NameNode работает в связке с несколькими типами узлов:

Хранение метаданных

NameNode хранит метаданные в оперативной памяти (RAM) для быстрого доступа. На диске они сохраняются в двух файлах:

Процесс чтения и записи

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

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

По режиму работы

По версиям Hadoop

Характеристики

Ограничения

Масштабируемость

Для преодоления ограничений NameNode в больших кластерах применяется федерация HDFS (HDFS Federation), введённая в Hadoop 2.x. При федерации создаётся несколько независимых NameNode, каждый из которых управляет своим пространством имён (namespace) и набором блоков. DataNode при этом являются общими для всех NameNode.

Применение

Использование в экосистеме Hadoop

NameNode является неотъемлемой частью HDFS, которая, в свою очередь, используется в качестве основного хранилища для:

Примеры реальных кластеров

Критика

Узкие места

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

Для преодоления ограничений NameNode были разработаны альтернативные распределённые файловые системы:

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

Источники

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

На главную BFOmetr →