NameNode和SecondaryNameNode
Posted wnwn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NameNode和SecondaryNameNode相关的知识,希望对你有一定的参考价值。
1.NN和2NN工作机制
第一阶段: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.chekpoint;
(7) 拷贝fsimage.chkpoint到NameNode;
(8) NameNode将fsimage.chkpoint重命名成fsimage;
Fsimage:NameNode内存中元数据序列化后形成的文件;
Edits:记录客户端更新元数据信息的每一步操作(可通过Edits运算元数据);
NameNode启动时,先滚动edits并生成一个空的edits.inprogress,然后加载edits和fsimage到内存中,此时NameNode内存就持有最新的元数据信息,client开始对NameNode发送元数据的增删改查的请求,这些请求的操作首先会被记录的edit.inprogress中(查询元数据的操作不会被记录在edits中,因为查看操作不会更改元数据信息),如果此时NameNode挂掉,重启后从edits中读取元数据的信息。然后,NameNode会在内存中执行元数据的增删改查的操作;
由于edits中记录的操作会越来越多,edits文件会越来越大,导致NameNode在启动加载edits时会很慢,所以需要edits和fsimage进行合并(所谓合并,就是将edits和fsimage加载到内存中,照着edits中的操作一步步执行,最终形成新的fsimage)。secondarynamenode的作用就是帮助NameNode进行edits和fsimage的合并工作;
secondaryNameNode首先会询问NameNode是否需要checkpoint(触发checkpoint需要满足两个条件中的任意一个,定时时间到和edits中数据写满了)。直接带回NameNode是否检查结果。secondarynamenode执行checkpoint操作,首先会让NameNode滚动edits并生成一个空的edits.inprogree,滚动edits的目的是给edits打个标记,以后所有新的操作都会写入edits.inprogree,其他未合并的edits和fsimage会拷贝到secondarynamenode的本地,然后将拷贝的edits和fsimage加载到内训中进行合并,生成fsimage.chkpoint,然后将fsimage.chkpoint拷贝给NameNode,重命名为fsimage后替换掉原来的fsimage。NameNode在启动时就只需要加载之前未合并的edits和fsimage即可,因为合并过的edits中的元数据信息已经被记录在fsimage中;
2.Fsimage和Edits解析
NameNode被格式化之后,将在/opt/module/hadoop/data/tmp/dfs/name/current目录中产生如下文件
Fsimage文件:HDFS文件系统元数据的永久性的检查点,其中包含HDFS文件系统的所有目录和文件idnode的序列化信息;
Edits文件:存放HDFS文件系统的素有更新操作的路径,文件系统客户端执行的所有写操作首先会被记录到edits文件中;
seen_txis:文件保存的是一个数字,就是最后一个edits_的数字;
每次NameNode启动的时候都会将fsimage文件读入内存,加载edits里面的更新操作,保存内存中的元数据信息是最新的,同步的,可以看成NameNode启动的时候就将fsimage和edits文件进行了合并;
2.1 oiv查看Fsimage文件
2.1.1 查看oiv和oev命令
[root@master current]# hdfs
2.1.2 基本语法
hafs oiv -p 文件类型 -i 镜像文件 -o 转换后文件输出路径
2.1.3 实例
[root@master current]# pwd
/opt/module/hadoop/data/temp/dfs/name/current
[root@master current]# hdfs oiv -p XML -i fsimage_0000000000000000580 -o /opt/module/hadoop/fsimage.xml
2.2 oev查看edits文件
2.2.1 基本语法
hdfs oev -p 文件类型 -i 编辑日志 -o 文件输出路径
2.2.2 实例
[root@master current]# hdfs oev -p XML -i edits_0000000000000000579-0000000000000000580 -o /opt/module/hadoop/edits.xml
3.CheckPoint时间设置
通常情况下,SecondaryNameNode每隔一小时执行一次;
[hdfs-default.xml]
<property>
<name>dfs.namenode.checkpoint.period</name>
<value>3600</value>
</property >
一分钟检查一次操作次数,当操作次数达到一百万,SencondaryNameNode执行一次;
<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 >
4.NameNode故障处理
4.1 将SecondaryNameNode中数据拷贝到NameNode存储数据的目录;
4.1.1 kill -9 namenode进行号
4.1.2 删除NameNode存储的数据(/opt/module/hadoop/data/temp/dfs/name)
rm -rf /opt/module/hadoop/data/tmp/dfs/name/*
4.1.3 拷贝SecondaryNameNode中数据到原NameNode存储数据目录
4.1.4 重新启动NameNode
4.2 使用-importCheckpoint选项启动NameNode守护进程,从而将SecondaryNameNode中数据拷贝到NameNode目录中;
4.2.1 修改hdfs-site.xml文件
<property>
<name>dfs.namenode.checkpoint.period</name>
<value>120</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/module/hadoop/data/tmp/dfs/name</value>
</property>
4.2.2 kill -9 NameNode进程号
4.2.3 删除NameNode存储的数据(/opt/module/hadoop/data/temp/dfs/name)
rm -rf /opt/module/hadoop/data/tmp/dfs/name/*
4.2.4 如果SecondaryNameNode不和NameNode在一个主机节点上,需要将SecondaryNameNode存储数据的目录拷贝到NameNode存储数据的评级目录,并删除in_use.lock文件
4.2.5 导入检查点数据
bin/hdfs namenode -importCheckpoint
5.集群安全模式
NameNode启动时,首先将映射文件fsimage载入内存,并执行编辑日志edits中的各项操作。一旦在内存中成功建立文件系统元数据的映像,则创建一个新的fsimage文件和一个空的编辑日志。此时,NameNode开始监听DataNode请求。但是此刻,NameNode运行在安全模式,即NameNode的文件系统对于客户端来说是只读的;
系统中的数据块的位置并不是有NameNode维护的,而是以块列表的形式存储在DataNode中。在系统的正常操作期间,NameNode会在内存中保留所有块位置的映射信息。在安全模式下,各个DataNode会向NameNode发送新的块列表信息,NameNode了解到足够都的块位置信息之后,即可搞笑运行文件系统;
如果满足“最小副本条件”,NameNode会在30秒钟之后就退出安全模式。所谓的最小副本条件指的是在整个文件系统中99.9%的块满足最小副本级别(默认值:dfs.replication.min=1)。在启动一个刚刚格式化的HDFS集群时,因为系统中还没有任何块,所以NameNode不会进入安全模式。
5.1 基本语法
(1)bin/hdfs dfsadmin -safemode get (功能描述:查看安全模式状态)
(2)bin/hdfs dfsadmin -safemode enter (功能描述:进入安全模式状态)
(3)bin/hdfs dfsadmin -safemode leave (功能描述:离开安全模式状态)
(4)bin/hdfs dfsadmin -safemode wait (功能描述:等待安全模式状态)
5.2 实例
5.2.1 进入安全模式
bin/hdfs dfsadmin -safemode enter
5.2.2 执行下面的脚本
#!/bin/bash
bin/hdfs dfsadmin -safemode wait
bin/hdfs dfs -put ~/hello.txt /root/hello.txt
5.2.3 再打开一个窗口,执行
bin/hdfs dfsadmin -safemode leave
以上是关于NameNode和SecondaryNameNode的主要内容,如果未能解决你的问题,请参考以下文章
HDFS的数据流NameNode和SecondaryNameNodeFsimage和Edits解析CheckPoint时间设置NameNode故障处理集群安全模式NameNode多目录配置
Hadoop Datanode、namenode、secondary-namenode、job-tracker 和 task-tracker