NameNode文件结构
最新格式化的NameNode会创建以下的目录结构:
${dfs.name.dir}/current/VERSION
/edits
/fsimage
/fstime
dfs.name.dir属性是一个目录列表,是每个目录的镜像。VERSION文件是Java属性文件,其中包含运行HDFS的版本信息。
一个典型VERSION文件所包含的内容:
#web Mar 23 16:03:27 CST 2011
namespaceID=1064465394
cTime=0
storageType=NAME_NODE
layoutVersion=-18
namespaceID是文件系统的唯一标识符,当文件系统第一次格式化时便会被创建,这个标识也要求各DataNode节点和NameNode保持一致。NameNode会使用它识别新的DataNode,DataNode只有在想NameNode注册后才会获得此namespaceID。cTime属性标记了NameNode存储空间创建的时间。对于新格式化的存储空间,这里的属性值虽为0,但是只要文件系统被更新,它就会更新到一个新的时间戳上。storageType指出此存储目录包含一个NameNode的数据结构,在DataNode中它的属性值为DATA_NODE。
layoutVersion是一个负的整数,定义了HDFS持久数据结构的版本。每次HDFS的布局发生改变,该版本号就会递减,在这种情况下,HDFS就需要更新升级了,因为一个新的NameNode或DataNode如果还处在旧版本上,系统就无法正常运行,各节点的版本号需要一致。
在NameNode的存储目录中包含edits、fsimage、fstime三个文件。他们都是二进制文件,可以通过HadoopWritable对象进行序列化。
编辑日志(dedit log)及文件系统映像(filesystem image)