安全模式是 HDFS 的一种工作状态,处于安全模式的状态下,只接受客户端的读请求,不接受删除、修改等请求,它是一种保护机制,用于保护集群中的数据块的安全性。
在 NameNode 主节点启动时,HDFS 首先进入安全模式,集群会开始检查数据块的完整性。DataNode 在启动的时候会向 NameNode 汇报可用的 block 信息,当整个系统达到安全标准时,HDFS 自动离开安全模式。而在安全模式下,系统会处于只读状态,NameNode 不会处理任何块的复制和删除命令。
安全模式退出判断:
如果满足“最小副本条件”,NameNode会在30秒之内退出安全模式。
所谓最小副本条件:
假设我们设置的副本数(即参数 dfs.replication)是 5,那么在 Datanode 上就应该有 5 个副本存在,假设只存在 3 个副本,那么比例就是 3/5=0.6。在配置文件 hdfs-default.xml 中定义了一个最小的副本的副本率(即参数 dfs.namenode.safemode.threshold-pct)0.999。
我们的副本率 0.6 明显小于 0.99,因此系统会自动的复制副本到其他的 DataNode, 使得副本率不小于 0.999. 如果系统中有 8 个副本,超过我们设定的 5 个副本,那么系统也会删除多余的 3 个副本。
注意:在启动一个刚刚格式化的 HDFS 时不会进入安全模式,因为没有数据块。