目录
namenode
Namenode是集群主从结构模型中的唯一的一个管理者,它负责
管理HDFS文件系统的命名空间(namespace):文件系统树及整棵树内的所有文件和目录的元数据,而这些信息以两种文件形式持久化地保存在本地磁盘中;
- 管理数据块位置信息:命名空间镜像文件(fsimage)
- 管理着客户端的读写操作:编辑日志文件(editlog)
同时namenode维护了块到datanode的映射,即每个文件各个块所在的数据节点信息,但这些信息保存在内存中,因为系统启动时会根据datanode信息重建映射信息
在一个搭建完hadoop分布式系统环境中,master机格式化namenode(hdfs namenode -format)之后,会在${hadoop.tmp.dir}中创建一个dfs目录,该目录下有一个子目录name
dfs
└── name
└── current
├── fsimage_0000000000000000000
├── fsimage_0000000000000000000.md5
├── seen_txid
└── VERSION
此时seen_txid的值为0,指的是第一个事务id
VERSION文件是一个Java属性文件,其中包含了正在运行的HDFS的版本信息:
namespaceID=993725495
clusterID=CID-22525aba-a03e-4ad4-9440-71f76baf37f6
cTime=0
storageType=NAME_NODE
blockpoolID=BP-163740078-192.168.80.120-1554104956001
layoutVersion=-63
- namespaceID:文件系统命名空间的唯一标识符,是在namenode首次格式化时创建的
- clusterID:将HDFS集群作为一个整体赋予的唯一标识符
- cTime:标记了namenode存储系统的创建时间,对于刚格式化的存储系统此属性为0,文件系统升级后会更新到新的时间戳
- storageType:说明了该存储目录包含的数据结构
- blockpoolID:数据块池的唯一标识符,数据块池中包含了由一个namenode管理的命名空间中的所有文件
- layoutVersion:描述HDFS持久性数据结构(布局)的版本,此版本号与Hadoop发布包的版本号无关;只要布局发生变化,版本号就会递减,此时HDFS也需要升级,因为磁盘仍然使用旧版本的布局会导致新版本的namenode,datanode无法正常工作。
此时只有镜像文件而无编辑日志文件,可以通过以下命令下载fsimage文件转化为xml格式到本地并查看:
[jinge@master1 current]$ hdfs oiv -i fsimage_0000000000000000000 -o fi0.xml -p XML
选项解析:
-i,--inputFile <arg>:要处理的镜像文件
-o,--outputFile <arg>:输出文件的名称;如果指定的文件存在,它将被覆盖
-p,--processor <arg>:选择要应用于镜像文件的处理器类型 (XML|FileDistribution|Web|Delimited)oiv中的i指定了image文件,如果下载编辑日志文件使用oev
fsimage保存了最新的元数据检查点,包含了整个HDFS文件系统的所有目录和文件的信息。对于文件来说包括了数据块描述信息、修改时间、访问时间等;对于目录来说包括修改时间、访问权限控制信息(目录所属用户,所在组)等
fsimage_0000000000000000000:
<fsimage>
<NameSection>
<!-- 默认的开启编号-->
<genstampV1>1000</genstampV1>
<!-- 最后一个块的编号-->
<genstampV2>1000</genstampV2>
<genstampV1Limit>0</genstampV1Limit>
<!-- 最后一个分配的块的块id-->
<lastAllocatedBlockId>1073741824</lastAllocatedBlockId>
<!-- 开始的事务id号-->
<txid>0</txid>
</NameSection>
<INodeSection>
<!-- 最后一个文件(目录)的inode号-->
<lastInodeId>16385</lastInodeId>
<!--当前文件系统中只有根目录,以下为根目录的相关信息-->
<inode>
<id>16385</id>
<type>DIRECTORY</type>
<name></name>
<mtime>0</mtime>
<permission>jinge:supergroup:rwxr-xr-x</permission>
<nsquota>9223372036854775807</nsquota>
<dsquota>-1</dsquota>
</inode>
</INodeSection>
<INodeReferenceSection></INodeReferenceSection>
<SnapshotSection>
<snapshotCounter>0</snapshotCounter>
</SnapshotSection>
<INodeDirectorySection></INodeDirectorySection>
<FileUnderConstructionSection></FileUnderConstructionSection>
<SnapshotDiffSection>
<diff>
<inodeid>16385</inodeid>
</diff>
</SnapshotDiffSection>
<SecretManagerSection>
<currentId>0</currentId>
<tokenSequenceNumber>0</tokenSequenceNumber>
</SecretManagerSection>
<CacheManagerSection>
<nextDirectiveId>1</nextDirectiveId>
</CacheManagerSection>
</fsimage>