Архитектура HDFS

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

Все файлы и каталоги в HDFS представлены в виде индексных дескрипторов (inodes), содержащих различные атрибуты, такие как привилегии, время последнего изменения, ограничение на дисковое пространство, ограничение на пространство namespace (например, количество inodes) и время последнего доступа.

Компоненты

Функции HDFS обеспечивают следующие компоненты:

  • NameNode является центральной нодой управления системой. Она обслуживает пространство имен (namespace) в HDFS, хранящееся в ее оперативной памяти и содержащее полную информацию о каталогах и файлах. NameNode также управляет распределением блоков файлов среди DataNodes.

  • DataNodes — это большинство нод кластера, подчиняющихся NameNode и используемых для хранения данных и их обработки. Они исполняют запросы от клиентов на чтение и запись блоков данных.

  • Secondary NameNode — это вспомогательный сервер, который периодически создает полный образ текущего содержимого пространства имен, то есть его контрольные точки (checkpoint). Он делает это путем обработки журнала транзакций с его последующей очисткой. Вспомогательный сервер обеспечивает доступ к checkpoint для NameNode, чтобы последняя могла в любое время обновить содержимое namespace в своей оперативной памяти. В случае сбоя на NameNode ее можно запустить заново, используя последний checkpoint и журнал транзакций.

Архитектура

NameNode является основной нодой, ответственной за HDFS namespace и управление доступом клиентов к файлам. DataNodes управляют хранилищами данных.

architecture dark
Компоненты HDFS
architecture light
Компоненты HDFS

HDFS предоставляет пользователям пространство имен файловой системы и обеспечивает хранение данных в виде файлов. Каждый файл HDFS состоит из одного или нескольких блоков, распределенных среди DataNodes. NameNode выполняет операции с файлами в пределах пространства имен, включая их открытие и закрытие, а также переименование файлов и каталогов. NameNode также управляет расположением файловых блоков в DataNodes.

DataNodes выполняют запросы клиентов HDFS на чтение и запись блоков данных. Они также обрабатывают запросы от NameNode на создание, удаление и репликацию блоков.

HDFS поддерживает традиционную организацию файловой системы. Приложение или пользователь может создавать каталоги и затем сохранять в них файлы. Иерархия пространства имен аналогична многим другим файловым системам, то есть можно создавать, удалять, переименовывать или перемещать файлы.

NameNode сохраняет все изменения в пространстве имен или свойствах файлов. Приложение может потребовать создание определенного количества копий блоков файла в HDFS. Это количество называется фактором репликации (replication factor) данного файла.

Операции с файлами

В отличие от других файловых систем, HDFS не позволяет производить запись в файл. Файлы HDFS записываются только один раз, и только один процесс может производить эту запись в каждый момент времени. Поскольку HDFS используется для больших данных, эта файловая система ориентирована на файлы больших размеров (>10 ГБ). Файл состоит из блоков, размер которых больше, чем в обычных файловых системах.

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

ВАЖНО

Файлы, сжатые с использованием определенных кодеков (например, gzip, zlib), не разбиваются на блоки (non-splittable). Поэтому для их обработки всегда будет использован один Mapper. Если вы хотите, чтобы один файл обрабатывался параллельно несколькими Mapper — используйте splittable-форматы, например bzip2.

В Hadoop можно выполнять следующие операции с файлами:

  • запись

  • чтение

  • удаление

  • репликация

Процесс создания (записи) файла HDFS состоит из следующих шагов:

  1. Клиент разделяет исходные данные на части размером, равным размеру блока.

  2. Клиент подключается к NameNode и требует начать процедуру записи файла, указав фактор репликации для этого файла.

  3. NameNode возвращает список DataNodes, где следует разместить все реплики первого блока данных.

  4. Клиент посылает запрос на запись первого блока в первую ноду по списку. Если не удается установить соединение, клиент выбирает следующую ноду из списка и так далее.

  5. Первая нода записывает блок и передает его копию в следующую ноду по списку. Эта нода записывает блок и передает его копию следующей ноде и так далее.

  6. После завершения записи блока DataNodes посылают сообщение об успешном завершении операции по цепочке в обратном направлении к клиенту.

  7. После получения первого подтверждения об успешной записи клиент уведомляет NameNode о записи блока и получает список нод для записи второго блока и так далее.

Клиент переходит к записи следующего блока, если удается записать предыдущий блок хотя бы на одной ноде. Репликация блоков происходит в фоновом режиме по событийному (eventual) принципу путем рассылки блоков между нодами для создания требуемого количества реплик.

Репликация

HDFS обеспечивает надежный способ хранения больших объемов данных в распределенной среде. Система реплицирует блоки файлов для обеспечения отказоустойчивости на уровне блоков. Каждый блок имеет несколько копий в HDFS.

Принципы хранения

HDFS разделяет файлы на блоки и сохраняет каждый блок в трех DataNodes (по умолчанию фактор репликации равен 3). Например, для сохранения файла размером 128 МБ в HDFS вам потребуется пространство общим объемом 384 МБ (3 * 128 МБ), потому что единственный блок данного файла должен быть записан в виде трех копий на разных DataNodes.

Обратите внимание на то, что одна нода DataNode не может хранить более одной копии того же блока. Обычно HDFS сохраняет две копии в нодах, расположенных в одной стойке, и еще одну копию на ноде вне этой стойки. Рекомендуется задавать фактор репликации равным не менее трем, чтобы даже при выходе из строя целой стойки одна копия оставалась целой.

ПРИМЕЧАНИЕ
  • Топология (распределение по стойкам) настраивается вручную. Для получения дополнительной информации обратитесь к статье Rack awareness.

  • Можно задать фактор репликации для каждого файла HDFS отдельно.

Разделение файлов HDFS на блоки имеет следующие преимущества:

  • Очень большие файлы хорошо умещаются на дисках малого объема.

  • Остается меньше неиспользуемого пространства на диске, потому что любой диск может уместить большое количество блоков объемом 128 МБ.

  • Это оптимизирует передачу данных путем распределения этого процесса на множество нод. Например, если файл состоит из десяти блоков, хранящихся на десяти нодах, то при чтении клиентом этого файла нагрузка распределяется на все десять нод.

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

По умолчанию фактор репликации равен трем, а размер блока — 128 МБ. Когда клиент создает файл в HDFS, он сначала разделяет файл на части по 128 МБ и затем записывает их в блоки HDFS. Размер каждого блока, за исключением последнего, будет 128 МБ. Размер последнего блока может быть 128 МБ или меньше в зависимости от общего объема записываемых данных. Размер блока по умолчанию можно настраивать.

Рассмотрим пример записи 500 МБ данных в файл HDFS. Эти данные будут разделены на 3 блока по 128 МБ и четвертый блок размером 116 МБ, как представлено на следующей схеме.

replication dark
Распределение блоков HDFS
replication light
Распределение блоков HDFS

Все блоки распределяются между нодами в соответствии с фактором репликации. Каждая копия блока хранится в одной ноде, которая не может иметь еще одну копию того же блока.

Процесс чтения данных файла HDFS похож на получение данных через сеть torrent. Файл, содержащий некоторый фильм, разбивается на несколько частей, которые передаются из разных компьютеров параллельно. Это помогает значительно ускорить получение этого файла.

Можно задавать фактор репликации как для всей системы в целом (значение по умолчанию), так и для каждого файла или каталога отдельно. Для незначимых файлов можно этот фактор делать меньше, а для наиболее значимых файлов увеличивать.

Если какая-то DataNode становится недоступной или в ней происходит сбой, то NameNode требует от тех нод, которые хранят копии ставших недоступными блоков, начать репликацию этих блоков на другие ноды для обеспечения требуемых факторов репликации соответствующих файлов.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней