HADOOP NAMENODE FORMAT过程分析(2)

this.layoutVersion = FSConstants.LAYOUT_VERSION;
    this.namespaceID = newNamespaceID();
    this.cTime = 0L;
    this.checkpointTime = FSNamesystem.now();

//这个for循环,就是对之前提到的storageDirs列表的遍历,对每个StorageDirectory对象进行format操作
    for (Iterator<StorageDirectory> it = 
                           dirIterator(); it.hasNext();) {
      StorageDirectory sd = it.next();

//这个功能较简单,主要分两个步骤

//调用clearDirectory完全删除sd所在的目录,然后再创建空目录
     //调用saveCurrent创建sd目录下的current目录和fsimage目录及相关文件。具体的创建过程就不分析了,下面的部分就对name目录结构进行分析

format(sd);
    }

(5)saveCurrent(sd)过程分析

File curDir = sd.getCurrentDir(); //获取sd目录下的current目录
    NameNodeDirType dirType = (NameNodeDirType)sd.getStorageDirType(); //读取目录类型,前面说过,有三种
    // save new image or new edits
    if (!curDir.exists() && !curDir.mkdir())
      throw new IOException("Cannot create directory " + curDir);
    if (dirType.isOfType(NameNodeDirType.IMAGE))
//如果是image或imageandedit类型,创建fsimage文件,并写入根目录信息
      saveFSImage(getImageFile(sd, NameNodeFile.IMAGE));
    if (dirType.isOfType(NameNodeDirType.EDITS))
      editLog.createEditLogFile(getImageFile(sd, NameNodeFile.EDITS)); 
//如果是edit或imageandedit类型,创建edits文件,并写入版本信息
    // write version and time files
    sd.write();
//写入支持旧版本的fsimage目录内容、写入版本信息到VERSION文件中、写入当前系统时间到fstime目录中

(6)name目录结构分析

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/5fcceb93fb0e57a9cf063366026fb670.html