一、存储机制1、基础描述NameNode运行时元数据需要存放在内存中,同时在磁盘中备份元数据的fsImage,当元数据有更新或者添加元数据时,修改内存中的元数据会把操作记录追加到edits日志文件中,这里不包括查询操作 。如果NameNode节点发生故障,可以通过FsImage和Edits的合并,重新把元数据加载到内存中,此时SecondaryNameNode专门用于fsImage和edits的合并 。
2、工作流程
文章插图
NameNode机制
- NameNode格式化启动之后,首次会创建Fsimage和Edits文件;
- 非首次启动直接加载FsImage镜像文件和Edits日志到内存中;
- 客户端对元数据执行增删改操作会记录到Edits文件;
- 然后请求的相关操作会修改内存中的元数据;
- 询问NameNode是否需要CheckPoint,NameNode返回信息;
- 如果需要SecondaryNameNode请求执行CheckPoint;
- NameNode切割现有日志文件,新记录滚动写入新Edits文件;
- 滚动前的编辑日志和镜像文件拷贝到SecondaryNameNode;
- SecondaryNameNode加载Edits日志和FsImage镜像文件到内存合并;
- 生成新的镜像文件fsimage.chkpoint后拷贝到NameNode;
- NameNode将fsimage.chkpoint重新命名成fsimage;
<property><name>dfs.namenode.checkpoint.period</name><value>3600</value></property><property><name>dfs.namenode.checkpoint.txns</name><value>1000000</value><description>文件满1000000记录数</description></property><property><name>dfs.namenode.checkpoint.check.period</name><value>60</value><description> 1分钟检查一次文件记录数</description></property >
二、文件信息1、FsImage文件NameNode内存中元数据序列化备份信息;生成路径:基于NameNode节点
cd /opt/hadoop2.7/data/tmp/dfs/name/current/
文章插图
查看文件
# 基本语法hdfs oiv -p 转换文件类型 -i 镜像文件 -o 转换后文件输出路径
基于语法格式,操作上图中的文件:# 转换文件hdfs oiv -p XML -i fsimage_0000000000000000019 -o /data/fsimage.xml# 查看cat /data/fsimage.xml
这样就可以看到一些元数据的信息 。2、Edits文件存放HDFS文件的所有增删改操作的路径,会记录在Edits文件中 。
基本语法
hdfs oev -p 转换文件类型 -i 日志文件 -o 转换后文件输出路径
查看文件# 转换文件hdfs oev -p XML -i edits_0000000000000000020-0000000000000000020 -o /data/edits.xml# 查看cat /data/edits.xml
三、故障恢复1、拷贝SecondaryNameNode数据首先结束NameNode进程;删除NameNode存储的数据;
[root@hop01 /] rm -rf /opt/hadoop2.7/data/tmp/dfs/name/*
拷贝SecondaryNameNode中数据到NameNode数据存储目录下;# 注意SecondaryNameNode服务配置在hop03上[root@hop01 /] scp -r root@hop03:/opt/hadoop2.7/data/tmp/dfs/namesecondary/* /opt/hadoop2.7/data/tmp/dfs/name/
重新启动NameNode进程;2、基于Checkpoint机制修改hdfs-site.xml配置,同步到集群相关服务下,重启HDFS进程;
<property><name>dfs.namenode.checkpoint.period</name><value>120</value></property><property><name>dfs.namenode.name.dir</name><value>/opt/hadoop2.7/data/tmp/dfs/name</value></property>
结束NameNode进程;删除NameNode存储的数据;
[root@hop01 /] rm -rf /opt/hadoop2.7/data/tmp/dfs/name/*
由于集群中SecondaryNameNode(在hop03)不和NameNode(在hop01)在一个主机节点上,需要将SecondaryNameNode存储数据的目录拷贝到NameNode存储数据的平级目录,并删除in_use.lock文件;【Hadoop框架:NameNode工作机制详解】
[root@hop01 /]scp -r root@hop03:/opt/hadoop2.7/data/tmp/dfs/namesecondary /opt/hadoop2.7/data/tmp/dfs/[root@hop01 namesecondary/] rm -rf in_use.lock[root@hop01 dfs]$ lsdatanamenamesecondary
导入检查点数据[root@hop01 hadoop2.7] bin/hdfs namenode -importCheckpoint
重新启动NameNode[root@hop01 hadoop2.7] sbin/hadoop-daemon.sh start namenode
四、多个目录配置NameNode可以配置多本地目录,每个目录存放内容相同,增加运行的可靠性;1、添加配置
推荐阅读
- 我们为什么选择Vuetify作为前端框架
- 面向AI应用分布式执行框架
- 全新架构的 Hmily 分布式事务框架 2.1.1发布
- Django 入门介绍
- Android Hawk框架使用介绍
- 超详细ffmpeg.c框架分析
- 从RPC到服务化框架
- EAdmin开箱即用的后台UI框架
- 程序员如何面对不断更新的框架?学了记不住怎么办?
- 基于.NET Core+Bootstrap的快速后台开发框架