方法一:将SecondaryNameNode中的数据拷贝到namenode存储数据的目录
模拟 namenode 故障,并采用方法一,恢复 namenode 数据
模拟实现
- jps查看namenode进程 并 kill -9 进程号 杀死进程
- 删除 namenode 存储的数(/opt/module/hadoop-2.7.2/data/tmp/dfs/name)
[root@testnote01 ~]# rm -rf /opt/module/hadoop-2.7.2/data/tmp/dfs/name/*
- 拷贝 SecondaryNameNode 中数据到原 namenode 存储数据目录
[root@testnote01 dfs]# scp -r root@testnote03:/opt/module/hadoop-2.7.2/data/tmp/dfs/namesecondary/* ./name/
./name/ 当前的name目录下
干掉锁,
4. 重启namenode
hadoop-daemon.sh start namenode
发现namenode启动成功
数据仍然在
hadoop fs -put seen_txid /
上传文件
刚开始启动集群的时候,集群处于安全模式,等一会就好
采用importCheckpoint拷贝SecondaryNameNode数据
模拟 namenode 故障,并采用方法二,恢复 namenode 数据
修改hdfs-site.xml中的
<!--检查点时间120s-->
<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>
- kill -9 namenode 进程
- 删除 namenode 存储的数据(/opt/module/hadoop-2.7.2/data/tmp/dfs/name)
rm -rf /opt/module/hadoop-2.7.2/data/tmp/dfs/name/*
- 如果secondaryNameNode和NameNode不在一个主机节点上,需要将SecondaryNameNode存储数据的目录拷贝到NameNode存储数据的平级目录,并删除in_use.lock文件
[root@testnote01 dfs]# scp -r root@testnote03:/opt/module/hadoop-2.7.2/data/tmp/dfs/namesecondary ./
在dfs目录下
[root@testnote01 dfs]# ls
data name namesecondary
[root@testnote01 dfs]# cd namesecondary/
[root@testnote01 namesecondary]# rm -rf in_use.lock
- 导入检查点的数据(等待一会ctrl+c结束)
[root@testnote01 dfs]# hdfs namenode -importCheckpoint
ctr+c结束进程
- 启动NameNode
hadoop-daemon.sh start namenode
集群的安全模式操作
概述
NameNode启动时,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作,一旦内存中成功建立文件系统元数据映像,则创建一个新的fsimage文件和一个空的编辑日志,此时NameNode开始监听datanode请求,但此时NameNode处于安全模式.即NameNode的文件系统对于客户端来说是只读的
系统中的数据块的位置并不是NameNode守护的,而是按照块列表的形式存在datanode中,在系统正常操作期间,namenode会在内存中保留所有块位置的映射信息
在安全模式下,各个datanode会向namenode发送最新的块列表信息,namenode了解到足够多的块信息后,即可高效运行文件系统
如果满足"最小副本条件",namenode会在30s之后退出安全模式,
最小副本条件:整个文件系统中,99.9%的块满足最小副本级别(默认值:dfs:replication.min=1),在启动一个刚刚格式化的HDFS集群时,因为系统中还没任何块.所以namenode不会进入安全模式
2) 基本语法
集群处于安全模式下.不能执行重要(写操作),集群启动完成,自动退出安全模式
查看安全模式状态
[root@testnote01 dfs]# hdfs dfsadmin -safemode get
Safe mode is OFF
开启安全模式状态
[root@testnote01 dfs]# hdfs dfsadmin -safemode enter
Safe mode is ON
关闭安全模式状态
[root@testnote01 dfs]# hdfs dfsadmin -safemode leave
Safe mode is OFF
等待安全模式状态
[root@testnote01 dfs]# hdfs dfsadmin -safemode wait
Safe mode is OFF
什么是等待安全模式:
当系统处于安全模式状态,需要将安全模式状态关闭时,立刻执行命令
案例
先进入安全模式
[root@testnote01 dfs]# hdfs dfsadmin -safemode enter
Safe mode is ON
编写脚本并执行
#!/bin/bash
hdfs dfsadmin -safemode wait
hdfs dfs -put /abc.txt /
先开一个窗口,执行
hdfs dfsadmin -safemode leave
原窗口
[root@testnote01 /]# ./en.sh
Safe mode is OFF
文件也上传成功了