Как Namenode восстанавливает полную информацию о блоке после перезапуска?

Я пытаюсь понять Namenode и ссылаюсь на онлайн-материалы, а также на книгу Hadoop: полное руководство.

Я понимаю, что Namenode имеет такие понятия, как: «редактировать журналы», «fsimage», и я вижу следующие файлы в моем Namenode.

========================================================================

-rw-rw-r-- 1 vevaan24 vevaan24 1048576 Nov 23 22:53 edits_0000000000000000001-0000000000000000001
-rw-r--r-- 1 root     root     1048576 Nov 23 23:42 edits_0000000000000000002-0000000000000000002
-rw-rw-r-- 1 vevaan24 vevaan24 1048576 Nov 24 00:07 edits_0000000000000000003-0000000000000000003
-rw-rw-r-- 1 vevaan24 vevaan24 1048576 Nov 24 21:03 edits_0000000000000000004-0000000000000000004
-rw-rw-r-- 1 vevaan24 vevaan24 1048576 Nov 24 22:59 edits_0000000000000000005-0000000000000000005
-rw-r--r-- 1 root     root     1048576 Nov 24 23:00 edits_0000000000000000006-0000000000000000006
-rw-rw-r-- 1 vevaan24 vevaan24 1048576 Nov 25 21:15 edits_0000000000000000007-0000000000000000007
-rw-rw-r-- 1 vevaan24 vevaan24 1048576 Nov 25 21:34 edits_0000000000000000008-0000000000000000008
-rw-r--r-- 1 root     root     1048576 Nov 26 02:13 edits_inprogress_0000000000000000009
-rw-rw-r-- 1 vevaan24 vevaan24     355 Nov 25 21:15 fsimage_0000000000000000006
-rw-rw-r-- 1 vevaan24 vevaan24      62 Nov 25 21:15 fsimage_0000000000000000006.md5
-rw-r--r-- 1 root     root         355 Nov 26 00:12 fsimage_0000000000000000008
-rw-r--r-- 1 root     root          62 Nov 26 00:12 fsimage_0000000000000000008.md5
-rw-r--r-- 1 root     root           2 Nov 26 00:12 seen_txid
-rw-rw-r-- 1 vevaan24 vevaan24     201 Nov 26 00:12 VERSION

В этой книге упоминалось, что fsimage не хранит в себе расположение блоков.

У меня есть следующие вопросы:

1) edit logs также хранит расположение блоков? (для новых транзакций?)

2) Когда Namenode и Datanode перезапускаются, как Namenode получает адрес блока? Я сомневаюсь, что NN читает fsimage для восстановления информации о файловой системе, но fsimage не имеет информации о расположении блока, так как же восстанавливается эта информация?

3) Верно ли, что fsimage хранит только BLOCK ID, и если да, то является ли BLOCK ID уникальным для разных узлов данных? BLOCK ID совпадает с BLOCK address?


person CuriousMind    schedule 14.04.2017    source источник


Ответы (1)


Расположение блоков, т. е. узлы данных, на которых хранятся блоки, не сохраняются ни в файле fsimage, ни в файле edit log. Namenode сохраняет это сопоставление только в памяти.

Каждый узел данных несет ответственность за хранение информации о списке блоков, которые он хранит.

Во время перезапуска Namenode загружает файл fsimage в память и применяет изменения из edit log, недостающая информация о расположении блоков получается из узлов данных, когда они регистрируются в своих списках блоков. Namenode, используя информацию из списков блоков, строит отображение блоков с их расположением в своей памяти.

fsimage имеет больше, чем идентификатор блока. Он содержит такую ​​информацию, как блоки файла, размер блока, коэффициент репликации, время доступа, время модификации, права доступа к файлу, но не расположение блоков.

Да, идентификаторы блоков уникальны. Адрес блока будет относиться к адресу узлов данных, в которых находится блок.

person franklinsijo    schedule 14.04.2017
comment
Большое спасибо за вашу подробную информацию. Однако одного я до сих пор не могу понять. Datanode имеет данные в виде блоков, но как DN узнает, какому файлу принадлежит данный блок? Я согласен с тем, что DN предоставляет информацию о блоке для NN, но как это помогает в определении адреса блока для данного файла в DN. - person CuriousMind; 14.04.2017
comment
Блоки идентифицируются по их идентификаторам блоков, и они уникальны. Узлы данных хранят эту информацию в себе. - person franklinsijo; 14.04.2017
comment
Означает ли это, что DN отправит идентификатор блока в NN, и, поскольку fsimage имеет информацию об идентификаторе блока, он выполняет сопоставление на основе идентификатора блока. Если это правильно, то это имеет смысл. И для этой работы идентификатор блока должен быть уникальным для всего кластера hdfs. Это правильное понимание? - person CuriousMind; 14.04.2017
comment
да. Это то, что я объяснил в ответе. Для каждого пула блоков идентификаторы блоков уникальны. - person franklinsijo; 14.04.2017
comment
Большое спасибо, получил представление об этом. Спасибо тонна! - person CuriousMind; 14.04.2017