Распределенная файловая система Hadoop

Первоначально созданная как инфраструктура для проекта веб-поисковика Apache Nutch, распределенная файловая система Hadoop (HDFS) теперь является отдельным подпроектом Apache Hadoop, который можно найти по адресу http://hadoop.apache.org/hdfs/. HDFS предназначена для работы на общедоступном оборудовании. Хотя существует много общего с существующими распределенными файловыми системами, различия между ними значительны.

HDFS обладает высокой отказоустойчивостью, предназначена для развертывания на недорогом оборудовании, а также обеспечивает высокоскоростной доступ к данным приложений. В этой статье вы увидите, как работает HDFS и ее основные функции. Нырнуть в!

Как работает HDFS

Когда вы настраиваете кластер Hadoop, Hadoop создает виртуальный слой поверх вашей локальной файловой системы (например, файловой системы на базе Windows или Linux). Как вы могли заметить, HDFS не сопоставляется с какой-либо физической файловой системой в операционной системе, но Hadoop предлагает абстракцию поверх вашей локальной файловой системы, чтобы обеспечить отказоустойчивую службу распределенной файловой системы с HDFS. Общий дизайн и схема доступа в HDFS аналогичны файловой системе на базе Linux. На следующей диаграмме показана высокоуровневая архитектура HDFS:

2.png

Каждый файл, отправляемый в HDFS, разбивается на несколько блоков, которые необходимо распределить. NameNode поддерживает реестр (или таблицу имен) всех узлов, присутствующих в данных в пути локальной файловой системы, указанном с помощью dfs.namenode.name.dir в hdfs-site.xml, тогда как вторичный NameNode реплицирует эту информацию через контрольные точки. У вас может быть много вторичных узлов имен. Обычно NameNode хранит информацию, относящуюся к структуре каталогов, разрешениям, отображению файлов для блокировки и так далее.

Эта файловая система сохраняется в двух форматах: FSimage и Editlogs. FSimage — это моментальный снимок метаданных файловой системы namenode в заданный момент, тогда как Editlogs записывают все изменения из последнего моментального снимка, хранящегося в FSimage. FSimage — это структура данных, оптимизированная для чтения, поэтому HDFS фиксирует изменения в пространстве имен в Editlogs для обеспечения надежности. Hadoop предоставляет автономную программу просмотра изображений для вывода данных FSimage в удобочитаемый формат.

Ключевые особенности HDFS

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

Достижение мультитенантности в HDFS

HDFS поддерживает мультитенантность через свои Linux-подобные списки контроля доступа (ACL) в своей файловой системе. Когда вы работаете с несколькими арендаторами, все сводится к управлению доступом для разных пользователей через интерфейс командной строки HDFS. Таким образом, администратор HDFS может добавлять пространства клиентов в HDFS через свое пространство имен (или каталог), например, hdfs://:/tenant/. Параметр пространства имен по умолчанию можно указать в файле hdfs-site.xml.

Важно отметить, что HDFS использует пользователей и группы локальной файловой системы для своих собственных и не управляет и не проверяет, существует ли созданная группа или нет. Как правило, для каждого арендатора может быть создана одна группа, и пользователи, входящие в эту группу, могут получить доступ ко всем артефактам этой группы. В качестве альтернативы, идентификация пользователя клиентского процесса может происходить через принципала Kerberos. Точно так же HDFS поддерживает подключение серверов LDAP к группам. С локальной файловой системой это можно сделать, выполнив следующие действия:

  1. Создайте группу для каждого арендатора и добавьте пользователей в эту группу в локальной FS.
  2. Создайте новое пространство имен для каждого арендатора, например, /tenant/
  3. Сделайте арендатора полным владельцем этого каталога с помощью команды chown
  4. Установить права доступа на tenant-id группы для арендатора
  5. Настройте квоту для каждого арендатора с помощью dfadmin -setSpaceQuota , чтобы контролировать размер файлов, создаваемых каждым арендатором.

> Примечание
HDFS не обеспечивает никакого контроля над созданием пользователей и групп или обработкой токенов пользователей. Управление идентификацией пользователей осуществляется извне сторонними системами.

Снимки HDFS

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

hrishikesh@base0:/$  ./bin/hdfs dfsadmin -allowSnapshot <path>

Как только это будет запущено, вы получите сообщение о том, что это удалось. Теперь вы можете создать снимок, поэтому выполните следующую команду:

hrishikesh@base0:/$  ./bin/hdfs dfs -createSnapshot <path> <snapshot-name>

Как только это будет сделано, вы получите путь к каталогу, в котором сделан этот снимок. Вы можете получить доступ к содержимому вашего снимка. На следующем снимке экрана показано, как работает общий снимок:

1.png

Вы можете получить доступ к полному списку операций, связанных со снимками, таких как переименование снимка и удаление снимка, здесь (https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsSnapshots.html).

Безопасный режим

Когда NameNode запускается, он ищет FSImage и загружает его в память. Затем он ищет журналы прошлых изменений и применяет их к FSImage, создавая новый FSImage. После завершения этого процесса NameNode запускает служебные запросы по HTTP и другим протоколам. Обычно DataNodes содержат информацию о расположении блоков; когда NameNode загружается, DataNodes предоставляют эту информацию NameNode. Это время, когда система работает в безопасном режиме. Выход из безопасного режима происходит, когда выполняется значение dfs.replication.min для каждого блока.

HDFS предоставляет команду для проверки, работает ли данная файловая система в безопасном режиме или нет:

hrishikesh@base0:/$  ./bin/hadoop dfsadmin -safemode get

Это должно предоставить вам информацию о том, включен ли безопасный режим. В таком случае файловая система предоставляет доступ только для чтения к своему репозиторию. Точно так же администратор может войти в безопасный режим с помощью следующей команды:

hrishikesh@base0:/$  ./bin/hadoop dfsadmin -safemode enter

Точно так же предоставляется возможность выхода из безопасного режима.

Горячая замена

HDFS позволяет пользователям выполнять горячую замену DataNode в режиме реального времени. Связанная проблема Hadoop JIRA указана здесь (https://issues.apache.org/jira/browse/HDFS-664). Обратите внимание, что горячая замена должна поддерживаться базовой аппаратной системой. Если это не поддерживается, возможно, вам придется перезапустить затронутый DataNode после замены его устройства хранения.

Однако перед тем, как Hadoop перейдет в режим репликации, вам потребуется предоставить новое исправленное хранилище томов DataNode. Новый том должен быть отформатирован, и после этого пользователь должен обновить dfs.datanode.data.dir в конфигурации. После этого пользователь должен выполнить реконфигурацию с помощью команды dfsadmin, как указано здесь:

hrishikesh@base0:/$ ./bin/hdfs dfsadmin -reconfig datanode HOST:PORT start

После завершения этого действия пользователь может извлечь проблемное хранилище данных из узла данных.

Федерация

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

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

Даже если NameNode для любого федеративного арендатора выходит из строя, оставшиеся NameNodes и DataNodes могут функционировать без каких-либо сбоев. Документ здесь (https://hadoop.apache.org/docs/r3.1.0/hadoop-project-dist/hadoop-hdfs/Federation.html) охватывает конфигурацию HDFS Federation.

Балансировщик внутри DataNode

Необходимость в балансировщике DataNode возникла по разным причинам. Во-первых, потому что при замене диска DataNodes необходимо повторно сбалансировать в зависимости от доступного места. Во-вторых, благодаря циклическому планированию по умолчанию, доступному в Hadoop, массовое удаление файлов из определенных узлов данных приводит к несбалансированному хранилищу узлов данных.

Это было поднято как проблема JIRA HDFS-1312 (https://issues.apache.org/jira/browse/HDFS-1312), и это было исправлено в Hadoop 3.0-alpha1. Новый балансировщик дисков поддерживает функции отчетности и балансировки. В следующей таблице описаны все доступные команды:

таблица.PNG

Сегодня система поддерживает циклическую балансировку дисков и свободное пространство, процентное соотношение которого основано на алгоритмах планирования распределения нагрузки.

Надеюсь, вам понравилось читать эту статью. Если вы хотите узнать больше об Apache Hadoop, вы можете проверить Краткое руководство по Apache Hadoop 3. Написанная Хришикешем Виджаем Карамбелкаром, новатором и архитектором предприятия с более чем 16-летним опытом, книга следует пошаговому подходу, объясняющему основные концепции на практике. Краткое руководство по Apache Hadoop 3 предназначен как для начинающих, так и для опытных специалистов по работе с большими данными, которые хотят изучить основы и освоить новейшие функции Hadoop 3.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *