1、元数据(Metadata):维护HDFS文件系统中文件和目录的信息,分为内存元数据和元数据文件两种。NameNode维护整个元数据。
HDFS实现时,没有采用定期导出元数据的方法,而是采用元数据镜像文件(FSImage)+日子文件(edits)的备份机制。
2、Block:文件内容而言。
寻路径流程:
路径信息 bocks[] triplets[]
Client ------------》INode---------------------》BlockInfo --------------------------》DataNode。
INode:文件的基本元素:文件和目录
BlockInfo: 文件内容对象
DatanodeDescriptor:具体存储对象。
3 、 FSImage和edits的checkPoint。FSImage有2个状态,分别是FsImage和FsImage.ckpt,后者表示正在checkpoint的过程中,上传后将会修改为FSImage文件,同理edits也有两个状态,edits和edits.new。
4、NameNode format情景分析:
遍历元数据存储目录,提示用户是否格式化?(NameNode.java里format函数)
private static boolean format( Configuration conf ,
boolean isConfirmationNeeded )
throws IOException {
Collection<URI > dirsToFormat = FSNamesystem. getNamespaceDirs(conf );
Collection<URI > editDirsToFormat =
FSNamesystem .getNamespaceEditsDirs (conf );
for( Iterator< URI> it = dirsToFormat.iterator (); it. hasNext() ;) {
File curDir = new File (it .next (). getPath()) ;
if (! curDir. exists())
continue;
if (isConfirmationNeeded ) {
System .err .print ("Re-format filesystem in " + curDir + " ? (Y or N) ");
if (! (System .in .read () == 'Y')) {
System .err .println ("Format aborted in " + curDir );
return true ;
}
while(System .in .read () != '\n') ; // discard the enter-key
}
}
FSNamesystem nsys = new FSNamesystem (new FSImage(dirsToFormat ,
editDirsToFormat ), conf) ;
nsys.dir.fsImage .format ();
return false;
}