Bootstrap

Hadoop3:HDFS-集群安全模式

一、基本介绍

1、安全模式

文件系统只接受读数据请求,而不接受删除、修改等变更请求

2、 二、进入安全模式场景

1、NameNode在加载镜像文件和编辑日志期间处于安全模式(就是启动集群的时候);
2、NameNode再接收DataNode注册时,处于安全模式

3、退出安全模式条件

hdfs-default.xml

dfs.namenode.safemode.min.datanodes:最小可用datanode数量,默认0
dfs.namenode.safemode.threshold-pct:副本数达到最小要求的block占系统总block数的百分比,默认0.999f。(只允许丢一个块)
dfs.namenode.safemode.extension:稳定时间,默认值30000毫秒,即30秒

4、常用命令

(1)bin/hdfs dfsadmin -safemode get	(功能描述:查看安全模式状态)
(2)bin/hdfs dfsadmin -safemode enter (功能描述:进入安全模式状态)
(3)bin/hdfs dfsadmin -safemode leave	(功能描述:离开安全模式状态)
(4)bin/hdfs dfsadmin -safemode wait	(功能描述:等待安全模式状态)

二、案例

1、磁盘修复案例

模拟数据块损坏
删除三个磁盘上的同一份文件的数据块

rm -rf blk_1073741825 blk_1073741825_1001.meta blk_1073741845 blk_1073741845_1021.meta

在这里插入图片描述
重启集群

myhadoop stop
myhadoop start

查看页面
总共23个数据库,现在就21个,所以,进入安全模式
在这里插入图片描述
处理办法
1、临时处理
使用命令退出安全模式

hdfs dfsadmin -safemode get
hdfs dfsadmin -safemode leave

在这里插入图片描述
查看页面
在这里插入图片描述
安全模式已经关闭,但是,页面顶部出现了其他告警信息
现在,可以从页面进行删除数据了。
但是,下次启动,还是会进入安全模式。

2、彻底解决
找专业团队,进行数据修复,但是,一般这种方法是针对非常重要的数据进行,因为要花钱。

另外一个办法
就是根据提示信息,把元数据删除。
在这里插入图片描述在这里插入图片描述
再次重启,就不会停留在安全模式了。
在这里插入图片描述

2、利用安全模式等待执行

应用场景:
有些公司,会在月底进行一些订单核算业务。
这个时候,不允许有人操作集群。
那么,我们可以使用命令,进入安全模式即可。
但是,同时我们还有其他业务脚本需要执行,怎么办?
无需人员等待
我们,写一个阻塞脚本,当退出安全模式的时候,即刻执行脚本。

查看安全模式,并进入安全模式

hdfs dfsadmin -safemode get
hdfs dfsadmin -safemode enter

在这里插入图片描述

测试脚本
等待安全模式退出时,上传一份文件到集群

#!/bin/bash
hdfs dfsadmin -safemode wait
hdfs dfs -put /opt/module/hadoop-3.1.3/README.txt /

执行脚本
脚本进入堵塞状态
在这里插入图片描述
退出安全模式,观察脚本情况
会发现,安全模式退出时,立即执行脚本逻辑。

hdfs dfsadmin -safemode leave

在这里插入图片描述在这里插入图片描述

;