NameNode

    HDFS采用Master/Slave架构。NameNode就是HDFS的Master架构。HDFS系统包括一个NameNode组件

    ·负责HDFS文件系统的名称空间(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)








猜你喜欢

转载自blog.csdn.net/HYN205/article/details/80714120