HDFS(分布式文件系统)是Hadoop核心组件,专为大规模数据存储设计。它将文件切分成多个数据块(默认256MB),分布式存储在集群的多个节点上,并通过冗余复制(默认3副本)保证数据可靠性。整体架构图如下:
NameNode
NameNode是HDFS的主节点,负责管理文件系统的命名空间(Namespace)和客户端对文件的访问。它维护着整个文件系统的元数据,包括文件和目录的层次结构、文件与数据块的映射关系、每个文件的数据块副本存储位置等。
核心职责
维护文件系统的命名空间(文件、目录、块的元数据)。
管理客户端对文件的读/写请求。
维护数据块与DataNode之间的映射关系。
处理DataNode的注册和心跳。
管理文件系统的命名空间和访问控制。
协调数据块的复制和均衡操作。
JournalNode 集群
存储NameNode的编辑日志(EditLog),确保元数据的一致性和持久性。
核心职责
接收Active NameNode写入的EditLog。
提供Standby NameNode读取EditLog进行状态同步。
通常部署奇数个节点(如3个)以支持过半写入。
即使Active NameNode故障,EditLog仍然可用。
Checkpoint
主要用于定期合并编辑日志(EditLog)到文件系统镜像(FsImage)中,以减少NameNode重启时的恢复时间。
DataNode
DataNode是HDFS的数据节点,负责管理存储在其上的实际数据,并定期向NameNode发送心跳和数据块报告。
核心职责
存储和管理数据块(Block)。
执行客户端的数据读写请求。
定期向NameNode发送心跳和数据块状态报告。
在NameNode的指导下进行数据块的复制。
参与数据均衡操作。
处理数据块的校验和修复。
ZooKeeper 集群
协调服务,用于Leader选举和状态同步。
核心职责
协助ZKFC进行故障转移决策。
维护集群状态信息。
提供分布式协调能力。
ZKFC (ZooKeeper Failover Controller)
故障控制器,每个NameNode节点都有一个ZKFC进程。
核心职责
监控NameNode的健康状态。
定期检查NameNode是否正常运行。
当检测到Active节点故障时,自动触发故障转移。
管理NameNode在ZooKeeper中的注册和会话。