当前位置: 首页 > news >正文

HDFS 读、写流程

一、HDFS 写入文件(上传本地文件到 HDFS,比如hdfs dfs -put

人物: 客户端(你敲命令的终端)、NameNode(管家)、DataNode(三台服务器仓库)

  1. 你执行上传命令,客户端先找 NameNode 管家:我要新建一个文件,行不行?
  2. NameNode 检查路径、权限没问题,在自己的记录簿(edits 日志)写下:这里新建空文件,返回允许写入。
  3. 客户端把你的大文件切成一小段一小段数据包(Packet),准备发给仓库。
  4. HDFS 副本规则 3 份,管家告诉客户端:第一个块发给 hadoop1,副本存 hadoop2、hadoop3。
  5. 流水线传输:数据包先发给 hadoop1,hadoop1 存完立刻转发给 hadoop2,hadoop2 再转发给 hadoop3,三台同时存副本。
  6. 每台存好之后,会反向给客户端发 “确认收到” 的回执包。
  7. 一段数据包三台都存完,再发下一段,循环直到整个文件传完。
  8. 全部数据传完,客户端通知 NameNode:文件上传完毕。管家更新日志,这个文件才算正式存在 HDFS 里。

简单总结写流程:客户端切块 → 问管家权限 → 流水线多节点存 3 副本 → 全部传完告知管家归档。

二、HDFS 读取文件(下载 / 查看hdfs dfs -cat

  1. 客户端想读文件,先找 NameNode 管家:我要读 xx 文件,这个文件的数据块在哪几台机器?
  2. NameNode 翻自己的记录,把所有块对应的三台 DataNode 地址全部发给客户端,优先给离你近、本机有副本的节点(本地优先,少走网络)。
  3. 客户端直接连接对应 DataNode,拉取对应块的数据,全程不用再麻烦 NameNode,管家只负责指路,不传输真实数据。
  4. 一块数据读完,自动连接下一个块的服务器继续读取。
  5. 如果某台 DataNode 连不上、数据损坏,客户端自动换同块其他副本服务器读取,不会报错中断。
  6. 所有块读取拼接完成,关闭连接,读取结束。

简单总结读流程:找管家拿数据块位置 → 直连 DataNode 拿数据 → 坏节点自动换副本。

三、HDFS 存储 Block、上传 Packet、MR 的 Split 三者区分

1. HDFS 底层 Block(物理数据块)

  • 定义:文件上传完成后,持久保存在 DataNode 磁盘的存储单元,Hadoop2.6 默认 64M。
  • 共性:普通读取文件、MR 程序读取,操作的底层 Block 是同一个物理块

两种读取的不同处理逻辑

1)hdfs dfs -cat/ 下载文件 客户端从 NN 获取每个 Block 存放节点,依次读取所有 Block,把数据拼接成完整原始文件展示,仅做数据读取,不会生成计算任务。

2)运行 MapReduce 程序 MR 读取磁盘上同一个 Block,将每一个 Block 封装成 InputSplit 分片,分配独立 MapTask 并行计算,读取后不拼接完整文件,输出中间键值到本地磁盘。

示例:120M 文件,HDFS 生成 2 个 Block(64M+56M)

  • cat 读取:两块拼接,输出完整原文;
  • WordCount:2 个 Block 对应 2 个 Split,启动 2 个 Map 任务统计单词。

2. 上传时 Packet(网络传输小包)

文件put上传阶段专用,客户端把文件切分成小型 Packet 数据包,用于流水线 Pipeline 多副本传输。 Packet 只是传输过程临时拆分,传输完成后会合并成完整 Block 存磁盘,Packet 只负责网络发送,不会影响后续 MR 任务数量。

3. MR 的 InputSplit(计算分片)

仅运行计算程序时临时划分,默认一个 Block 对应一个 Split,每一个 Split 对应一个 MapTask。 Split 是逻辑划分,不会修改磁盘上真实 Block,只用来分配计算数据、决定 Map 任务数量。

核心总结

  1. 磁盘真实存储单元:Block,读文件、跑 MR 共用;
  2. 上传传输临时拆分:Packet,仅上传阶段使用;
  3. 计算逻辑分片:Split,MR 运行时基于 Block 生成,用来分配 Map 任务; Packet、Split 只是过程拆分,底层存储载体统一都是 Block。
http://www.cnnetsun.cn/news/3379458.html

相关文章:

  • DeepSeek思维链显示深度逆向工程:基于v3.2.0源码级分析,解锁未公开的trace_mode参数
  • 告别系统激活困扰!KMS智能激活工具的完整解决方案
  • 基于YOLOv8的安全锥检测系统:从算法原理到工程部署
  • 从零搭建 OPC 一人公司:Python + AI Agent 全栈自动化实战(附完整代码)
  • 129.2026年国家级科研痛点 燃气轮机转子动力学与临界转速精密计算
  • 基于三菱FX2NPLC的锅炉温度控制系统设计231(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_
  • MrFlow:无需训练的扩散模型10倍加速技术解析
  • ISTA 3B随机振动测试是啥,3B测试中的随机振动一定是4h吗
  • YOLOv8-face人脸检测与关键点识别架构深度解析
  • agent面试必备35-AI Agent 核心进阶:4 大常见工具(Tools)
  • Java 30 组技术知识点表格对比
  • 施耐德Unity Pro XL授权管理实战:从虚拟盘到网络浮动许可
  • 数据库多语言存储:从加列到翻译表的五种方案深度解析
  • 意大利语购物场景实战:从15欧元报价到成交的完整表达解析
  • ArkUI 搜索空结果怎么办:中式美食搜不到菜时怎么给同义词、推荐词和清空入口
  • 一键转换视频为WebM:FFmpeg全攻略
  • Hermes Agent实战指南:23分钟掌握智能代理部署与自进化记忆系统
  • C#核心(持续更新中)
  • Vibe Coding的移动端革命:在手机上写代码是一种怎样的体验?
  • OpenCvSharp实战:巧用凸包缺陷分割粘连目标与精确定位
  • AI图像生成提示词工程:从“AI美女 车上好热”看多概念融合技术
  • ACCESS从零到一:构建你的第一个关系型数据库
  • 基于FPGA的以太网ARP协议实现
  • openeuler/compliance:开源合规管理的终极指南与工具集
  • 程序员正在悄悄淘汰的手动注释方式,而顶尖团队已用ChatGPT实现注释覆盖率100%(内部白皮书节选)
  • 多店铺业绩目标完成率自动统计,老板喜欢的日报来了 —— 跨系统数据集成与自动化日报技术测评
  • 物联网云平台是什么?有什么推荐?
  • 免费开源的PDF差异检测工具:5分钟快速上手diff-pdf
  • 深度技术解析:如何高效修复损坏MP4/MOV视频文件的专业指南
  • 多模态AI健康助手:架构、优化与应用实践