一、安全模式现象探究
1.1 关闭所有服务,使用命令单独启动服务
使用hdfs --daemon命令逐个进程启动集群,观察现象
1.首先启动namenode
stop-all.sh
jps
hdfs --daemon start namenode
jps
hadoop fs -ls / #使用ls浏览时正常显示
hadoop fs -cat /test.txt #使用cat查看数据或创建目录等写操作时报错,提示现在是安全模式
hadoop fs -mkdir /hello
mkdir: Cannot create directory /hello. Name node is in safe mode.
1.2 访问控制台
注意summary信息 The reported blocks 0 needs additional 2 blocks to reach the threshold 0.9990 of total blocks 3
1.3 启动一台datanode
hdfs --daemon start datanode #第一台启动datanode,刷新访问控制台
根据提示,安全模式已经关闭
hadoop fs -mkdir /hello #再次创建目录没有异常
二、安全模式概述
1.在NameNode主节点启动时,HDFS会首先进入安全模式。检查包括文件副本的数量、可用的datanode数量、集群可用block比例等参数。
2.在安全模式下,文件系统只接受读数据请求,而不接受删除、修改等变更请求。
3.在NameNode启动过程中,首先会从fsimage和edits日志文件加载文件系统状态。然后,等待DataNodes汇报可用的block信息。在此期间,NameNode保持在安全模式。随着DataNode的block汇报持续进行,当整个系统达到安全标准时,HDFS自动离开安全模式。在NameNode Web主页上会显示安全模式是打开还是关闭。
三、安全模式自动离开
相关参数(hdfs-site.xml):
dfs.replication #hdfs block的副本数据,默认3
dfs.replication.max #最大块副本数,默认512
dfs.namenode.replication.min #最小块副本数,默认1
dfs.namenode.safemode.threshold-pct #已汇报可用数据块数量占整体块数量的百分比阈值。默认0.999f,小于或等于0,则表示退出安全模式之前,不要等待特定百分比的块。大于1的值将使安全模式永久生效。
dfs.namenode.safemode.min.datanodes #指在退出安全模式之前必须存活的DataNode数量,默认0
dfs.namenode.safemode.extension #达到阈值条件后持续扩展的时间。倒计时结束如果依然满足阈值条件,自动离开安全模式。默认30000毫秒
四、安全模式手动进入、离开
hdfs dfsadmin -safemode get 查看安全模式的状态
hdfs dfsadmin -safemode enter 进入安全模式
hdfs dfsadmin -safemode wait 进入安全模式
hdfs dfsadmin -safemode leave 离开安全模式
enter和wait都是进入安全模式,区别是enter是一定进入安全模式的,wait是等待HDFS进入安全模式
"一劳永逸" 的话,有是有的,而 "一劳永逸" 的事却极少