名称节点的数据结构
- 在HDSFS中,名称节点(namenode)负责管理分布式文件系统的命名空间(Namespace),保存了两个核心的数据结构,即FsImage和EditLog。
- 名称节点记录了每个文件中各个块所在的数据节点的位置信息。
FsImage用于维护文件系统树以及文件树中所有的文件和文件夹的额元数据
EditLog操作日志中记录了所有针对文件的创建、删除、重命名等操作
FsImage文件
-
FsImage文件包含文件系统中所有目录和文件inode的序列化形式。每个inode是一 个文件或目录的元数据的内部表示,并包含此类信息:文件的复制等级、修改和访问 时间、访问权限、块大小以及组成文件的块。对于目录,则存储修改时间、权限和配 额元数据
- FsImage文件没有记录块存储在哪个数据节点。而是由名称节点把这些映射保留在 内存中,当数据节点加入HDFS集群时,数据节点会把自己所包含的块列表告知给名 称节点,此后会定期执行这种告知操作,以确保名称节点的块映射是最新的
名称节点的启动
- 在名称节点启动的时候,它会将FsImage文件中的内容加载到内存中,之后再执行 EditLog文件中的各项操作,使得内存中的元数据和实际的同步,存在内存中的元数 据支持客户端的读操作。
- 一旦在内存中成功建立文件系统元数据的映射,则创建一个新的FsImage文件和一个 空的EditLog文件
- 名称节点起来之后,HDFS中的更新操作会重新写到EditLog文件中,因为FsImage 文件一般都很大(GB级别的很常见),如果所有的更新操作都往FsImage文件中添 加,这样会导致系统运行的十分缓慢,但是,如果往EditLog文件里面写就不会这样 ,因为EditLog 要小很多。每次执行写操作之后,且在向客户端发送成功代码之前, edits文件都需要同步更新
- 在名称节点运行期间,HDFS的所有更新操作会直接写到EditLog中,长久下去导致文件变大,会使得名称节点启动操作非常慢,而在这段时间内HDFS系统处于 安全模式,一直无法对外提供写操作,影响了用户的使用,所以就会有第二个名称节点(SecondaryNameNode)的使用。
数据节点(DataNode)
- 数据节点是分布式文件系统HDFS的工作节点,负责数据的存储和读取,会根据客 户端或者是名称节点的调度来进行数据的存储和检索,并且向名称节点定期发送自己 所存储的块的列表(
- 每个数据节点中的数据会被保存在各自节点的本地Linux文件系统中