namenode启动时,首先将映像文件(fsimage)载入内存,并中兴编辑日志中的各项操作。一旦在内存中成功建立文件系统元数据的映像,则创建一个新的fsimage文件(该操作不需要借助namenode)和一个空的编辑日志。此时,namenode开始监听RPC和http请求。但是此刻namenode运行在安全模式,即namenode的文件系统对于客户端来说是只读的。(只有访问文件系统元数据的文件系统操作时肯定成功执行的,对于读文件操作,只有集群中当前datanode上的块可用时,才能工作。但文件修改操作,包括写、删或重命名均会失败)。
在安全模式下namenode并不向datanode发出任何块复制或删除的指令。如果满足“最小副本条件”,namenode会在30秒钟后就退出安全模式,启动一个刚格式化的HDFS集群时,因系统中还没任何块,所以namenode不会进入安全模式。
01、进入和离开安全模式
hdfs dfsadmin -safemode get 显示是否处于安全模式
hdfs dfsadmin -safemode wait 一直等到某条命令到来前才退出安全模式
以下可以随时进入或离开安全模式
hdfs dfsadmin -safemode enter 进入安全模式
hdfs dfsadmin -safemode leave 离开安全模式
02、安全模式相关的属性
dfs.replication.min(默认1),成功执行写操作所需创建的最小副本数(也称最小副本级别)
dfs.safemode.threshold.pct(默认值0.999),在namenode退出安全模式之前,系统中满足最小副本级别(由dfs.replication.min定义)的块的比例。将这项值设为0或更小会令namenode无法启动安全模式,设为高于1则永远不会退出安全模式。
dfs.safemode.extension(默认值30000),在满足最小副本条件之后,namenode还需处于安全模式的时间(以毫秒为单位),对于小型集群可设为0
原文地址:http://blog.51cto.com/13479057/2086830