HDFS(Hadoop Distributed File System)的读写流程设计旨在高效处理大规模数据,以下是其核心步骤:
HDFS 写流程
-
客户端发起请求
客户端向NameNode请求上传文件,NameNode检查目标文件是否存在及权限,若通过则在元数据中创建文件记录。 -
数据分块与副本分配
NameNode返回可用的DataNode列表(按机架感知策略选择),用于存储数据块及其副本(默认3个副本)。 -
建立数据传输管道(Pipeline)
客户端将数据切分为块(默认128MB),按NameNode返回的DataNode列表建立传输管道。例如,假设DataNode顺序为DN1、DN2、DN3,客户端将数据发送给DN1,DN1依次传输给DN2,DN2再传给DN3,形成流水线。 -
数据写入与确认
- 数据被分成多个数据包(Packet,通常64KB),客户端逐包发送至DN1。
- 每个DataNode接收数据后缓存到本地,并异步转发到下一个节点。
- 所有DataNode写入成功后,逐级返回确认(ACK)至客户端。
-
完成写入
客户端通知NameNode写入完成,NameNode提交元数据变更。若写入中途某DataNode故障,NameNode会重新分配节点,客户端重传数据。
HDFS 读流程
-
客户端发起请求
客户端向NameNode请求文件位置,NameNode返回文件块列表及每个块所在的DataNode地址(按网络拓扑排序,优先就近读取)。 -
并行读取数据块
- 客户端直接连接最近的DataNode读取数据块。
- 多个数据块可并行读取,提升吞吐量。
-
数据校验与容错
- 客户端验证数据校验和。若校验失败,从其他副本重新读取。
- 若某个DataNode不可用,客户端自动切换到其他副本节点。
-
组合数据块
客户端将按顺序接收的数据块合并为完整文件。
关键设计特点
- 避免NameNode瓶颈:数据读写不经过NameNode,仅由客户端与DataNode直接交互。
- 流水线复制:写入时通过管道同步复制副本,减少网络开销。
- 机架感知:副本分布在多个机架,兼顾读取效率与容灾。
- 数据校验:通过校验和确保数据完整性。
示例场景
- 写入文件:用户上传200MB文件,被分为两个块(128MB+72MB),每个块复制到3个DataNode,客户端通过管道高效传输。
- 读取文件:用户下载时,从最近的DataNode并行读取两个块,合并后得到完整文件。
通过上述流程,HDFS实现了高吞吐量、高容错性的大数据存储能力。
9930

被折叠的 条评论
为什么被折叠?



