一、NameNode&Secondary NameNode工作机制
- NameNode工作机制分为二个阶段
- 第一个阶段: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
- NameNode的第一第二阶段的操作流程图
二、chkpoint检查时间参数设置
- 默认的配置中SecondaryNameNode的chkpoint检查次数是每1个小时检查一次,或者当操作数达到100W次时检查一次;
- (1)hdfs-default.xml
// 每隔一小时执行一次 <property> <name>dfs.namenode.checkpoint.period</name> <value>3600</value> </property> // 一分钟检查一次操作次数,当操作次数达到1百万时,SecondaryNameNode执行一次。 <property> <name>dfs.namenode.checkpoint.txns</name> <value>1000000</value> <description>操作动作次数</description> </property> <property> <name>dfs.namenode.checkpoint.check.period</name> <value>60</value> <description> 1分钟检查一次操作次数</description> </property>
- (2)当我们需要修改chkpoint的次数时,之需要在hdfs-site.xml,修改以上参数即可
三、镜像文件和编辑日志文件
- 当我们第一次执行
hdfs namenode -format
(格式化namenode)后,在/home/hadoop/module/hadoop-2.4.0/data/tmp/dfs/name/current 目录下就会有如下文件edits_0000000000000000000 fsimage_0000000000000000000.md5 seen_txid VERSION
- Fsimage文件:HDFS文件系统元数据的一个永久性的检查点,其中包含HDFS文件系统的所有目录和文件idnode的序列化信息。
- Edits文件:存放HDFS文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作首先会被记录到edits文件中。
- seen_txid文件保存的是一个数字,就是最后一个edits_的数字
- 每次Namenode启动的时候都会将fsimage文件读入内存,并从00001开始到seen_txid中记录的数字依次执行每个edits里面的更新操作,保证内存中的元数据信息是最新的、同步的,可以看成Namenode启动的时候就将fsimage和edits文件进行了合并。
- oiv查看fsimage文件
- 基本语法:hdfs oiv -p 文件类型 -i镜像文件 -o 转换后文件输出路径
- 案例
- oev查看edits文件
- 基本语法:hdfs oev -p 文件类型 -i编辑日志 -o 转换后文件输出路径
- 案例:
四、滚动编辑日志
正常情况HDFS文件系统有更新操作时,就会滚动编辑日志。也可以用命令强制滚动编辑日志。
- 滚动编辑日志(前提必须启动集群):hdfs dfsadmin -rollEdits
- 镜像文件什么时候产生:Namenode启动时加载镜像文件和编辑日志
五、namenode版本号
六、SecondaryNameNode目录结构
- SecondaryNameNode的目录结构和NameNode的目录结构完全相同,在主namenode发生故障时(假设没有及时备份数据),可以从SecondaryNameNode恢复数据。
- 恢复数据的方法:
- 方法一:将SecondaryNameNode中数据拷贝到namenode存储数据的目录;
- 方法二:使用-importCheckpoint选项启动namenode守护进程,从而将SecondaryNameNode用作新的主namenode。
- hdfs namenode -importCheckpoint
七、集群安全模式操作
Namenode启动时,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作。一旦在内存中成功建立文件系统元数据的映像,则创建一个新的fsimage文件和一个空的编辑日志。此时,namenode开始监听datanode请求。但是此刻,namenode运行在安全模式,即namenode的文件系统对于客户端来说是只读的。
- hdfs dfsadmin -safemode get (功能描述:查看安全模式状态)
- hdfs dfsadmin -safemode enter (功能描述:进入安全模式状态)
- hdfs dfsadmin -safemode leave (功能描述:离开安全模式状态)
- hdfs dfsadmin -safemode wait (功能描述:等待安全模式状态)
八、Namenode多目录配置
namenode的本地目录可以配置成多个,且每个目录存放内容相同,增加了可靠性。 具体配置如下:
//hdfs-site.xml
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///${hadoop.tmp.dir}/dfs/name1,file:///${hadoop.tmp.dir}/dfs/name2</value>
</property>