public void format () throws IOException {
this. layoutVersion = FSConstants .LAYOUT_VERSION ;
this. namespaceID = newNamespaceID ();
this. cTime = 0L ;
this. checkpointTime = FSNamesystem .now ();
for (Iterator <StorageDirectory > it =
dirIterator (); it. hasNext() ;) {
StorageDirectory sd = it .next ();
format (sd );
}
}
对内存镜像写入元数据备份目录。FSImage的format方法会遍历所有的目录进行备份。如果是FSImage的文件目录,则调用saveFSImage保存FSImage,如果是Edits,则调用editLog.createEditLogFile,最后调用sd.write方法创建fstime和VERSION文件。VERSION文件通常最后写入。
void format(StorageDirectory sd ) throws IOException {
sd.clearDirectory (); // create currrent dir
sd.lock ();
try {
saveCurrent (sd );
} finally {
sd .unlock ();
}
LOG.info ("Storage directory " + sd. getRoot()
+ " has been successfully formatted.");
}
1、格式化时。
2、Hadoop启动时。
3、元数据更新操作时。
4、如果NameNode与Secondary NameNode、Backup Node或checkpoint Node配合使用时,会进行checkPoint操作。