4-HDFS工作机制
1 开机启动NameNode过程
1.1 非第一次启动集群的启动流程
在启动namenode之前,内存里是没有任何有关于元数据的信息的。那么启动集群的过程是怎样的呢?下面来叙述一下:
1 | |
不是第一次启动,直接加载编辑日志和edits文件的情况展示:

执行流程

1.2 第一次启动集群的启动流程
第一次启动namenode格式化后的情况展示:

注意:格式化集群后,第一次启动集群的特点,参考下图

1.3 小知识
1 | |

2 安全模式介绍
Namenode启动时,首先要加载fsimage文件到内存,并逐条执行editlog文件里的事务操作,在这个期间一但在内存中成功建立文件系统元数据的映像,就会新创建一个fsimage文件(该操作不需要SecondaryNamenode)和一个空的editlog文件。在这个过程中,namenode是运行在安全模式下的,Namenode的文件系统对于客户端来说是只读的,文件修改操作如写,删除,重命名等均会失败。
系统中的数据块的位置并不是由namenode维护的,而是以块列表的形式存储在datanode中。在系统的正常操作期间,namenode会在内存中保留所有块位置的映射信息。在安全模式下,各个datanode会向namenode发送最新的块列表信息,如果满足“最小副本条件”,namenode会在30秒钟之后就退出安全模式,开始高效运行文件系统.所谓的最小副本条件指的是在整个文件系统中99.9%的块满足最小副本级别(默认值:dfs.replication.min=1)。
PS:启动一个刚刚格式化完的集群时,HDFS还没有任何操作呢,因此Namenode不会进入安全模式。
系统离开安全模式,需要满足哪些条件?
1
2
3
4
5
6
7
8当namenode收到来自datanode的状态报告后,namenode根据配置确定
1. 可用的block占总数的比例
2. 可用的数据节点数量符合要求之后,离开安全模式。
1、2两个条件满足后维持的时间达到配置的要求。
注意: 如果有必要,也可以通过命令强制离开安全模式。与安全模式相关的主要配置在hdfs-site.xml文件中,主要有下面几个属性
1
2
3
4
5
6
7
8
9
10
111. dfs.namenode.replication.min:
最小的文件block副本数量,默认为1
2. dfs.namenode.safemode.threshold-pct:
副本数达到最小要求的block占系统总block数的百分比,当实际比例超过该配置后,才能离开安全模式(但是还需要其他条件也满足)。默认为0.999f,也就是说符合最小副本数要求的block占比超过99.9%时,并且其他条件也满足才能离开安全模式。如果为小于等于0,则不会等待任何副本达到要求即可离开。如果大于1,则永远处于安全模式。
3. dfs.namenode.safemode.min.datanodes:
离开安全模式的最小可用(alive)datanode数量要求,默认为0.也就是即使所有datanode都不可用,仍然可以离开安全模式。
4. dfs.namenode.safemode.extension:
当集群可用block比例,可用datanode都达到要求之后,如果在extension配置的时间段之后依然能满足要求,此时集群才离开安全模式。单位为毫秒,默认为1。也就是当满足条件并且能够维持1毫秒之后,离开安全模式。这个配置主要是对集群的稳定程度做进一步的确认。避免达到要求后马上又不符合安全标准。相关命令
- 查看namenode是否处于安全模式
1
2[root@qianfeng01 current]# hdfs dfsadmin -safemode get
Safe mode is ON- 管理员可以随时让Namenode进入或离开安全模式,这项功能在维护和升级集群时非常关键
1
2
3
4[root@qianfeng01 current]# hdfs dfsadmin -safemode enter
Safe mode is ON
[root@qianfeng01 current]# hdfs dfsadmin -safemode leave
Safe mode is OFF- 将下面的属性的值设置为大于1,将永远不会离开安全模式
1
2
3
4<property>
<name>dfs.namenode.safemode.threshold-pct</name>
<value>0.999f</value>
</property>- 有时,在安全模式下,用户想要执行某条命令,特别是在脚本中,此时可以先让安全模式进入等待状态
1
2[root@qianfeng01 current]# hdfs dfsadmin -safemode wait
# command to read or write a file
3 DataNode与NameNode通信(心跳)
- hdfs是master/slave结构,master包括namenode和resourcemanager,slave包括datanode和nodemanager
- qianfeng01启动时会开启一个IPC服务,等待slave连接
- slave启动后,会主动连接IPC服务,并且每隔3秒链接一次,这个时间是可以调整的,设置heartbeat,这个每隔一段时间连接一次的机制,称为心跳机制。slave通过心跳给qianfeng01汇报自己信息,qianfeng01通过心跳下达命令。
- Namenode通过心跳得知datanode状态。Resourcemanager通过心跳得知nodemanager状态
- 当qianfeng01长时间没有收到slave信息时,就认为slave挂掉了。
注意:超长时间计算结果:默认为10分钟30秒
1 | |
4 SecondaryNameNode工作机制(检查点机制)
SecondaryNamenode,是HDFS集群中的重要组成部分,它可以辅助Namenode进行fsimage和editlog的合并工作,减小editlog文件大小,以便缩短下次Namenode的重启时间,能尽快退出安全模式。
两个文件的合并周期,称之为检查点机制(checkpoint),是可以通过hdfs-default.xml配置文件进行修改的:
1 | |

通过上图,可以总结如下:
1 | |
5 HDFS管理命令
