一、概述

NameNode启动

NameNode启动时,首先将镜像文件(Fsimage)载入内存,并执行编辑日志(Edits)中的各项操作。一旦在内存中成功建立文件系统元数据的映像,则创建一个新的Fsimage文件和一个空的编辑日志。此时, NameNode开始监听DataNode请求。这个过程期间,NameNode一直运行在安全模式,即NameNode的文件系 统对于客户端来说是只读的。

DataNode启动

系统中的数据块的位置并不是由NameNode维护的,而是以块列表的形式存储在DataNode中。在系统的正常操作期间,NameNode会在内存中保留所有块位置的映射信息。在安全模式下,各个DataNode会向 NameNode发送最新的块列表信息,NameNode了解到足够多的块位置信息之后,即可高效运行文件系统。

安全模式退出判断

如果满足“最小副本条件”,NameNode会在30秒钟之后就退出安全模式。所谓的最小副本条件指的是在整个文件系统中99.9%的块满足最小副本级别(默认值:dfs.replication.min=1)。在启动一个刚刚格式化的 HDFS集群时,因为系统中还没有任何块,所以NameNode不会进入安全模式。

二、基本语法

集群处于安全模式,不能执行重要操作(写操作)。集群启动完成后,自动退出安全模式。

  • bin/hdfs dfsadmin -safemode get :查看当前模式
  • bin/hdfs dfsadmin -safemode enter : 先进入安全模式
  • bin/hdfs dfsadmin -safemode leave : 离开安全模式
  • bin/hdfs dfsadmin -safemode wait : 等待安全模式

在安全模式下,执行put命令会失败;

三、案例:安全模式等待案例

  • 查看当前模式
  1. $ hdfs dfsadmin -safemode get
  2. Safe mode is OFF
  • 进入安全模式

    1. $ bin/hdfs dfsadmin -safemode enter
  • 创建并执行下面的脚本

在/opt/module/hadoop-2.7.2 路径上,编辑一个脚本 safemode.sh

  1. $ touch safemode.sh
  2. $ vim safemode.sh
  3. #!/bin/bash
  4. hdfs dfsadmin -safemode wait
  5. hdfs dfs -put /opt/module/hadoop-2.7.2/README.txt /
  6. $ chmod 777 safemode.sh
  7. $ ./safemode.sh
  • 再打开一个窗口,执行
  1. $ bin/hdfs dfsadmin -safemode leave
  • 观察

    • 再观察上一个窗口

Safe mode is OFF

  • HDFS 集群上已经有上传的数据了
  1. <br />