-
需求:
NameNode 进程挂了并且存储的数据也丢失了,如何恢复 NameNode
-
故障模拟
- kill -9 NameNode 进程
- 删除 NameNode 存储的数据:
[codecat@hadoop102 dfs]$ rm -rf /opt/module/hadoop-3.1.3/data/dfs/name/*
-
解决方式
- 拷贝 SecondaryNameNode 中数据到原 NameNode 存储数据目录
[codecat@hadoop102 current]$ scp -r codecat@hadoop104:/opt/module/hadoop-3.1.3/data/dfs/namesecondary/* ./name/
- 重新启动 NameNode
[codecat@hadoop102 current]$ hdfs --daemon start namenode
- 拷贝 SecondaryNameNode 中数据到原 NameNode 存储数据目录
文件系统只接受读数据请求,而不接受删除、修改等变更请求
2.2 进入安全模式场景- NameNode 在加载镜像文件和编辑日志期间处于安全模式
- NameNode 再接收 DataNode 注册时,处于安全模式
- dfs.namenode.safemode.min.datanodes:最小可用 datanode 数量,默认 0
- dfs.namenode.safemode.threshold-pct:副本数达到最小要求的 block 占系统总 block 数的百分比,默认 0.999f。(只允许丢一个块)
- dfs.namenode.safemode.extension:稳定时间,默认值 30000ms,即 30s
- 查看安全模式状态:hdfs dfsadmin -safemode get
- 进入安全模式状态:hdfs dfsadmin -safemode enter
- 离开安全模式状态:hdfs dfsadmin -safemode leave
- 等待安全模式状态:hdfs dfsadmin -safemode wait
集群启动后,立即来到集群上删除数据,提示集群处于安全模式
数据块损坏,进入安全模式,如何处理
-
分别在hadoop102,hadoop103,hadoop104统一删除某2个块信息
[codecat@hadoop102 subdir0]$ pwd /opt/module/hadoop-3.1.3/data/dfs/data/current/BP-349834019-192.168.150.102-1629042571631/current/finalized/subdir0/subdir0 [codecat@hadoop102 subdir0]$ rm -rf blk_1073741826_1002.meta [codecat@hadoop102 subdir0]$ rm -rf blk_1073741834_1010.meta [codecat@hadoop103 subdir0]$ pwd /opt/module/hadoop-3.1.3/data/dfs/data/current/BP-349834019-192.168.150.102-1629042571631/current/finalized/subdir0/subdir0 [codecat@hadoop102 subdir0]$ rm -rf blk_1073741826_1002.meta [codecat@hadoop102 subdir0]$ rm -rf blk_1073741834_1010.meta [codecat@hadoop104 subdir0]$ pwd /opt/module/hadoop-3.1.3/data/dfs/data/current/BP-349834019-192.168.150.102-1629042571631/current/finalized/subdir0/subdir0 [codecat@hadoop102 subdir0]$ rm -rf blk_1073741826_1002.meta [codecat@hadoop102 subdir0]$ rm -rf blk_1073741834_1010.meta
-
重新启动集群
发现安全模式已经打开,块的数量没有达到要求。
-
离开安全模式
[codecat@hadoop102 subdir0]$ hdfs dfsadmin -safemode leave
-
将元数据删除
-
集群恢复正常
模拟等待安全模式
- 查看当前模式
[codecat@hadoop102 subdir0]$ hdfs dfsadmin -safemode get Safe mode is OFF
- 先进入安全模式
[codecat@hadoop102 subdir0]$ hdfs dfsadmin -safemode enter Safe mode is ON
- 创建并执行下面的脚本
[codecat@hadoop102 hadoop-3.1.3]$ vim safamode.sh #!/bin/bash hdfs dfsadmin -safemode wait hadoop fs -put /opt/module/hadoop-3.1.3/NOTICE.txt / [codecat@hadoop102 hadoop-3.1.3]$ chmod 777 safamode.sh [codecat@hadoop102 hadoop-3.1.3]$ ./safamode.sh
- 再打开一个窗口,执行
[codecat@hadoop102 hadoop-3.1.3]$ hdfs dfsadmin -safemode get Safe mode is OFF
- HDFS 集群上已经有上传的数据了



