namenode启动
Namenode持久化了文件和块之间的对应关系,也就是在namenode数据目录下的current/fsimage目录,namenode启动的时候,会将这个文件加载到内存里。块和机器的对应关系,namenode并不持久化,也就是说,namenode在启动的时候,并不知道文件块都在哪个datanode里,所以,namenode在启动后,会处于safemode状态,等待datanode在发送心跳的时候,报告自己的文件块列表,每个块都有指定的最小副本数,当namenode检测确认数据块的副本数达到最小副本数的时候,认为这个块是有效的。这个数目可以通过dfs.replication.min参数配置,默认是1,也就是至少要求有一个副本。
Namenode根据块的有效率来决定是否退出安全模式,默认情况下,只有块有效率达到99.9%以上时,才会退出安全模式。在启动的时候,可以看到这样的日志:
The ratio ofreported blocks 1.0000 has reached the threshold 0.9990. Safe mode will beturned off automatically in 30 seconds.
如果块有效率达不到这个比率,则namenode将一直处于安全模式。这个比率可以通过配置项:dfs.safemode.threshold.pct进行调节,当数据块达到要求后,namenode还留一段时间等待其他的datanode,可以通过dfs.safemode.extension来配置,默认30秒。