1)概述
Namenode启动时,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作。一旦在内存中成功建立文件系统元数据的映像,则创建一个新的fsimage文件和一个空的编辑日志。此时,namenode开始监听datanode请求。但是此刻,namenode运行在安全模式,即namenode的文件系统对于客户端来说是只读的。
系统中的数据块的位置并不是由namenode维护的,而是以块列表的形式存储在datanode中。在系统的正常操作期间,namenode会在内存中保留所有块位置的映射信息。在安全模式下,各个datanode会向namenode发送最新的块列表信息,namenode了解到足够多的块位置信息之后,即可高效运行文件系统。
如果满足“最小副本条件”,namenode会在30秒钟之后就退出安全模式。所谓的最小副本条件指的是在整个文件系统中99.9%的块满足最小副本级别(默认值:dfs.replication.min=1)。在启动一个刚刚格式化的HDFS集群时,因为系统中还没有任何块,所以namenode不会进入安全模式。
2)基本语法
集群处于安全模式,不能执行重要操作(写操作)。集群启动完成后,自动退出安全模式。
(1)bin/hdfs dfsadmin -safemode get (功能描述:查看安全模式状态)
(2)bin/hdfs dfsadmin -safemode enter (功能描述:进入安全模式状态)
(3)bin/hdfs dfsadmin -safemode leave (功能描述:离开安全模式状态)
(4)bin/hdfs dfsadmin -safemode wait (功能描述:等待安全模式状态)
查看安全模式状态
![](https://img-blog.csdnimg.cn/20190409204408959.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t4ajE5OTgwNTI0,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20190409204430157.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t4ajE5OTgwNTI0,size_16,color_FFFFFF,t_70)
进入安全模式
![](https://img-blog.csdnimg.cn/2019040920461349.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t4ajE5OTgwNTI0,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20190409204629149.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t4ajE5OTgwNTI0,size_16,color_FFFFFF,t_70)
进入安全模式后是不能进行写操作的,但是可以进行读操作.
![](https://img-blog.csdnimg.cn/20190409204642783.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t4ajE5OTgwNTI0,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20190409204729350.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t4ajE5OTgwNTI0,size_16,color_FFFFFF,t_70)
离开安全模式
![](https://img-blog.csdnimg.cn/20190409204759648.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t4ajE5OTgwNTI0,size_16,color_FFFFFF,t_70)
等待安全模式:一般用在,当开始安全模式的时候,当安全模式一关闭,执行在安全模式这期间请求的操作,等安全模式一关闭马上执行
模拟实验,编写脚本
![](https://img-blog.csdnimg.cn/20190409205213581.png)
#!/bin/bash
bin/hdfs dfsadmin -safemode wait
bin/hdfs dfs -put ~/hello.txt /root/hello.txt
修改权限
![](https://img-blog.csdnimg.cn/20190409205232175.png)
进入安全模式,创建一个hello.txt
![](https://img-blog.csdnimg.cn/20190409205322388.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t4ajE5OTgwNTI0,size_16,color_FFFFFF,t_70)
执行脚本,就卡这不动了
![](https://img-blog.csdnimg.cn/20190409205525289.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t4ajE5OTgwNTI0,size_16,color_FFFFFF,t_70)
新打开一个连接进行关闭安全模式
![](https://img-blog.csdnimg.cn/20190409205550737.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t4ajE5OTgwNTI0,size_16,color_FFFFFF,t_70)
旧的窗口就执行完了,文件也上传上去了.
![](https://img-blog.csdnimg.cn/20190409205624487.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t4ajE5OTgwNTI0,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20190409205613820.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t4ajE5OTgwNTI0,size_16,color_FFFFFF,t_70)
安全模式一般用在维护期间,或者银行对账的时候,只能读取数据,不能修改数据