本篇博客主要是对hadoop hdfs的故障排除,主要包括:NameNode故障的处理,集群安全模式和磁盘修复。有不好的地方欢迎各位大佬斧正!感谢!
目录
- nn故障处理
- 集群安全模式&磁盘修复
- 简介
- 哪些场景会进入到安全模式
- 退出安全模式的条件
- 基本语法
- 实操01,启动集群进入安全模式
- 实操02,磁盘修复
- 实操03
nn故障处理
1、情景
NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode
2、故障模拟
(1)kill -9 NameNode进程
[lqs@bdc112 current]$ kill -9 19886
(2)删除NameNode存储的数据(/home/lqs/module/hadoop-3.1.3/data/tmp/dfs/name)
[lqs@bdc112 hadoop-3.1.3]$ rm -rf /home/lqs/module/hadoop-3.1.3/data/dfs/name/*
3、解决办法
(1)拷贝SecondaryNameNode中数据到原NameNode存储数据目录
[lqs@bdc112 dfs]$ scp -rlqs@bdc114: /home/lqs/module/hadoop-3.1.3/data/dfs/namesecondary/* ./name/
(2)重新启动NameNode
[lqs@bdc112 hadoop-3.1.3]$ hdfs --daemon start namenode
(3)向集群上传一个文件
集群安全模式&磁盘修复
简介
所谓的安全模式就是文件系统只接受读数据请求,而不接受删除、修改等变更请求
哪些场景会进入到安全模式
1、nn在加载镜像文件和编辑日志的时间段里会进入安全模式
2、nn在接收dn的注册时也会处于安全模式
退出安全模式的条件
1、当dfs.namenode.safemode.min.datanodes:最小可用datanode数量,默认0
2、dfs.namenode.safemode.threshold-pct:副本数达到最小要求的block占系统总block数的百分比,默认0.999f。(只允许丢一个块)
3、dfs.namenode.safemode.extension:稳定时间,默认值30000毫秒,即30秒
基本语法
集群处于安全模式,不能执行重要操作(写操作)。集群启动完成后,自动退出安全模式。
bin/hdfs dfsadmin -safemode get
作用:查看安全模式状态
bin/hdfs dfsadmin -safemode enter
作用:进入安全模式状态
bin/hdfs dfsadmin -safemode leave
作用:离开安全模式状态
bin/hdfs dfsadmin -safemode wait
作用:等待安全模式状态
实操01,启动集群进入安全模式
1、重新启动集群
[lqs@bdc112 subdir0]$ myhadoop.sh stop
[lqs@bdc112 subdir0]$ myhadoop.sh start
2、集群启动后,立即来到集群上删除数据,提示集群处于安全模式
实操02,磁盘修复
情景需求:
数据块损坏,进入安全模式,怎么解决
1、分别进入bdc112、bdc113、bdc114的/home/lqs/module/hadoop-3.1.3/data/dfs/data/current/BP-1015489500-192.168.10.102-1611909480872/current/finalized/subdir0/subdir0目录,统一删除某2个块信息.
[lqs@bdc112 subdir0]$ pwd/home/lqs/module/hadoop-3.1.3/data/dfs/data/current/BP-1015489500-192.168.10.102-1611909480872/current/finalized/subdir0/subdir0
[lqs@bdc112 subdir0]$ rm -rf blk_1073741847 blk_1073741847_1023.meta
[lqs@bdc112 subdir0]$ rm -rf blk_1073741865 blk_1073741865_1042.meta
#说明:bdc113、bdc114重复执行以上命令
2、重新启动集群
[lqs@bdc112 subdir0]$ myhadoop.sh stop
[lqs@bdc112 subdir0]$ myhadoop.sh start
3、观察http://bdc112:9870/dfshealth.html#tab-overview
如果出现上图的内容,说明安全模式已经打开,且块的数量没有达到要求。
4、离开安全模式
[lqs@bdc112 subdir0]$ hdfs dfsadmin -safemode get
Safe mode is ON
[lqs@bdc112 subdir0]$ hdfs dfsadmin -safemode leave
Safe mode is OFF
5、观察http://bdc112:9870/dfshealth.html#tab-overview
6、在web端将将元数据删除
7、观察http://bdc112:9870/dfshealth.html#tab-overview,集群已经正常
实操03
情景需求:
模拟等待安全模式
1、查看当前模式
[lqs@bdc112 hadoop-3.1.3]$ hdfs dfsadmin -safemode get
Safe mode is OFF
2、先进入安全模式
[lqs@bdc112 hadoop-3.1.3]$ bin/hdfs dfsadmin -safemode enter
3、创建并执行下面的脚本
在/home/lqs/module/hadoop-3.1.3路径上,编辑一个脚本safemode.sh
[lqs@bdc112 hadoop-3.1.3]$ vim safemode.sh
#!/bin/bash
hdfs dfsadmin -safemode wait
hdfs dfs -put /home/lqs/module/hadoop-3.1.3/README.txt /
[lqs@bdc112 hadoop-3.1.3]$ chmod 777 safemode.sh
[lqs@bdc112 hadoop-3.1.3]$ ./safemode.sh
4、另外再打开一个窗口,执行
[lqs@bdc112 hadoop-3.1.3]$ bin/hdfs dfsadmin -safemode leave
5、再观察上一个窗口
Safe mode is OFF
6、HDFS集群上已经有上传的数据了