NameNode和SecondaryNameNode
1、元数据几点:
(1)元数据必须放在内存中(保证快速检索);
(2)元数据必须持久化(保证数据的安全持久);
(3)将元数据信息保存在fsimage镜像文件中。
2、Fsimage文件
(1)保存元数据信息的文件;
(2)是NameNode中关于元数据的镜像,一般称为检查点;
(3)包含了NameNode管理下的所有DataNode中文件及文件block及block所在的DataNode的元数据信息。
3、Edits文件
edits编辑日志文件记录了客户端操作元数据的信息。
4、NameNode工作机制
(1)第一次启动NameNode格式化后,创建fsimage镜像文件和edits编辑日志文件。(如果不是第一次启动,则直接加载fsiamge镜像文件和edits日志文件到内存);
(2)客户端对元数据进行增删改的请求;
(3)NameNode记录操作日志,更新滚动日志;
(4)NameNode在内存中对数据进行增删改查操作。
5、secondaryNameNode工作机制
(1)secondaryNameNode询问NameNode是否需要checkpoint,直接带回NameNode是否checkpoint的结果;
(2)secondaryNameNode请求执行checkpoint;
(3)NameNode滚动正在写的edits日志(滚动后为edits_inprogress_002);
(4)将滚动前的edits日志文件(edits_001)和fsimage镜像文件拷贝到secondaryNameNode;
(5)secondaryNameNode加载edits日志文件(edits_001)和fsimage文件到内存,并合并;
(6)生成新的镜像文件fsimage.chkpoint;
(7)拷贝fsimage.chkpoint到NameNode;
(8)NameNode将fsimage.chkpoint重新命名成fsimage。
6、seondarynameNode辅助管理FSImage与Edits文件
(1)secondaryNameNode通知NameNode切换editslog;
(2)secondaryNameNode从NameNode中获得fsimage文件和edits文件(通过http get方式);
(3)secondaryNameNode将fsimage载入内存,再合并editslog文件,合并后生成新的fsimage文件;
(4)secondaryNameNode通过http post方式将新的fsimage拷贝给NameNode;
(5)NameNode用新的fsimage替换旧的fsimage,把edits.new替换成edits,同时更新fstime。
说明:完成合并的是secondaryNameNode,会请求NameNode停止使用edits,暂时将新写操作放入一个新的edits.new文件中。
7、namenode故障恢复
如果namenode的fsimage与edits文件损坏,那么我们可以将secondaryNamenode当中的fsimage与edits拷贝过去给namenode继续使用,只不过有可能会丢失一部分数据。
(1)杀死NameNode进程
- 先使用jps查看NameNode进程号;
- 采用kill -9 进程号 ----强制杀死进程
(2)删除NameNode的fsimage和edits文件
输入rm -rf命令,分别删除fsimage文件和edits文件
(3)拷贝secondaryNameNode的fsimage和edits文件到NameNode的fsimage和edits文件夹下去、
输入命令cp -r secondaryNameNode目录 NameNode目录
(4)启动NameNode
输入命令cd hadoop-2.6.0-cdh5.14.2/sbin/hadoop-daemon.sh start namenode
(5)浏览器页面正常访问