6.Hadoop集群的安全模式
6.1 工作流程(理解)
- 启动NameNode,NameNode加载fsimage到内存,对内存数据执行edits log日志中的事务操作。
- 文件系统元数据内存镜像加载完毕,进行fsimage和edits log日志的合并,并创建新的fsimage文件和一个空的edits log日志文件。
- NameNode等待DataNode上传block列表信息,直到副本数满足最小副本条件。最小副本条件指整个文件系统中有99.9%的block达到了最小副本数(默认值是1,可设置)
- 当满足了最小副本条件,再过30秒,NameNode就会退出安全模式。
在NameNode安全模式(safemode)
- 对文件系统元数据进行只读操作
- 当文件的所有block信息具备的情况下,对文件进行只读操作
- 不允许进行文件修改(写,删除或重命名文件)
6.2 注意事项
- NameNode不会持久化block位置信息;DataNode保有各自存储的block列表信息。正常操作时,NameNode在内存中有一个blocks位置的映射信息(所有文件的所有文件块的位置映射信息)。
- NameNode在安全模式,NameNode需要给DataNode时间来上传block列表信息到NameNode。如果NameNode不等待DataNode上传这些信息的话,则会在DataNode之间进行block的复制,而这在大多数情况下都是非必须的(因为只需要等待DataNode上传就行了),还会造成资源浪费。
- 在安全模式NameNode不会要求DataNode复制或删除block。
- 新格式化的HDFS不进入安全模式,因为DataNode压根就没有block。
6.3 参数配置
在hdfs-site.xml位置中进行配置。
6.4 命令操作(了解)
通过命令查看namenode是否处于安全模式:
[root@node1 ~]# hdfs dfsadmin -safemode get
Safe mode is ON
HDFS的前端webUI页面也可以查看NameNode是否处于安全模式。
有时候我们希望等待安全模式退出,之后进行文件的读写操作,尤其是在脚本中,此时:
[root@node1 ~]# hdfs dfsadmin -safemode wait
# your read or write command goes here
管理员有权在任何时间让namenode进入或退出安全模式。进入安全模式:
[root@node1 ~]# hdfs dfsadmin -safemode enter
Safe mode is ON
这样做可以让namenode一直处于安全模式,也可以设置dfs.namenode.safemode.threshold-pct为1做到这一点。
离开安全模式:
[root@node1 ~]# hdfs dfsadmin -safemode leave
Safe mode is OFF