Подробный анализ HDFS для записи Hadoop (2)

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

Оригинальный адрес:Пенто.Специализация/2018/09/10/…

HadoopЭкология — огромная и полностью функциональная экология, но она по-прежнему вращается вокругHadoopЕго основные компоненты состоят из четырех частей, а именно:Common,HDFS,MapReduceа такжеYARN.

  1. CommonдаHadoopОбщие компоненты архитектуры;
  2. HDFSдаHadoopраспределенная система хранения файлов;
  3. MapReduceдаHadoopПредоставляет модель программирования, которую можно использовать для параллельных операций с крупномасштабными наборами данных;
  4. YARNдаHadoopПосле обновления архитектуры в настоящее время широко используется диспетчер ресурсов.

Небольшая цель — написать сообщение в блоге с полным решением для каждого основного компонента.Давайте сначала внимательно рассмотрим эту статью.HDFS.

1. Введение

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

В настоящее время,HDFSв видеApache Hadoop, URL-адрес:hadoop.apache.org/

2. Преимущества HDFS

2.1 Предотвращение аппаратных сбоев

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

2.2 Доступ к потоковым данным

HDFSРазработанный для пакетной обработки, а не интерактивного использования пользователями, он ориентирован на высокую пропускную способность доступа к данным без стремления к низкой задержке доступа к данным.

2.3 Работа с большими наборами данных

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

2.4 Простая непротиворечивая модель

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

2.5 Мобильные вычисления заменяют мобильные данные

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

2.6 Переносимость между разнородными аппаратными и программными платформами

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

3. NameNode и DataNodes

NameNodeиDataNodeдаHDFSВажные точки знания системы.HDFSдаmaster/slaveАрхитектура. ОдинHDFSКластер состоит из одногоNameNodeи многочисленныеDataNodeкомпозиция, файл разбивается на один или несколько блоков, эти блоки хранятся в группеDataNodeсередина.

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

есть одинNameNodeВ значительной степени упрощает системную архитектуру.NameNodeэто всеHDFSРешатель метаданных и репозиторий. Этот дизайн системы таков, что пользовательские данные никогда не проходят черезNameNode, понятноNameNodeкак центр всей системы.

Архитектура выглядит следующим образом:

image

Первый на картинкеrackВ переводе «стойка» его можно понимать как два кластера в разных местах, и каждый кластер имеет свой способ соединения. во-вторых вDataNodeВ нем хранится не файл, а файловый блок (Блок), вHDFS, каждый большой файл разбивается на несколькоBlock, затем поместите этиBlockраспределены по разнымDataNode, и каждыйBlockБудет несколько копий, а также они будут храниться в другихDataNodeсередина.

Можно видеть, что приведенный выше рисунок объясняет две операции «чтения» и «записи» соответственно:

  1. Когда клиент хочетHDFSПри записи файла файл разбивается на рисункеBlockзаписано на обе стойкиDataNodeВ общем, это два физических хоста в двух стойках, видно, что данные файла не проходят.NameNode. Процесс записи данных см. в разделе ("7. Конвейер репликации данных").
  2. Когда клиент хочетHDFSПри чтении файла команда операции передаетсяNameNode,ПотомNameNodeПреобразование в операцию соответствующего блока данных, команда соответствующегоDataNodeВозвращает требуемые данные клиенту.

Существует также не показанная диаграмма узлов, называемаяSecondary Namenode, является вспомогательной фоновой программой, в основном отвечающей заNameNodeобщайтесь, сохраняйте регулярноHDFSСнимки и резервные копии метаданных и др.NameNodeсодержание, каждый деньStandby,когдаNameNodeЗамена в случае отказаNameNodeиспользовать.

NameNode

NameNodeЯвляется главным сервером, который управляет пространством имен файловой системы, управляет клиентским доступом к файлам и выполняет операции с пространством имен файловой системы, такие как открытие, закрытие и переименование файлов и каталогов. Это также определилоBlockприбытьDataNodeотображение.

NameNodeпринимает все решения о репликации блоков, которые периодически реплицируютсяDataNodeперениматьHeartbeatиBlockreport. ПолучатьHeartbeatзначитDataNodeНормальная операция,BlockreportВключаютDataNodeСписок всех блоков.

DataNode

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

4. Пространство имен файловой системы HDFS и метаданные

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

Копия блока данных называется коэффициенту копирования блока данных.

метаданные файловой системы (MetaData) также хранятся вNameNodeсередина,NameNodeиспользовать имяEditLogЖурнал транзакций для постоянной записи всех изменений, происходящих в метаданных файловой системы. Например, вHDFSСоздание нового файла приведет кNameNodeВставить записьEditLog, чтобы указать на это.NameNodeиспользовать файлы в своей локальной файловой системе хост-ОС для храненияEditLog.

Принимая во внимание, что все пространство имен файловой системы (включая сопоставления блоков и файлов и атрибутов файловой системы) хранится в файлах с именамиFsImageв файле.FsImageТакже хранится в виде файла вNameNodeв локальной файловой системе.

Сохранение метаданных

NameNodeСохраняет все пространство имен файловой системы и отображение блоков файла во всей памяти. когдаNameNodeПри запуске или когда контрольная точка запускается настраиваемым порогом, она считывает данные с диска.FsImageиEditLogИ сначалаFsImageзагрузить метаданные файловой системы изEditLogВсе транзакции применяются к in-memoryFsImage, и, наконец, синхронизируйте эту новую версию с дискомFsImage. Затем он может обрезать старыйEditLog, потому что его транзакция была применена к сохранениюFsImage. Этот процесс называется контрольной точкой.

Цель контрольной точки — сделать снимок метаданных файловой системы и сохранить его вFsImageдля обеспеченияHDFSСогласованное представление с метаданными файловой системы. Хотя читал прямо из памятиFsImageочень эффективно, но прямоFsImageИнкрементальное редактирование неэффективно. Мы не изменяем каждый редакторFsImage, но вEditlogПравки сохраняются в файле .

Во время КПП,Editlogизменения будут применены кFsImage. Это может быть за считанные секунды временных интервалов (DFS.NEMENODE.CHECKPOINT.PERIOD) TRIGER CHECK POINT или заданное количество кумулятивных операций файловой системы после триггера контрольно-пропускных пунктов (dfs.nameenode.Checkpoint.txns). Если оба эти два свойства, которые встречаются после порога, могут вызвать контрольную точку.

5. Репликация данных

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

Файлы в HDFS предназначены для однократной записи, и в любой момент времени может быть только один записывающий файл.

image

Объяснение: Как показано на рисунке,part-0Фактор репликации файлаr:2Блок данных разделения{1,3}, поэтому блок данных 1 находится в 1-м, 3-мDataNodeВкл, 3-й блок данных находится в 5-м, 6-мDataNodeначальство;part-1Документация объясняет то же самое. И эта информация хранится вNameNodeсередина.

Стратегия хранения реплик HDFS

Я лишь кратко представил информацию на картинке, собственноHDFSСтратегия размещения реплик — тема, достойная изучения, так как она действительно связана сHDFSНадежность и производительность, а также оптимизированная стратегия размещения реплик также делаютHDFSОн имеет преимущества перед другими распределенными файловыми системами.

В большинстве практических случаев, когда коэффициент репликацииr = 3час,HDFSСтратегия размещения заключается в размещении реплики в операции записи.DataNode, вторая реплика размещается на узле в другой удаленной стойке, а затем последняя реплика размещается на другом физическом узле в той же удаленной стойке.

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

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

Верхний предел, как правило, (количество копий - 1) / стойка + 2

так какNameNodeне допускаетсяDataNodeимеет несколько копий одного и того же блока, поэтому максимальное количество копий, которое может быть создано в это времяDataNodeВсего.

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

Шестой, протокол связи

всеHDFSКоммуникационные протоколы разделены на уровниTCP/IPна договоре.

Семь, конвейер репликации данных

Когда клиент записывает данные с коэффициентом репликацииr = 3изHDFSфайл,NameNodeиспользоватьreplication target choosing algorithmзабратьDataNodeсписок. Этот список содержит реплики, на которых будет размещен блок.DataNode.

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

видимый,DataNodeзаключается в получении данных от предыдущего в конвейере, при пересылке данных к следующему в конвейере данные принимаются изDataNodeконвейер к следующемуDataNode.

Восемь, действующий

Приложениями можно манипулировать различными способамиHDFSна файл, который проходитFS Shellможно манипулировать какLinuxФайловая система является общей, и часто используемые команды:

Action Command
Создать папку foodir bin/hadoop fs -mkdir /foodir
удалить папку bin/hadoop fs -rm -R /foodir
Просмотр содержимого файла bin/hdfs dfs -cat /foodir/myfile.txt
загрузить файлы bin/hdfs dfs -copyFromLocal ~/a.txt /foodir/
... ...

Вы обнаружите, что здесь есть два префикса команд, один из нихhadoop fs,одинhdfs dfs

Разница в следующем:hadoop fsЕе можно использовать и в других файловых системах, а не только в файловой системе hdfs, а это значит, что у команды более широкий спектр применения; иhdfs dfsHDFS специально для распределенной файловой системы.

Также есть префиксhadoop dfs, это устарело, не рекомендуется использовать 🙅.

9. Утилизация пространства

9.1 Удаление и восстановление файлов

Если конфигурация корзины включена, тоFS ShellУдаленные файлы не удаляются сразу изHDFSудалено вHDFSПереместите его в каталог корзины (/user/username/.Trash).

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

ПРИМЕЧАНИЕ. Когда пользователь удаляет файл,HDFSМежду соответствующим увеличением свободного места в файле .

Если конфигурация мусорной корзины включена и вы хотите полностью ее удалить, выполните следующую команду:hadoop fs -rm -r -skipTrash a.txt

9.2 Сокращение фактора репликации

Когда коэффициент репликации файла уменьшается,NameNodeВыберите избыточные копии, которые можно удалить. СледующийHeartbeatпередавать эту информацию вDataNode. Потом,DataNodeСоответствующий блок удаляется, и в кластере отображается соответствующее свободное место.

Ссылаться на

[1] Hadoop JavaDoc API

[2] Исходный код HDFS:Hadoop.Apache.org/version_con…

[3] Документация HDFS:Hadoop.Apache.org/docs/stable…