Secondary NameNode

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

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

Запуск процесса контрольной точки на Secondary NameNode управляется двумя параметрами конфигурации:

  • dfs.namenode.checkpoint.period – по умолчанию установлено значение на 1 час; определяет максимальную задержку между двумя последовательными контрольными точками;
  • dfs.namenode.checkpoint.txns – по умолчанию установлено значение на 1 миллион; определяет количество незарегистрированных транзакций на NameNode, которые будут вызывать следующую контрольную точку, даже если период ее не был достигнут.

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

Пример использования:

hdfs secondarynamenode [-checkpoint [force]] | [-format] | [-geteditsize]
  • -checkpoint [force] – контрольные точки SecondaryNameNode, если EditLog size> = fs.checkpoint.size. Если используется принудительно, контрольная точка не зависит от размера EditLog;
  • -format – форматирование локального хранилища во время запуска;
  • -geteditsize – вывод количества незарегистрированных транзакций на NameNode.