10.3 Hadoop集群的维护
10.3.1 安全模式
当NameNode启动时,要做的第一件事情就是将映像文件fsimage加载到内存,并应用edits文件记录编辑日志。一旦成功重构和之前文件系统一致且居于内存的文件系统元数据,NameNode就会创建一个新的fsimage文件(这样就可以更高效地记录检查点,而不用依赖于Secondary NameNode)和一个空的编辑日志文件。只有全部完成了这些工作,NameNode才会监听RPC和HTTP请求。然而,如果NameNode运行于安全模式下,那么文件系统只能对客户端提供只读模式的视图。
文件块的位置信息并没有持久化地存储在NameNode中,这些信息都存储在各DataNode中。在文件系统的常规操作期间,NameNode会在内存中存储一个块位置的映射。在安全模式下,需要留给DataNode一定的时间向NameNode上传它们存储块的列表,这样NameNode才能获得充足的块位置信息,才会使文件系统更加高效。如果NameNode没有足够的时间来等待获取这些信息,那么它就会认为该块没有足够的副本,进而安排其他DataNode复制。这在很多情况下显然是没有必要的,还浪费系统资源。在安全模式下,NameNode不会处理任何块复制和删除指令。
当最小副本条件达到要求时,系统就会退出安全模式,这需要延期30秒(这个时间由dfs.safe-mode.extension属性值确定,默认为30,一些小的集群(比如只有10个节点),可以设置该属性值为0)。这里所说的最小副本条件是指系统中99.9%(这个值由dfs.safemode.threshold.pct属性确定,默认为0.999)的文件块达到dfs.replication.min属性值所设置的副本数(默认为1)。
当格式化一个新的HDFS时,NameNode不会进入安全模式,因为此时系统中还没有任何文件块。
使用以下命令可以查看NameNode是否已进入安全模式:
hadoop dfsadmin-safemode get
Safe mode is ON
在有些情况下,需要在等待NameNode退出安全模式时执行一些命令,这时我们可以使用以下命令:
hadoop dfsadmin-safemode wait
command to read or write a file
作为管理员,也应掌握使NameNode进入或退出安全模式的方法,这些操作有时也是必需的,比如在升级完集群后需要确认数据是否仍然可读等。这时我们可以使用以下命令:
hadoop dfsadmin-safemode enter
Safe mode is ON
当NameNode仍处于安全模式时,也可以使用以上命令以保证NameNode没有退出安全模式。要使系统退出安全模式可执行以下命令:
hadoop dfsadmin-safemode leave
Safe mode is OFF