本文源码:GitHub·点这里 || GitEE·点这里
一、存储机制
1、根底形容
NameNode运行时元数据须要寄存在内存中,同时在磁盘中备份元数据的fsImage,当元数据有更新或者增加元数据时,批改内存中的元数据会把操作记录追加到edits日志文件中,这里不包含查问操作。如果NameNode节点产生故障,能够通过FsImage和Edits的合并,从新把元数据加载到内存中,此时SecondaryNameNode专门用于fsImage和edits的合并。
2、工作流程
NameNode机制
- NameNode格式化启动之后,首次会创立Fsimage和Edits文件;
- 非首次启动间接加载FsImage镜像文件和Edits日志到内存中;
- 客户端对元数据执行增删改操作会记录到Edits文件;
- 而后申请的相干操作会批改内存中的元数据;
SecondaryNameNode机制
- 询问NameNode是否须要CheckPoint,NameNode返回信息;
- 如果须要SecondaryNameNode申请执行CheckPoint;
- NameNode切割现有日志文件,新记录滚动写入新Edits文件;
- 滚动前的编辑日志和镜像文件拷贝到SecondaryNameNode;
- SecondaryNameNode加载Edits日志和FsImage镜像文件到内存合并;
- 生成新的镜像文件fsimage.chkpoint后拷贝到NameNode;
- NameNode将fsimage.chkpoint重新命名成fsimage;
3、CheckPoint设置
通过批改hdfs-default.xml文件的相干配置,设置一些SecondaryNameNode的机制,例如每隔一小时执行一次。
<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文件;
[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]$ lsdata name namesecondary
导入检查点数据
[root@hop01 hadoop2.7] bin/hdfs namenode -importCheckpoint
重新启动NameNode
[root@hop01 hadoop2.7] sbin/hadoop-daemon.sh start namenode
四、多个目录配置
NameNode能够配置多本地目录,每个目录寄存内容雷同,减少运行的可靠性;
1、增加配置
# vim /opt/hadoop2.7/etc/hadoop/hdfs-site.xml# 增加内容如下<property> <name>dfs.namenode.name.dir</name> <value>file:///${hadoop.tmp.dir}/dfs/name01,file:///${hadoop.tmp.dir}/dfs/name02</value></property>
该配置须要同步集群下所有服务;
2、删除原有数据
集群下所有服务都须要执行该操作;
[root@hop01 hadoop2.7]# rm -rf data/ logs/
格式化NameNode之后重启集群服务。
五、平安模式
1、根本形容
NameNode刚启动时,会基于镜像文件和编辑日志在内存中加载文件系统元数据的映像,而后开始监听DataNode申请,该过程期间处于一个只读的平安模式下,客户端无奈上传文件,在该平安模式下DataNode会发送最新的数据块列表信息到NameNode,如果满足最小正本条件,NameNode在指定工夫后就会退出平安模式。
2、平安模式
- 平安模式状态
/opt/hadoop2.7/bin/hdfs dfsadmin -safemode get
- 进入平安模式
/opt/hadoop2.7/bin/hdfs dfsadmin -safemode enter
- 退出平安模式
/opt/hadoop2.7/bin/hdfs dfsadmin -safemode leave
- 期待平安模式
/opt/hadoop2.7/bin/hdfs dfsadmin -safemode wait
六、源代码地址
GitHub·地址https://github.com/cicadasmile/big-data-parentGitEE·地址https://gitee.com/cicadasmile/big-data-parent
举荐浏览:编程体系整顿
序号 | 项目名称 | GitHub地址 | GitEE地址 | 举荐指数 |
---|---|---|---|---|
01 | Java形容设计模式,算法,数据结构 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |
02 | Java根底、并发、面向对象、Web开发 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆ |
03 | SpringCloud微服务根底组件案例详解 | GitHub·点这里 | GitEE·点这里 | ☆☆☆ |
04 | SpringCloud微服务架构实战综合案例 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |
05 | SpringBoot框架根底利用入门到进阶 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆ |
06 | SpringBoot框架整合开发罕用中间件 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |
07 | 数据管理、分布式、架构设计根底案例 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |
08 | 大数据系列、存储、组件、计算等框架 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |