HDFS文件系统名称节点的格式化 hdfs格式化namenode_namenode格式化

HDFS集群有两类节点以管理节点-工作节点模式运行,即一个namenode(管理节点)和多个datanode(工作节点)。namenode管理文件系统的命名空间。它维护着文件系统树及整棵树内的所有文件和目录。这些信息以两个文件形式永久保存在本地磁盘上:命名空间镜像文件和编辑日志文件。

namenode的目录结构:

HDFS文件系统名称节点的格式化 hdfs格式化namenode_文件系统_02

fsimage开头的文件是命名空间镜像文件,edits开头的文件是编辑日志文件。

一、镜像文件和编辑日志

namenode启动时,首先将映像文件fsimage载入内存,并执行编辑日志edits中的各项编辑操作。

HDFS文件系统名称节点的格式化 hdfs格式化namenode_namenode格式化_03

1、编辑日志(edits_xxx)

存放HDFS文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作都会记录到edits文件中。

它在磁盘的体现是多个文件,每个文件被称为一个“段”,名称由前缀edits及后缀组成,后缀指出该文件所包含的事务id。任一时刻只有一个文件处于打开可写状态(表现为:edits_inprogress_xxx开头),每个事务完成之后,且在客户端发送成功代码之前,文件都需要更新和同步。当namenode向多个目录写数据时,只有在所有写操作都更新并同步到每个副本之后方可返回成功代码。

edits文件内容查看:

基本语法

hdfs oev -p 文件类型   -i 编辑日志  -o 转换后文件输出路径

E:\hadoop2.8.4>hdfs oev -p XML -i edits_0000000000000000030-0000000000000000042 -o E:\hadoop2.8.4\edits.xmlE:\hadoop2.8.4>

HDFS文件系统名称节点的格式化 hdfs格式化namenode_文件系统_04

查看输出的edits.xml文件内容:

HDFS文件系统名称节点的格式化 hdfs格式化namenode_namenode格式化_05

2、文件系统映像(fsimage_xxx)

HDFS文件系统元数据的一个永久性的检查点,其中包含HDFS文件系统的所有目录和文件序列化信息。

并非每一个写操作都会更新该文件,因为fsimage是一个大型文件,如果频繁的读写会使系统运行缓慢。但是这个特性不会降低系统的恢复能力,如果namenode发生故障,还是需要将最近的fsimage文件读入内存来重构元数据的最近状态,再从相关点开始向前执行编辑日志中记录的每个事务。

oiv命令查看fsimage文件

hdfs oiv -p  文件类型  -i 镜像文件   -o  转换后文件输出路径

HDFS文件系统名称节点的格式化 hdfs格式化namenode_文件系统_06

HDFS文件系统名称节点的格式化 hdfs格式化namenode_文件系统_07

二、SecondaryNamenode

编辑日志不会是无限的增长的,编辑日志和映像文件需要合并,而在同一namenode来执行合并操作会耗费大量内存和计算能力,所以一般合并操作会在另一台机器上(SecondaryNamenode),即辅助节点,使用辅助节点来创建检查点:

  1. SecondaryNameNode请求NameNode停止使用当前打开的edits文件(即edits_inprogress_000xxx文件),并重新打开一个新的编辑日志文件以记录新的操作。
  2. SecondaryNameNode从NameNode中获取最近的fsimage和edits文件,使用HTTP GET方式获取。
  3. SecondaryNameNode将fsimage载入内存,然后逐一执行edits文件中记录的操作,然后创建一个新的镜像文件。
  4. SecondaryNameNode将合并后的镜像文件发送到NameNode(HTTP PUT),NameNode将其保存为一个临时文件..chkpoint文件。
  5. NameNode重新命名该临时的镜像文件,此为最新的镜像文件。

辅助检查点的触发条件一般受两个配置参数控制。默认情况下,

  • 辅助namenode每隔一小时创建检查点(dfs.namenode.checkpoint.period(单位为秒))
  • 从上一检查点开始编辑日志的大小已经达到100万个事务
    (dfs.namenode.checkpoint.txns)
<property>  <name>dfs.namenode.checkpoint.periodname>      <value>3600value> #单位:秒  <description>The number of seconds between two periodic checkpoints.  description>property><property>  <name>dfs.namenode.checkpoint.txnsname>  <value>1000000value> # edits事务数量  <description>文件操作次数,事务数量description>property>

SecondaryNameNode情况可通过访问http://配置的SecondaryNameNode IP:50090查看。

SecondaryNameNode配置信息位于hdfs-site.xml

<property>  <name>dfs.namenode.secondary.http-addressname>  <value>tian:50090value>property>

如果namenode出现故障,可以先将namenode进程关掉,然后将SecondaryNameNode中的数据复制到namenode存储数据的目录中并启动namenode。

三、namenode多目录配置

namenode的本地目录可以配置成多个,每个目录中存放的内容相同,增加可靠性。

1、在hdfs-site.xml中增加配置:

dfs.namenode.name.dir  file:///${hadoop.tmp.dir}/dfs/name1,file:///${hadoop.tmp.dir}/dfs/name2

2、停止hadoop集群

3、格式化集群并启动

[root@wuxinyan bin]# hdfs namenode -format[root@wuxinyan sbin]# sh start-dfs.sh

4.查看结果

HDFS文件系统名称节点的格式化 hdfs格式化namenode_文件系统_08

HDFS文件系统名称节点的格式化 hdfs格式化namenode_文件系统_09

四、namenode工作流程图

HDFS文件系统名称节点的格式化 hdfs格式化namenode_文件系统_10

第一阶段:namenode 启动

(1)第一次启动namenode 格式化后,创建fsimage 和edits 文件。如果不是第一次启

动,直接加载编辑日志和镜像文件到内存。

(2)客户端对元数据进行增删改的请求。

(3)namenode 记录操作日志,更新滚动日志。

(4)namenode 在内存中对数据进行增删改查。

第二阶段:Secondary NameNode 工作

(1)Secondary NameNode 询问namenode 是否需要checkpoint。直接带回namenode 是

否检查结果。

(2)Secondary NameNode 请求执行checkpoint。

(3)namenode 滚动正在写的edits 日志。

(4)将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode。

(5)Secondary NameNode 加载编辑日志和镜像文件到内存,并合并。

(6)生成新的镜像文件fsimage.chkpoint。

(7)拷贝fsimage.chkpoint 到namenode。

(8)namenode 将fsimage.chkpoint 重新命名成fsimage。