NameNode和SecondaryNameNode

1、元数据几点:

(1)元数据必须放在内存中(保证快速检索);

(2)元数据必须持久化(保证数据的安全持久);

(3)将元数据信息保存在fsimage镜像文件中。

2、Fsimage文件

(1)保存元数据信息的文件;

(2)是NameNode中关于元数据的镜像,一般称为检查点;

(3)包含了NameNode管理下的所有DataNode中文件及文件block及block所在的DataNode的元数据信息。

3、Edits文件

edits编辑日志文件记录了客户端操作元数据的信息。

NameNode和SecondaryNameNode

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文件

NameNode和SecondaryNameNode

(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进程

  1. 先使用jps查看NameNode进程号;
  2. 采用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)浏览器页面正常访问

http://node01:50070/explorer.html#/