HDFS架构刨析
- 概述
- HDFS架构图
- 整体概述
- 主角色:namenode
- fsimage内存元数据镜像文件
- edits log(Journal)编辑日志
- 从角色:datanode
- 主角色辅助角色:secondarynamenode
- 重要特性
- 主从架构
- 分块存储机制
- 副本机制
- namespace
- 元数据管理
- 数据块存储
概述
- HDFS是Hadoop distribute file system的简称,意味:Hadoop分布式文件系统
- HDFS是Hadoop核心组件之一,作为大数据生态圈最底层的分布式存储服务而存在
- HDFS解决的问题就是大数据如何存储,它是横跨在多台计算机上的文件存储系统并且具有高度的容错能力
HDFS架构图
- HDFS集群遵循主从架构(master/slave)。通常包括一个主节点和多个从节点
- 在内部,文件分块存储,每个块根据复制因子存储在不同的从节点计算机上形成备份
- 主节点存储和管理文件系统namespace,即有关文件块的信息,例如块位置,权限等;从节点存储文件的数据块
- 主从各司其职,相互配合,共同对外提供文件分布式存储服务。当然内部细节对用户来说是透明的
整体概述
- HDFS遵循主从架构
- namenode是主节点,负责存储和管理文件系统元数据信息,包括namespace目录结构,文件块位置信息等
- datanode是从节点,负责存储文件具体的数据块
- 两种角色各司其职,共同协调完成分布式的文件存储服务
- secondarynamenode是主角色的辅助角色,帮助主角色进行元数据的合并
主角色:namenode
- namenode是Hadoop分布式系统的核心,架构中的主角色
- namenode维护和管理文件系统元数据,包括名称空间目录树结构,文件和块的位置信息,访问权限等信息
- 基于此,namenode成为访问HDFS的唯一入口
- namenode内部通过内存和磁盘文件两种方式管理元数据
- 其中磁盘上的元数据文件包括simage内存元数据镜像文件和edits log(Journal)编辑日志
- 在Hadoop2之前,namenode是单点故障。Hadoop2中引入高可用性。Hadoop集群体系结构允许在集群中以热备配置运行两个或多个namenode
fsimage内存元数据镜像文件
fsimage 是 Hadoop 分布式文件系统(HDFS)的内存元数据镜像文件。它包含了关于文件系统命名空间、文件块信息、权限和属性等元数据的详细记录。
fsimage 文件是 HDFS 中重要的元数据文件,用于恢复文件系统的状态和内容。当 HDFS 启动时,它会读取 fsimage 文件并将其中的元数据加载到内存中,以便提供文件系统的元数据服务。当文件系统发生变化时(如创建、删除或修改文件),HDFS 会将这些变化记录在编辑日志(edits log)中,然后可以根据编辑日志和当前的 fsimage 文件来恢复文件系统的状态。
由于 fsimage 文件是完整的元数据镜像,它可以在文件系统启动时快速加载到内存,从而加快了文件系统的启动速度。此外,fsimage 文件还可以进行压缩来减小文件大小,并且可以定期生成检查点,以保证文件系统的一致性和可靠性。
需要注意的是,fsimage 文件只包含元数据信息,不包含实际的文件数据。实际的文件数据存储在 HDFS 的数据块中,而不是 fsimage 文件中。
总结起来,fsimage 文件是 HDFS 中的内存元数据镜像文件,用于恢复文件系统的状态和内容。通过读取 fsimage 文件和编辑日志,HDFS 可以在启动时加载元数据并提供文件系统的服务。
edits log(Journal)编辑日志
edits log(也称为编辑日志)是 Hadoop 分布式文件系统(HDFS)中的一种日志文件,用于记录对文件系统的变更操作。
在 HDFS 中,当发生文件系统的变更操作时,例如创建、删除、重命名文件或目录,以及修改文件的权限或属性,这些变更将会被记录在 edits log 中。edits log 记录了文件系统的逻辑操作,而不是实际的数据块内容。
edits log 具有持久性和顺序性的特点。它是一个追加写日志文件,新的变更操作将会被追加到日志文件的末尾。这种顺序写入的方式使得 HDFS 可以快速写入变更操作,同时保证了操作的顺序性。
通过记录变更操作在 edits log 中,HDFS 可以保证数据的一致性和可恢复性。当文件系统启动时,HDFS 会加载 fsimage 文件和最后一个 edits log 文件,并根据其中的操作重放文件系统的变更过程,从而恢复文件系统的状态。这个过程被称为“日志回放”(log replay)。
在运行过程中,HDFS 会定期将 edits log 合并成较大的文件,并创建一个新的空的 edits log 文件,以减少日志文件的数量和提高效率。
总结起来,edits log 是 HDFS 中的一种日志文件,用于记录对文件系统的变更操作。它具有持久性和顺序性特点,通过日志回放,HDFS 可以恢复文件系统的状态并保证数据的一致性和可恢复性。
从角色:datanode
- datanode是Hadoop HDFS中的从角色,负责具体的数据块存储
- datanode的数量决定了HDFS集群的整体数据存储能力,通过和namenode配合维护着数据块
主角色辅助角色:secondarynamenode
- 除了datanode和namenode之外,还有lingerie守护进程,它称为secondarynamenode。充当namenode的辅助节点,但不能替代namenode
- 当namenode启动时,namenode合并Fsimage和edits log文件以还原当前文件系统名称空间。如果edits log过大不利于加载,secondarynamonode就辅助namenode从namenode下载Fsimage文件和edits log文件进行合并
重要特性
主从架构
- HDFS采用master/slave架构。一般一个HDFS集群是有一个namenode和一定数目的datanode组成
- namonode是HDFS主角点,datanode是HDFS从节点,两种角色各司其职,共同协调完成分布式的文件存储服务
分块存储机制
- HDFS中的文件在物理上是分块存储(block)的,快的大小可以通过配置参数来规定,参数位于hdfs-default.xml中:dfs:blocksize,默认大小是128m
副本机制
- 文件的所有block都会有副本。每个文件的block大小(dfs.blocksize)和副本系数(dfs.replication)都是可配置的。副本系数可以在文件创建的时候指定,也可以在之后通过命令改变
- 默认dfs.replication的值是3,也就是会额外再复制2份,连同本身共3份副本
namespace
- HDFS支持传统的层次型文件组织结构。用户可以创建目录然后将文件保存在这些目录里。文件系统名字空间的层次结构和大多数现有的文件系统类似:用户可以创建,删除,移动或重命名文件
- namenode负责维护文件系统的namespace名称空间,任何对文件系统名称空间或属性的修改都将被namenode记录下来
- HDFS会给客户端提供一个统一的抽象目录树,客户端通过路径来访问文件,例如:hdfs://namenode:port/dir-a/dir-b/dir-c/file-data
元数据管理
在HDFS中,namenode管理的元数据具有两种类型
- 文件自身属性
- 文件名称,权限,修改时间,文件大小,复制因子,数据块大小
- 文件块位置映射信息
- 记录文件块和datanode之间的映射信息,即哪个块位于哪个节点上
数据块存储
- 文件的各个block的具体存储管理由datanode节点承担。每一个block都可以在多个datanode上存储