HDFS采用Master/Slave架构。NameNode就是HDFS的Master架构。HDFS系统包括一个NameNode组件
名称空间(namespace)管理
·执行客户端对文件的访问
·执行文件系统命名空间操作,如打开、关闭、重命名文件/目录
·决定block到DataNode的映射,记录了每个文件中各个块所在的数据节点的位置信息
NameNode用于存储文件系统的元数据(Metadata):
• 文件信息(name、updates、replication factor(副本因子)等)
• 文件块的信息和位置
• 文件的访问权限
• 集群中文件的数量
• 集群中DataNode的数量
在HDFS内部,一个文件被分成一个或多个Block,这些Block存储在DataNode集合里,NameNode就负责管理文件Block的所有元数据信息。
元数据信息主要为:
·文件系统目录树的信息
· ”文件名->数据块“映射
·”数据块->DataNode列表“映射
其中,“文件名->数据块”保存在磁盘上进行持久化存储,NameNode上不保存“数据块->DataNode列表”映射,该列表通过DataNode上报给NameNode建立起来的。
元数据信息会在硬盘上保存成以下文件:
• 镜像文件(FsImage)及修改日志(EditLog)
• NameNode使用FsImage存储文件系统的命名空间,包含文件的映射、文件的属性信息等
• FsImage文件包含文件系统中所有目录和文件inode的序列化形式。
• 每个inode是一个文件或目录的元数据的内部表示,并包含此类信息:文件的复制
等级、修改和访问时间、访问权限、块大小以及组成文件的块。对于目录,则存
储修改时间、权限和配额元数据
•
FsImage文件没有记录文件包含哪些块以及每个块存储在哪个数据节点。而是由名
称节点把这些映射信息保留在内存中,当数据节点加入HDFS集群时,数据节点会
把自己所包含的块列表告知给名称节点
,此后会定期执行这种告知操作,以确保
名称节点的块映射是最新的(文件-block映射存储在内存中)
• NameNode使用EditLog记录HDFS元数据的变化
• FsImage和EditLog文件都存储在NameNode的本地文件系统,位置由配置参
数dfs.namenode.name.dir指定。
• NameNode启动时,从磁盘中读取FsImage和EditLog文件,把EditLog的事务都应用到
FsImage的内存表现上,然后将新版本的FsImage刷新到本地磁盘的新的FsImage文件中。
然后它删除旧的EditLog。这个过程称为检查点(CheckPoint)
• 在名称节点启动的时候,它会将FsImage文件中的内容加载到内存中,之后再执行
EditLog文件中的各项操作,使得内存中的元数据和实际的同步,存在内存中的元数据支
持客户端的读操作。
• 当文件系统客户端(client)进行写操作时,首先把它记录在修改日志中(edit log)