当 namenode 刚启动时会进入安全模式,具体顺序是首先将 fsimage 载入内存,并执行 editLog 中的操作。一旦文件系统元数据创建成功,便会创建一个空的 editLog。此时 nameNode 开始监听 RPC 和 Http 请求。但是此时 namenode 处于安全模式,只接收客户端的读操作。
安全模式是 Hadoop 的一种保护机制,用于保证集群中数据块的安全性。
当集群启动时,会首先进入安全模式。当系统处于安全模式时会检查数据块的完整性。假设我们设置的副本数(即参数dfs.replication)是5,那么在datanode上就应该有5个副本存在,假设只存在3个副本,那么比例就是3/5=0.6。在配置文件hdfs-default.xml中定义了一个最小的副本的副本率0.999,如图
我们的副本率0.6明显小于0.99,因此系统会自动的复制副本到其他的dataNode,使得副本率不小于0.999.如果系统中有8个副本,超过我们设定的5个副本,那么系统也会删除多余的3个副本。
正常情况下(不需要进行数据块复制、删除操作),安全模式会在运行一段时间后自动退出(一般为30S后),也可以在 50070 端口页面上查看安全模式退出的剩余时间,如图
可以使用 hadoop fs -safemode leave
来退出安全模式
安全模式是Hadoop 的一种保护机制,建议等待让集群自动退出安全模式
在启动一个刚刚格式化的 HDFS 时不会进入安全模式,因为没有数据块