![Hadoop+Spark大数据技术(微课版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/911/53255911/b_53255911.jpg)
2.2.4 NameNode
在HDFS中,NameNode是一个中心服务器,负责管理整个文件系统的命名空间(名字空间)和元数据,以及处理来自客户端的文件访问请求。NameNode保存了文件系统的如下3种元数据。
(1)命名空间,即整个分布式文件系统的目录结构。
(2)数据块与文件名的映射表。
(3)每个数据块副本的位置信息,每一个数据块默认有3个副本。
元数据信息包括:
(1)文件的owership和permission。
(2)文件包含哪些数据块。
(3)数据块保存在哪个DataNode(由DataNode启动时上报)上。
HDFS的元数据镜像文件FsImage用于维护文件系统树,以及文件树中所有的文件和文件夹的元数据。HDFS的操作日志文件EditLog用于记录文件的创建、删除、重命名等操作,每次保存FsImage之后到下次保存之间的所有HDFS操作,将会记录在EditLog文件中。与NameNode相关的文件还包括FsTime,用来保存最近一次检查点(checkpoint)的时间。FsImage、EditLog和FsTime均保存在Linux文件系统中。
HDFS对外提供了命名空间,让用户的数据可以存储在文件中,但在内部,文件可能被分成若干个数据块。HDFS中的文件命名遵循了传统的“目录/子目录/文件”格式。通过命令或者API可以创建目录,并且将文件保存在目录中。命名空间由NameNode管理,在NameNode上可以执行文件操作,比如打开、关闭、重命名等。此外,NameNode也负责向DataNode分配数据块并建立数据块和DataNode的对应关系。
NameNode只监听客户端事件及DataNode事件,而不会主动发起请求。客户端事件通常包括目录和文件的创建、读写、重命名和删除,以及文件列表信息的获取等。DataNode事件主要包括数据块信息的汇报、心跳消息、出错信息等。当NameNode监听到这些请求时便对它们进行响应,并将相应的处理结果返回到请求端。