HDFS 读、写流程

发布时间:2026/7/14 19:10:55

HDFS 读、写流程 一、HDFS 写入文件上传本地文件到 HDFS比如hdfs dfs -put人物 客户端你敲命令的终端、NameNode管家、DataNode三台服务器仓库你执行上传命令客户端先找 NameNode 管家我要新建一个文件行不行NameNode 检查路径、权限没问题在自己的记录簿edits 日志写下这里新建空文件返回允许写入。客户端把你的大文件切成一小段一小段数据包Packet准备发给仓库。HDFS 副本规则 3 份管家告诉客户端第一个块发给 hadoop1副本存 hadoop2、hadoop3。流水线传输数据包先发给 hadoop1hadoop1 存完立刻转发给 hadoop2hadoop2 再转发给 hadoop3三台同时存副本。每台存好之后会反向给客户端发 “确认收到” 的回执包。一段数据包三台都存完再发下一段循环直到整个文件传完。全部数据传完客户端通知 NameNode文件上传完毕。管家更新日志这个文件才算正式存在 HDFS 里。简单总结写流程客户端切块 → 问管家权限 → 流水线多节点存 3 副本 → 全部传完告知管家归档。二、HDFS 读取文件下载 / 查看hdfs dfs -cat客户端想读文件先找 NameNode 管家我要读 xx 文件这个文件的数据块在哪几台机器NameNode 翻自己的记录把所有块对应的三台 DataNode 地址全部发给客户端优先给离你近、本机有副本的节点本地优先少走网络。客户端直接连接对应 DataNode拉取对应块的数据全程不用再麻烦 NameNode管家只负责指路不传输真实数据。一块数据读完自动连接下一个块的服务器继续读取。如果某台 DataNode 连不上、数据损坏客户端自动换同块其他副本服务器读取不会报错中断。所有块读取拼接完成关闭连接读取结束。简单总结读流程找管家拿数据块位置 → 直连 DataNode 拿数据 → 坏节点自动换副本。三、HDFS 存储 Block、上传 Packet、MR 的 Split 三者区分1. HDFS 底层 Block物理数据块定义文件上传完成后持久保存在 DataNode 磁盘的存储单元Hadoop2.6 默认 64M。共性普通读取文件、MR 程序读取操作的底层 Block 是同一个物理块。两种读取的不同处理逻辑1hdfs dfs -cat/ 下载文件 客户端从 NN 获取每个 Block 存放节点依次读取所有 Block把数据拼接成完整原始文件展示仅做数据读取不会生成计算任务。2运行 MapReduce 程序 MR 读取磁盘上同一个 Block将每一个 Block 封装成 InputSplit 分片分配独立 MapTask 并行计算读取后不拼接完整文件输出中间键值到本地磁盘。示例120M 文件HDFS 生成 2 个 Block64M56Mcat 读取两块拼接输出完整原文WordCount2 个 Block 对应 2 个 Split启动 2 个 Map 任务统计单词。2. 上传时 Packet网络传输小包文件put上传阶段专用客户端把文件切分成小型 Packet 数据包用于流水线 Pipeline 多副本传输。 Packet 只是传输过程临时拆分传输完成后会合并成完整 Block 存磁盘Packet 只负责网络发送不会影响后续 MR 任务数量。3. MR 的 InputSplit计算分片仅运行计算程序时临时划分默认一个 Block 对应一个 Split每一个 Split 对应一个 MapTask。 Split 是逻辑划分不会修改磁盘上真实 Block只用来分配计算数据、决定 Map 任务数量。核心总结磁盘真实存储单元Block读文件、跑 MR 共用上传传输临时拆分Packet仅上传阶段使用计算逻辑分片SplitMR 运行时基于 Block 生成用来分配 Map 任务 Packet、Split 只是过程拆分底层存储载体统一都是 Block。

相关新闻