一、 什么是安全模式?
首先你需要了解NameNode的工作机制,请先查看这篇博客便于理解https://blog.csdn.net/qq_41813208/article/details/102722283
安全模式在NameNode的作用:
NameNode启动时,首先将镜像文件(Fsimage)载入内存并执行编辑日志(Edits)中的各项操作。一旦在内存中成功建立文件系统元数据的映像,则创建一个新的Fsimage文件和一个空的编辑日志。此时,NameNode开始监听DataNode请求。 这个过程期间,NameNode一直运行在安全模式,即NameNode的文件系统对于客户端来说是只读的(不允许上传删除文件)。
安全模式在DataNode的作用:
系统中的数据块的位置并不是由NameNode维护的,而是以块列表的形式存储在DataNode中。在系统的正常操作期间,NameNode会在内存中保留所有块的映射信息。在安全模式下,各个DataNode会向NameNode发送最新的块列表信息,NameNode了解到最后多的块信息之后,即可高效运行系统。
判断安全模式是否退出
如果满足"最小副本条件(指NameNode 元数据有 所有文件 至少一个副本的时候 就是最小副本)",NameNode会在30秒钟之后就会退出安全模式。
另外:
启动一个刚刚格式化的HDFS集群时,因为系统中还没有任何块,所以NameNode不会进入安全模式。
- 查看安全模式状态
hdfs dfsadmin -safemode get - 进入安全模式
hdfs dfsadmin -safemode enter - 离开安全模式
hdfs dfsadmin -safemode leave - 等待安全模式
hdfs dfsadmin -safemode wait
案例:
1、首先创建一个文件用于测试 touch test.txt
2、创建一个脚本文件vim safemodeTest.sh
hdfs dfsadmin -safemode wait
hdfs dfs -put test.txt
分两种情况执行这个脚本文件
情况一、先让集群进入安全模式
hdfs dfsadmin -safemode enter
再执行上面的脚本
bash ./safemodeTest.sh
此时这个命令行界面会进入等待
此时会报错
然后另外开启一个命令行,让NameNode从安全模式退出
hdfs dfsadmin -safemode leave
此时会发现test.txt文件已经上传到集群上了,并且之前进入等待的窗口退出
下面让集群离开安全模式
此时会发现文件已经上传到集群上了
如图
情况二、先让集群进入安全模式
hdfs dfsadmin -safemode enter
然后上传上面的test.txt到集群上
hdfs dfs -put text.txt /
会如下报错
本文深入探讨了HDFS中安全模式的功能与作用,包括NameNode和DataNode在该模式下的行为,以及如何通过命令行工具控制安全模式的进出。安全模式确保了文件系统的稳定性和一致性,是HDFS维护和故障恢复的重要机制。




2667

被折叠的 条评论
为什么被折叠?



