al+大数据每日学习笔记35

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遵循一次写入、多次读取模型,仅支持文件追加,不支持随机修改,适配大数据批量处理场景。

相关推荐
泛联新安4 小时前
软件定义汽车时代,如何让AI研发“可信”?——泛联新安构建汽车企业级可信AI体系的落地路径
大数据·人工智能·安全·网络安全·汽车·漏洞挖掘·代码安全
杨云龙UP4 小时前
TDengine 3.4.2.8 Community 三节点三副本生产集群部署实战(DNode/MNode/taosAdapter/Explorer)
大数据·linux·运维·数据库·tdengine·时序库
by209995 小时前
从结构体到对象:正式学习C++类的骨架、封装与this指针
c++·经验分享·学习
乌暮5 小时前
深入理解 Java 泛型:把「万能盒子」用对、用稳
java·开发语言·后端·学习
SelectDB技术团队5 小时前
一条日志两套引擎的账:把 Elasticsearch 检索与分析合并到同一份数据的落地写法
大数据·数据库·elasticsearch·搜索引擎·全文检索·日志·apache doris
大大大大晴天6 小时前
每天认识一个组件:远端数据服务Apache Celeborn
大数据
小雪崩6 小时前
嵌入式学习 day60:ARM汇编——触摸屏与SPI
汇编·arm开发·学习
幂律智能6 小时前
海外业务不同,合同系统该怎么建?
大数据·人工智能
Leo.yuan6 小时前
数据开发即质量检测:FineDataLink 5.0 在生产数据链路中的一体化实践
大数据
哲霖软件7 小时前
非标机械设备公司怎么做信息化?破解通用ERP水土不服难题
大数据·运维