Я хочу кратко рассказать о namenodes и fsimage/edit_logs
, и о том, как работает namenode, в которых было oop кластеров,
. NameNode
хранит изменения в файловой системе в виде журнала, добавляемого к Файл родной файловой системы, редактирует.
Когда NameNode
запускается, он читает состояние HDFS из файла образа fsimage
, а затем применяет изменения из файла журнала изменений.
Затем записывает новое состояние HDFS в fsimage
и запускает нормальную работу с пустым файлом редактирования.
FsImage
- это файл, хранящийся в файловой системе ОС, который содержит полную структуру каталогов (пространство имен) HDFS с подробными сведениями о расположении данные о блоках данных и какие блоки хранятся на каком узле.
EditLogs
- это журнал транзакций, который регистрирует изменения в файловой системе HDFS или любое действие, выполняемое в кластере HDFS, например добавление нового block,
replication, delete et c., Записывает изменения с момента создания последнего FsImage
,
, затем объединяет изменения в файл FsImage
для создания новый FsImage
файл.
Когда мы запускаем namenode, последний FsImage
файл загружается в «in-memory» и в то же время,
EditLog
файл также загружается в память я Файл f FsImage
не содержит актуальной информации.
Namenode
сохраняет метаданные в памяти, чтобы максимально быстро обслуживать запросы нескольких клиентов.
Если этого не сделать, то для каждой операции namenode
должен считывать информацию метаданных с диска в оперативную память. Этот процесс потребляет больше времени на поиск диска для каждой операции.
, поэтому подведем итоги
Постоянство метаданных HDFS в целом состоит из двух категорий файлов:
fsimage
Содержит полное состояние файловой системы в определенный момент времени. Каждой модификации файловой системы присваивается уникальный монотонно увеличивающийся идентификатор транзакции. Файл fsimage представляет состояние файловой системы после всех модификаций вплоть до указанного c идентификатора транзакции.
файл редактирования
Содержит журнал, в котором перечислены все изменения файловой системы. (создание, удаление или изменение файла), которое было выполнено после самого последнего fsimage.
Checkpointing
- это процесс слияния содержимого самого последнего fsimage с все изменения, примененные после слияния fsimage, создают новый fsimage. Проверка точек запускается автоматически с помощью политик конфигурации или вручную с помощью команд администрирования HDFS.
До сих пор кратко о namenode
и журналах редактирования
Итак, давайте поговорим сейчас о нашем кластере (основанном на версии HDP 2.6.5
)
В папке /var/hadoop/hdfs/namenode/current
каждого namenode
у нас есть следующие файлы fsimage
fsimage_0000000000000031788 100% 104KB 104.1KB/s 00:00
fsimage_0000000000000031788.md5 100% 62 0.1KB/s 00:00
fsimage_0000000000000041641 100% 104KB 104.1KB/s 00:00
fsimage_0000000000000041641.md5 100% 62 0.1KB/s 00:00
, а также журналы редактирования,
.
.
.
-rw-r--r-- 1 hdfs hadoop 328138542 Jan 23 12:37 edits_0000000022056979997-0000000022059239786
-rw-r--r-- 1 hdfs hadoop 301415558 Jan 23 13:07 edits_0000000022059239787-0000000022061345588
-rw-r--r-- 1 hdfs hadoop 311747850 Jan 23 13:37 edits_0000000022061345589-0000000022063490851
-rw-r--r-- 1 hdfs hadoop 12 Jan 23 13:37 seen_txid
-rw-r--r-- 1 hdfs hadoop 330301440 Jan 24 07:10 edits_0000000022063490852-0000000022065448335
Теперь мы запускаем оба namenode
,
. В журналах namenode
мы видим, что namenode
воспроизводит каждый из журналов редактирования (например, если у нас есть 1965 edit_logs затем namenode
воспроизводит их всех по одному .....)
Пример:
2020-01-27 06:20:37,306 INFO namenode.FSEditLogLoader (FSEditLogLoader.java:loadEditRecords(266)) - replaying edit log: 2072759/2282427 transactions completed. (91%)
2020-01-27 06:20:38,307 INFO namenode.FSEditLogLoader (FSEditLogLoader.java:loadEditRecords(266)) - replaying edit log: 2214991/2282427 transactions completed. (97%)
Итак, namenode
полностью перешел в активное / ждущее состояние после воспроизведения всех 1965 edit_logs
, и это занимает почти 17 часов
Так что после перезапуска обоих namenodes
мы ожидаем получить fsimage
обновленных файлов
Например:
-rw-r--r-- 1 hdfs hadoop 445716 Jan 31 08:11 fsimage_0000000000000132222
-rw-r--r-- 1 hdfs hadoop 62 Jan 31 08:11 fsimage_0000000000000132222.md5
Но в нашем случае после перезапуска обоих namenode мы получаем этот пример (fsimage not update - время с 03 января)
-rw-r--r-- 1 hdfs hadoop 445716 Jan 03 07:11 fsimage_0000000000000132222
-rw-r--r-- 1 hdfs hadoop 62 Jan 03 07:11 fsimage_0000000000000132222.md5
Итак, мы видим, что fsimage
не было обновлением, несмотря на то, что namenode
полностью запущен (через 17 часов) и с состоянием active / режим ожидания
Есть предложения, почему fsimage
не обновляется с текущим временем?