一、什么是安全模式
安全模式是NameNode的一种状态,处于安全模式的NameNode不接受任何对于命名空间的修改操作(但是可以接受读请求),同时也不会触发任何复制和删除数据块的操作
二、为什么要有安全模式
NameNode在启动的时候首先会加载命名空间镜像(fsimage)并且合并编辑日志(editlog),完成这些操作后NameNode的文件系统目录树就构建完成了;之后NameNode会接受来自DataNode的块汇报(blockReport),来获取数据块的相关信息,用来构建数据块与存储这个数据块副本的DataNode的对应关系。这些操作都是在安全模式下进行的,只有当NameNode收集到的满足最低副本系数(一个数据块应该拥有的最少的副本数量)的数据块数量与HDFS中所有的数据块的比例满足阈值比例时才可以离开安全模式,但是此时并不会立刻退出安全模式,而会在延迟一段时间(默认30秒)之后才退出安全模式。延迟一段时间的目的是为了等待那些还没有进行块汇报的数据节点进行块汇报。
最低副本系数
dfs.namenode.replication.min 参数设置 默认是 1
阈值比例
dfs.safemode.threshold.pct 参数设置 默认是 0.999
延迟时间
dfs.safamode.extension 参数设置 默认是30秒
threshold = 0 NameNode 不会进入安全模式
threshold = 1 NameNode需要等待所有的数据块都上报之后才能退出
threshold > 1 NameNode无法自动退出安全模式
在启动一个刚刚格式化的NameNode时,不会进入安全模式,因为此时还没有数据块
任何时候都可以通过手动的方式退出安全模式
如果是手动进入安全模式的,那么namenode不会自动退出安全模式,也必须手动退出
三、与安全模式相关的命令
[hadoop@bigdata ~]$ hdfs dfsadmin -safemode
Usage: hdfs dfsadmin [-safemode enter | leave | get | wait]
# 手动进入安全模式
hdfs dfsadmin -safemode enter
# 手动离开安全模式
hdfs dfsadmin -safemode leave
# 查看安全模式的状态
hdfs dfsadmin -safemode get
# 等待一直到安全模式结束
hdfs dfsadmin -safemode wait