1. Введение в HDFS
Распределенное хранилище файлов
Поскольку объем данных продолжает увеличиваться, размер файла зависит от верхнего предела хранилища на одной машине, что, очевидно, не может удовлетворить наши потребности. HDFS делит большие файлы на части и развертывает их на разных машинных узлах для создания распределенного хранилища.
В распределенной системе компьютерные узлы размещаются на стойках, каждая стойка имеет множество узлов, разные стойки сообщаются через коммутаторы, а разные узлы в одной стойке связаны между собой через сеть.
Удаленный вызов: Удаленный вызов процедур (RPC) — это широко используемый протокол распределенной сетевой связи, который позволяет выполнять Программа на одном компьютере вызывает подпрограмму на другом компьютере, скрывая при этом подробности сетевого общения, чтобы пользователю не приходилось дополнительно программировать для этого взаимодействия. Связь между распределенными системами в основном осуществляется через RPC.
2. Структура HDFS
- Узел имени (NameNode) Главный узел (Master)
- DataNode (DataNode) Ведомый (Slave)
Узел имени отвечает за создание, удаление и переименование файлов и каталогов, а также управляет отношением отображения между узлами данных и блоками файлов; узлы данных отвечают за хранение и чтение данных.
Когда клиент читает данные, он сначала обращается к узлу имени, получает расположение блока данных, соответствующего узлу данных, а затем считывает данные.При записи данных узел имени также выделяет место хранения, а затем записывает данные к соответствующему узлу данных.
1. Имя узла
Две основные структуры данных для namenodes:
-
FsImage
FsImage используется для поддержки дерева файловой системы и метаданных всех файлов и папок в дереве файлов.
Информация метаданных включает уровень копии файла, время модификации и доступа, права доступа, размер блока и блоки, из которых состоит файл.
Примечание. Файл FsImage не записывает, в каком узле хранится блок, а информация о блоке данных и сопоставлении узлов хранится в памяти NameNode. -
EditLog
Регистрирует все операции по созданию, удалению, переименованию и т. д. файлов.
SecondaryNameNode
-
SecondDaryNameNode будет периодически взаимодействовать с NameNode, приостанавливать EditLog, создавать новый EditNew и мгновенно завершать его.
-
FsImage и EditLog будут продолжать расти, и secondDaryNameNode может решить эту проблему.Он будет периодически извлекать эти два файла и выполнять процесс слияния.Выполняя файл EditLog, будет получен последний FsImage и помещен в NameNode для замены исходного FsImage. Используйте editNew вместо исходного файла EditLog.
-
secondDaryNameNode также можно использовать в качестве холодного резервного копирования, которое можно использовать для восстановления после того, как NameNode выйдет из строя.
2. Узлы данных
HDFS хранится в блоках. Размер каждого блока по умолчанию составляет 128 МБ, что намного больше, чем в обычных файловых системах. Целью этого является минимизация накладных расходов на адресацию.
2.1 Принцип хранения файловой системы
Файлы хранятся на дисках, а диски полагаются на механическое движение для чтения данных.
- Когда данные должны быть прочитаны с диска, система будет передавать логический адрес данных на диск, а схема управления диском переводит логический адрес в физический адрес в соответствии с логикой адресации, то есть для определения в какой дорожке и секторе находятся считываемые данные. Для считывания данных этого сектора магнитную головку нужно расположить над этим сектором,
- Для этого необходимо переместить головку, чтобы выровнять ее с соответствующей дорожкой.Этот процесс называется поиском, а время, которое он занимает, называется временем поиска.Затем диск вращается, чтобы повернуть целевой сектор под головкой.Время затраченное на этот процесс, называется временем вращения.
- Последним является передача считанных данных.
Таким образом, время, затрачиваемое на чтение данных каждый раз, можно разделить наВремя поиска, задержка вращения, время прохождениятри части
Время чтения файлов HDFS можно разделить на время адресации и время передачи данных.Если файл слишком мал, список сопоставления в узле имени будет слишком большим, что повлияет на время адресации.Если время адресации больше чем время передачи, это будет бессмысленно. Поэтому установите его в большой файл.
Если параметр Блокировать слишком велик, в задаче MapReduce количество задач Map или Reduce меньше, чем количество компьютеров кластера, что сделает выполнение задания неэффективным.
2.2 Избыточность данных
HDFS использует несколько копий для избыточности данных. Блок данных по умолчанию является избыточным с тремя копиями. Одна копия размещается на разных стойках, а две другие копии размещаются на разных узлах в той же стойке.
Как показано на рисунке, блок данных 1 хранится в узлах данных A и C соответственно, а блок данных 2 хранится в узлах данных A и B.
2.3 Ошибки данных
Передача по сети или чтение и запись на диск могут вызвать ошибки данных.
Решение:
- Когда файл создается, клиент извлекает файл и записывает данные в скрытый файл по тому же пути.
- После того, как клиент прочитает данные, он проверит блок данных, как правило, с использованием алгоритма md5 или sha1.Если есть ошибка, он запросит блок данных других узлов и сообщит об этом узлу имени.Узел имени будет регулярно проверьте и повторно скопируйте блок.
3. Процесс чтения и записи HDFS
написать:
- Отправьте операцию записи в NameNode, чтобы определить, есть ли у него разрешение. NameNode назначает ему узлы данных и возвращает информацию.
- Для взаимодействия данных данные разбиваются на блоки, сначала записывается первая копия, копируется на второй узел, а затем на третий узел, образуя «конвейерную репликацию».
- Чтобы гарантировать точность данных узла, узел данных, который получает данные, должен вернуть информацию подтверждения ACK отправителю, и пакет подтверждения будет проходить вверх по конвейеру и достигать клиента через каждый узел.
читать:
HDFS предоставляет API для определения идентификатора стойки, к которой принадлежит узел данных.Клиенты также могут вызывать API для получения идентификатора стойки, к которой они принадлежат.
-
Клиент запрашивает NameNode, вычисляет ближайшую к клиенту копию и возвращает информацию о метаданных;
Когда клиент считывает данные, он получает список мест хранения различных копий блока данных из узла имени. Список содержит узлы данных, в которых расположены копии. Вы можете вызвать API, чтобы определить идентификаторы стоек, к которым клиент и эти узлы данных принадлежат Когда идентификатор стойки, соответствующий копии блока данных, совпадает с идентификатором стойки, соответствующим клиенту, копия предпочтительно выбирается для чтения данных, а если не найдена, копия выбирается случайным образом читать данные -
Клиент считывает соответствующую информацию блока данных.
Эта статья относится к курсу больших данных преподавателя Линь Зию из Сямэньского университета.