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

HDFS(Hadoop 分布式文件系统)知识点梳理

一、HDFS 基础认知

1. 定义与起源

- 起源:源自 Google 2003 年发表的 GFS(Google File System)论文,是 GFS 的开源克隆版。

- 定位:运行在普通低成本机器上的分布式文件系统,自带容错机制,提供高性能存储服务。

 2. 核心优缺点

| 类别   | 具体特性                                                                 |

| 优点   | 1. 高容错:数据自动多副本存储,副本丢失可自动恢复<br>2. 适配批量处理:移动计算而非数据,暴露数据位置给计算框架<br>3. 支持大数据:兼容 TB/PB 级数据、百万级文件、10K+ 节点<br>4. 流式访问:一次写入、多次读取,保证数据一致性<br>5. 低成本:基于廉价机器构建,多副本保障可靠性 |

| 缺点   | 1. 低延迟差:无法满足毫秒级响应(需权衡高吞吐)<br>2. 小文件处理弱:大量小文件占用 NameNode 内存,寻道时间超读取时间<br>3. 写入不灵活:不支持并发写入,仅允许单个 Writer,仅支持追加写入 |

 二、HDFS 核心设计

1. 数据块(Block)设计

- 默认大小:64MB(可配置),文件不足 64MB 时单独占一个块。

- 划分原则:平衡数据传输时间与磁盘寻道时间。

- 存储方式:文件被切分为多个块,默认每个块存 3 个副本,分散在不同节点。

2. 核心设计思想

- 分而治之:海量数据拆分到多节点存储,通过分布式架构提升容量、增加吞吐。

- 取舍逻辑:牺牲低延迟、随机修改等灵活性,优先保障高吞吐、高可靠、高扩展。

三、HDFS 架构组成(主从架构)

| 组件                | 角色       | 核心功能                                                                 |

| Active NameNode     | 主节点(唯一) | 1. 管理文件系统命名空间<br>2. 维护数据块与节点的映射关系<br>3. 配置副本策略<br>4. 处理客户端读写请求 |

| Standby NameNode    | 主节点热备 | 1. 定期合并 fsimage(文件系统镜像)和 editslog(操作日志)<br>2. 推送合并结果给 Active NameNode<br>3. Active 故障时快速切换为主节点 |

| DataNode            | 从节点(多个) | 1. 存储实际数据块<br>2. 执行数据块的读写操作<br>3. 定期向 NameNode 发送心跳报告状态 |

| Client              | 客户端     | 1. 写入时切分文件<br>2. 与 NameNode 交互获取文件位置<br>3. 与 DataNode 直接读写数据 |

 四、HDFS 核心流程

1. 写流程(客户端写入文件)

1. Client 向 NameNode 发送“创建文件”请求,NameNode 校验后返回可用 DataNode 列表。

2. Client 将文件切分为数据块,按顺序向第一个 DataNode 写入数据。

3. 数据通过“DataNode 管道”自动复制到其他副本节点(默认 3 个)。

4. 每个 DataNode 写入完成后向 Client 返回确认(Ack)。

5. 所有数据块写入完成,Client 向 NameNode 发送“完成”请求,更新元数据。

2. 读流程(客户端读取文件)

1. Client 向 NameNode 发送“打开文件”请求,NameNode 返回数据块及存储节点信息。

2. Client 根据节点信息,向距离最近的 DataNode 读取数据块。

3. 所有数据块读取完成后,Client 在本地拼接成完整文件,关闭输入流。

五、HDFS 关键策略

1. 副本放置策略

- 副本 1:存储在与 Client 相同节点(若 Client 不在集群内,则随机选一个节点)。

- 副本 2:存储在与副本 1 不同机架的节点(提升跨机架容错性)。

- 副本 3:存储在与副本 2 相同机架的其他节点(平衡性能与容错)。

- 更多副本:随机分配到集群节点。

2. 可靠性保障策略

| 故障场景     | 应对措施                                                                 |

| 文件损坏     | 通过 CRC32 校验检测损坏数据,自动用其他副本替换受损块。|

| DataNode 失效 | DataNode 定期向 NameNode 发送心跳,超时未响应则标记为失效,触发副本补全。|

| NameNode 失效 | 依赖 FSImage 和 EditsLog 实现元数据恢复;通过 Standby NameNode 实现主备实时切换。 |

3. 小文件处理问题

- 核心痛点:每个小文件的元数据(约 150Byte)占用 NameNode 内存,大量小文件会耗尽内存;且寻道时间长,访问效率低。

- 示例:1 亿个 10K 小文件仅占 1TB 存储,却需消耗 20GB NameNode 内存。

六、HDFS 访问与管理

1. 常用 Shell 命令

| 功能                | 命令示例                                      |

| 本地文件上传到 HDFS | `hadoop fs -copyFromLocal /local/data /hdfs/data` |

| HDFS 文件下载到本地 | `hadoop fs -copyToLocal /hdfs/data /local/data` |

| 创建 HDFS 目录      | `hadoop fs -mkdir /hdfs/data`                 |

| 删除 HDFS 文件/目录 | `hadoop fs -rmr /hdfs/data`                   |

| 查看 HDFS 目录内容  | `hadoop fs -ls /hdfs/data`                    |

2. 集群管理脚本(`sbin` 目录下)

- 启动全集群:`start-all.sh`

- 停止全集群:`stop-all.sh`

- 启动 HDFS:`start-dfs.sh`

- 单独启动 NameNode:`hadoop-deamon.sh start namenode`

- 单独启动 DataNode:`hadoop-deamons.sh start datanode`

 3. 节点增删操作

- 添加 DataNode:

  1. 复制现有 DataNode 的安装包及配置文件到新节点。

  2. 执行 `sbin/hadoop-deamon.sh start datanode` 启动新节点。

- 删除失效 DataNode:

  1. 在 NameNode 配置文件 `dfs.hosts.exclude` 中添加待删除节点的 IP/主机名。

  2. 执行 `bin/hadoop dfsadmin -refreshNodes` 使配置生效。

4. Java API 核心用法

核心类(均来自 `org.apache.hadoop.fs` 包):

- `Configuration`:封装 HDFS 配置信息。

- `FileSystem`:文件系统操作核心类,通过 `FileSystem.get(config)` 获取实例。

- `FSDataInputStream`/`FSDataOutputStream`:HDFS 文件输入/输出流,分别通过 `open()` 和 `create()` 方法获取。

七、HDFS 拓扑结构

- 集群节点按 机架(Rack)划分,每个机架通常包含 16 - 64 个节点。

- NameNode、Secondary NameNode、Client 等部署在独立节点,DataNode 分布式部署在各机架节点,通过交换机连接,形成层级网络结构,兼顾性能与容错。


文章转载自:

http://DThY0ReY.znknj.cn
http://MIJwdueB.znknj.cn
http://PkDZC5mH.znknj.cn
http://5GvbcESS.znknj.cn
http://2mkkMIEQ.znknj.cn
http://pFr5gRmK.znknj.cn
http://oJZ7Vodw.znknj.cn
http://DRPaJchk.znknj.cn
http://amxYxetB.znknj.cn
http://A7dRbKeL.znknj.cn
http://wGALEVzj.znknj.cn
http://D1akFZXP.znknj.cn
http://qbOPKKWo.znknj.cn
http://jI2eloXW.znknj.cn
http://jOiHQ9o2.znknj.cn
http://7pZY5J8B.znknj.cn
http://19oHqg0j.znknj.cn
http://1Kf4bnzZ.znknj.cn
http://qLTqfwMa.znknj.cn
http://K7h6YKyO.znknj.cn
http://OYIA3ADE.znknj.cn
http://sNNfszMf.znknj.cn
http://srqu9y7K.znknj.cn
http://8sbPNkeZ.znknj.cn
http://Gs3ANeI3.znknj.cn
http://iOSOlsJH.znknj.cn
http://TBNXSfDe.znknj.cn
http://MbPQd4TY.znknj.cn
http://Yc7zoC2D.znknj.cn
http://uOKt4YpZ.znknj.cn
http://www.dtcms.com/a/378915.html

相关文章:

  • AI幻觉的罪魁祸首
  • JVM 基础
  • 计算智能的概念和其算法的主要算法类型
  • leetcode25(有效的字母异位词)
  • [Windows] FileOptimizer v17.1.0_一款文件批量压缩工具
  • 淘宝/天猫按图搜索(拍立淘)item_search_img API接口实战指南
  • Java优选算法——二分查找
  • leetcode380:RandomizedSet - O(1)时间插入删除和获取随机元素(数组+哈希表的巧妙结合)
  • 经典蓝牙的 BR(Basic Rate(基础速率))
  • 牛客周赛 Round 108题解
  • Rocky9.0去堆叠双发arp(支持“ARP 广播双发”)
  • 「京墨」1.15.0 诗词、成语、对联、句子、诗歌…
  • AWS TechFest 2025: 风险模型的转变、流程设计的转型、生成式 AI 从实验走向实施的三大关键要素、评估生成式 AI 用例的适配度
  • 【Blender】二次元人物制作【二】:五官的制作
  • MinIO集群部署详细步骤(高性能的分布式对象存储系统)
  • 带地图的 RAG:多模态 + 地理空间 在 Elasticsearch 中
  • 使用 Spring AI Alibaba Graph 实现工作流
  • 【Debug日志 | DDP 下 BatchNorm 统计失真】
  • linux C 语言开发 (六) 程序的编辑和编译(vim、gcc)
  • 综合文化信息管理系统|基于java和小程序的综合文化信息管理系统设计与实现(源码+数据库+文档)
  • 20250911_10.1.11.46车辆定位aidata-01_Apache Doris分布式数据库全量备份(本地+异地)Python脚本
  • DenseNet网络
  • 2025胶水分装机服务商技术解析:聚焦高精度、智能化应用
  • Drawnix白板本地部署指南:cpolar实现远程创意协作
  • leetcode189.轮转数组
  • SPI设备驱动
  • 第七节,探索 ​​CSS 的高级特性、复杂布局技巧、性能优化以及与现代前端工作流的整合(二)
  • O3.2 opencv高阶
  • c语言,识别到黑色就自动开枪,4399单击游戏狙击战场,源码分享,豆包ai出品
  • Spring Boot 原理与性能优化实战