namenode## 作用与机制
作为整个HDFS集群和文件系统的管理者,namenode的功能主要可总结为以下四点
1、管理HDFS的命名空间,并以fsimage进行持久化保存。
HDFS命名空间即文件目录树及其目录与文件的元数据,为了处理的高效性,namenode会在内存中维护这部分元数据,同时为了安全性,也需要将这些数据永久化到磁盘中,具体则是通过fsimage和edits两个文件进行实现
fsimage 是命名空间镜像文件,是文件系统元数据的完整的永久检查点,可理解为文件系统的存档或者快照,由于文件系统往往较为庞大,实时对其进行记录将非常影响性能。这里采用的策略是只每隔一段时间记录一次完整的文件系统镜像(即建立检查点),而中间的变化则是通过将用户的所有操作记录到编辑日志edits文件中进行保存,这样只需要在最近一次的fsimage上推演edits文件中记录的操作,便可得到最新的文件系统。新一个检查点的建立,便是通过合并上一个检查点和edit文件获得的(在上一个检查点上推演其后的edit文件中的操作),这样的操作会消耗大量的cup和内存资源,因此将合并检查点和edit文件的工作将给secondarynamebode进行处理
fsimage和edits文件的存储路径分别由配置文件中的dfs.name.dir和dfs.name.edits.dir所决定,其默认的路径均是/tmp/hadoop/dfs/name
进入该路径后,可见以下目录
edits文件中的数值后缀是其中记录的事务ID,edits会从1开始记录所有事务
fsimage的数字后缀为该检查点同步的最后一个事务ID。可以看出,不同于edits记录所有的事务,系统只会保留最新的两个检查点
2、处理客户端的访问,并将修改动作记录到edits文件中
namenode负责处理客户端的请求并返回块文件对应的datanode地址,具体的读写操作由datanote进行。namenode将修改动作全部记录到edits文件中,协助fsimage 维护命名空间
3、在内存中维护数据块的映射信息。
即块文件与datanode的对应关系,namenode只在内存中维护此关系,不会永久化到磁盘上,因此在集群刚启动是,namenode中并没有块文件与datanode的对应关系,需要datanode上报自身的块文件信息后,才可以正常工作
4、实施副本冗余策略
当发现块的实际副本数小于配置数时,会启动复制块的线程,直到个数达到配置数
参考:《hadoop权威指南》