2026年9月9日
Hadoop中HDFS 架构与读写流程总结
一、HDFS 概述
HDFS(Hadoop Distributed File System)是Apache Hadoop生态的核心分布式文件系统,基于廉价商用硬件设计,具备高容错、高吞吐、可横向扩展、一次写入多次读取的核心特性。区别于传统本地文件系统,HDFS专为海量大数据集的流式读写、批量处理场景优化,放松了部分POSIX标准,极大提升了大数据场景下的数据读写性能,是大数据存储的基石组件。
HDFS 核心设计理念:移动计算比移动数据更划算。大数据场景中数据集体量极大,优先将计算任务调度至数据所在节点执行,减少网络传输开销,提升集群整体吞吐量。
二、HDFS 主从架构核心角色
HDFS 采用经典 Master/Slave 主从架构,集群核心分为三大角色,各司其职、解耦运行,从根本上保障集群稳定性与并发能力:
1. NameNode(主节点)
集群管理核心,仅负责维护文件元数据 (目录结构、文件名、权限、数据块ID、块对应DataNode节点地址、副本数),不存储任何真实业务数据。核心职责:处理客户端读写请求、校验操作权限、分配数据存储节点、维护文件块与节点的映射关系、记录集群元数据变更日志。
2. DataNode(从节点)
集群数据存储节点,是HDFS真正存储数据的载体。负责存储文件拆分后的Block数据块及副本,响应客户端读写请求,执行磁盘数据读写、数据校验;同时定时向NameNode发送心跳机制与块报告,上报自身运行状态与存储的所有数据块信息。
3. Client(客户端)
用户操作HDFS的入口,支持Shell命令、Java API等多种交互方式。核心功能:与NameNode交互获取元数据、与DataNode交互完成数据传输、文件分块、数据校验、缓存读写数据,是连接用户与HDFS集群的桥梁。
三、HDFS 文件写入流程(标准8步)
本文以本地文件 /root/gateway/records.txt 上传至HDFS集群为例,结合原理图梳理完整写入流程,同时补充底层核心机制:
1、客户端通过 DistributedFileSystem 模块向NameNode发起文件上传请求,请求上传 /root/gateway/records.txt;
2、NameNode执行前置校验,检查客户端权限、目标文件是否存在、父目录是否合法,校验通过后响应客户端允许上传;
3、客户端向NameNode请求第一个Block(默认128M)的存储节点地址;
4、NameNode基于机架感知策略,返回DN1、DN2、DN3三个可用DataNode节点,用于存储3副本数据;
5、客户端通过 FSDataOutputStream 发起连接请求,DN1、DN2、DN3逐级调用,搭建流水线传输通道;
6、三个DataNode节点逐级向上应答客户端,确认传输通道搭建成功;
7、客户端将本地数据缓存至内存,以64KB Packet为最小传输单元推送数据,通过流水线逐级同步至三个节点,同时维护应答队列保障数据可靠;
8、单个Block传输完成后,重复上述步骤上传后续数据块,所有Block写入完毕后,客户端通知NameNode完成最终元数据落地,写入流程结束。
四、写入核心底层机制
1. Pipeline 流水线副本机制
HDFS写入不采用客户端多节点分别推送的模式,而是流水线同步模式。客户端仅向首个节点DN1传输数据,DN1接收Packet后立即同步至DN2,DN2同步至DN3。该机制大幅节省客户端带宽,提升多副本写入效率,是HDFS高吞吐的核心保障。
2. 机架感知与副本放置策略
副本放置直接决定集群可靠性与读写性能,默认3副本策略兼顾容错与效率:
-
第一副本:客户端所在节点,客户端集群外则随机选取节点;
-
第二副本:跨机架的随机节点,避免单机架故障导致数据丢失;
-
第三副本:与第二副本同机架的不同节点,减少跨机架网络传输损耗。
该策略仅占用两个机架资源,在不降低数据可靠性的前提下,有效提升写入性能。
五、HDFS 文件读取流程(标准7步)
以读取HDFS文件 /car.txt 下载至本地 /root/car.txt 为例,完整读取流程如下:
1、客户端向NameNode发起请求,申请下载HDFS的 /car.txt 文件;
2、NameNode查询元数据,返回文件所有数据块列表、对应DataNode节点地址信息;
3、客户端遵循就近原则,选择最优DataNode节点,请求读取第一个数据块blk1;
4、目标DataNode从本地磁盘读取blk1数据,以Packet为单位流式传输给客户端;
5、blk1数据读取完成后,客户端继续请求读取第二个数据块blk2;
6、对应DataNode完成blk2数据传输,客户端接收并缓存数据;
7、所有数据块读取完毕,客户端关闭输入流,整合数据生成完整本地文件,读取流程结束。
六、读取核心机制与容错策略
-
就近读取策略:优先同机架节点、其次同机房节点、最后跨机房节点,最小化网络延迟;
-
数据完整性校验:以64KB Packet为传输单元,自带校验和,客户端接收数据后自动校验,避免网络、磁盘故障导致的数据损坏;
-
自动容错重试:单个DataNode读取失败时,客户端自动切换至该数据块的副本节点继续读取,全程无感知故障。
七、读写流程核心总结
1、NameNode全程不参与真实数据传输,仅处理元数据交互,规避主节点性能瓶颈;
2、读写数据最小传输单元为Packet(64KB),文件存储分块单元为Block(128MB);
3、写流程核心是流水线副本同步,读流程核心是就近节点择优读取、副本容错;
4、HDFS遵循一次写入、多次读取模型,仅支持文件追加,不支持随机修改,适配大数据批量处理场景。

