Пожалуйста, объясните мне, что такое журнал изменений? Какова роль этого файла журнала?
Первоначально, когда сначала запускается NameNode, файл fsimage
сам будет пуст. Когда когда-либо NameNode получает запрос на создание/обновление/удаление, тогда этот запрос сначала записывается в файл edits
для обеспечения долговечности, как только он сохраняется в файле edits
, также выполняется обновление в памяти. Поскольку все запросы на чтение подаются из моментального снимка в памяти метаданных.
Его основная роль заключается в периодическом объединении образа пространства имен с журналом редактирования, чтобы журнал редактирования не становился слишком большим.
Итак, вы видите, что файл edits
продолжает расти без ограничений на этом этапе. Теперь, если NameNode перезагружен или по какой-то причине опустился и был восстановлен, он не имеет представления памяти в метаданных, поэтому он должен прочитать файл edits
и перестроить моментальный снимок в памяти, что может занять некоторое время на основе edits
размер файла.
Как edits
сам по себе является журналом WAL (запись вперед), все события должны записываться один за другим (добавьте только), в файле не может быть никаких обновлений, чтобы предотвратить случайные обращения к диску.
Чтобы предотвратить эту накладную (или сохранить файл edits
), был введен вторичныйNameNode.Единственная цель SNN - убедиться, что файл edits
не выходит за рамки. Таким образом, по умолчанию SNN запускает процесс, называемый checkpointing
, когда когда-либо edits
файл достигает 64 МБ или на каждый час (который когда-либо на первом месте).
процесс Checkpointing это сам просто, ПНЧ рассказывает Н.Н. к роли его текущему edits
журналу и создавать новые редактируют файлы, называемые edits.new
, ПНЧ затем копирует над fsimage и редактирует файл из NN и начинает применять события в правке файл в уже существующий файл fsimage (привезенный из NN), после завершения нового файла fsimage отправляется обратно в NN, а NN заменяет существующее fsimage новым, отправленным SNN, и переименовывает edits.new
в edits
. NN теперь имеет текущую версию fsimage
, которая имеет события, применяемые к файлу edits
.
Так, что если NameNode возобновляется после того, как чекпойнтинг был завершен, NameNode должен просто загрузить fsimage
память и применять только обновления Недавних из edits
журнала (который был заполнен после того, как контрольная точка была завершена), чтобы убедиться, он имеет обновленный вид пространства имен, которое более эффективно.