思考:NameNode中的元数据是存储在哪里的?
NN与2NN工作机制
- NameNode在格式化之后,将在
/opt/module/hadoop-2.7.2/data/tmp/dfs/name/current/
目录下产生如下文件:
-rw-rw-r--. 1 kocdaniel kocdaniel 945 9月 25 20:27 fsimage_0000000000000000000
-rw-rw-r--. 1 kocdaniel kocdaniel 62 9月 25 20:27 fsimage_0000000000000000000.md5
-rw-rw-r--. 1 kocdaniel kocdaniel 4 9月 25 20:27 seen_txid
-rw-rw-r--. 1 kocdaniel kocdaniel 205 9月 25 10:25 VERSION
- oiv查看Fsimage文件
hdfs oiv -p 文件类型 -i 镜像文件 -o 转换后文件输出路径
- oev查看Edits文件
hdfs oev -p 文件类型 -i 编辑日志 -o 转换后文件输出路径
默认情况下,SecondaryNameNode每隔一个小时或者当操作次数超过100万次时执行一次,但是操作次数的统计SecondaryNameNode自己做不到,需要借助NameNode,所以还有一个参数设置是namenode每隔一分钟检查一次操作次数,当操作次数达到100万时SecondaryNameNode开始执行Checkpoint,三个参数的设置都在hdfs_site.xml配置文件中,配置如下:
# SecondaryNameNode每隔一个小时执行一次
<property>
<name>dfs.namenode.checkpoint.period</name>
<value>3600</value>
</property>
# SecondaryNameNode当操作次数超过100万次时执行一次
<property>
<name>dfs.namenode.checkpoint.txns</name>
<value>1000000</value>
<description>操作动作次数</description>
</property>
# NameNode一分钟检查一次操作次数
<property>
<name>dfs.namenode.checkpoint.check.period</name>
<value>60</value>
<description> 1分钟检查一次操作次数</description>
</property >
NameNode故障后有两种处理方式:
NameNode故障处理方式一:直接将SecondaryNameNode目录下的数据直接拷贝到NameNode目录下,然后重新启动NameNode
NameNode故障处理方式二:使用-importCheckpoint选项启动NameNode守护进程,从而将SecondaryNameNode目录下的数据直接拷贝到NameNode目录下
# SecondaryNameNode每隔两分钟执行一次
<property>
<name>dfs.namenode.checkpoint.period</name>
<value>120</value>
</property>
# 指定namenode生成的文件目录
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp/dfs/name</value>
</property>
[kocdaniel@hadoop102 hadoop-2.7.2]$ bin/hdfs namenode -importCheckpoint
注意:执行完该命令后,观察namenode已经启动(临时启动),而且每2分钟检查一次,如果确定已经恢复了数据,我们ctrl+c停止,然后自己手动起namenode
ctrl+c之后,重启namenode即可恢复数据,但是并不能完全恢复,可能会将最新的Edits文件中的操作丢失
(1)bin/hdfs dfsadmin -safemode get (功能描述:查看安全模式状态)
(2)bin/hdfs dfsadmin -safemode enter (功能描述:进入安全模式状态)
(3)bin/hdfs dfsadmin -safemode leave (功能描述:离开安全模式状态)
# wait是指,如果在脚本中写入此命令,则脚本将等待安全模式退出后自动执行
(4)bin/hdfs dfsadmin -safemode wait (功能描述:等待安全模式状态)
# 指定目录的路径
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///${hadoop.tmp.dir}/dfs/name1,file:///${hadoop.tmp.dir}/dfs/name2</value>
</property>
浅谈HDFS(二)之NameNode与SecondaryNameNode
原文:https://www.cnblogs.com/kocdaniel/p/11600345.html