本文是大数据系列第 7 篇,深入理解 HDFS 的架构设计与读写原理,是后续 HDFS 实操的理论基础。

完整图文版:CSDN 原文 | 掘金

HDFS 架构

HDFS(Hadoop Distributed File System)采用 Master/Slave 架构:

角色说明
NameNode管理命名空间,维护 Block 到 DataNode 的映射,处理 Client 的元数据请求
DataNode存储实际数据 Block,定期向 NameNode 发送心跳和块报告
Secondary NameNode定期合并 EditLog 和 FsImage,减轻 NameNode 压力(非热备)
Client上传时切分文件,从 NameNode 获取位置信息,直接与 DataNode 交互

Block 机制

  • Hadoop 2.x 默认 Block 大小:128MB(Hadoop 1.x 为 64MB)
  • 每个 Block 默认 3 个副本,分布在不同 DataNode 上
  • 超过 128MB 的大文件会被切分为多个 Block 分散存储

HDFS 特性

特性说明
高容错3 副本冗余,DataNode 故障自动恢复
高吞吐顺序读写,适合大文件批处理
大文件友好适合 TB/PB 级数据
不适合低延迟随机读写、大量小文件
写模型Write-once-read-many,支持 append,不支持随机修改

读流程

  1. Client 向 NameNode 发送读取请求(文件路径)
  2. NameNode 返回 Block 列表及各 Block 的 DataNode 位置
  3. Client 按 Block 就近选择 DataNode(优先本机 → 同机架 → 跨机架)
  4. Client 以 Packet 为单位接收数据,本地缓存后写入目标文件

写流程

  1. Client 向 NameNode 申请写入(提供文件路径和 Block 大小)
  2. NameNode 分配 DataNode 列表(dn1, dn2, dn3),返回给 Client
  3. Client 连接 dn1,建立 Pipeline(dn1 → dn2 → dn3)
  4. Client 将 Block 切分为 Packet 发送给 dn1,dn1 转发给 dn2,依次复制
  5. 所有副本写入完成后,dn3 向 dn2 确认,dn2 向 dn1 确认,dn1 向 Client 确认
  6. Client 通知 NameNode 写入完成,更新元数据

常用命令速查

hdfs dfs -ls /               # 列出根目录
hdfs dfs -mkdir -p /a/b      # 递归创建目录
hdfs dfs -put local.txt /    # 上传文件
hdfs dfs -get /test.txt .    # 下载文件
hdfs dfs -cat /test.txt      # 查看文件内容
hdfs dfs -cp /a /b           # 复制
hdfs dfs -mv /a /b           # 移动/重命名
hdfs dfs -rm /test.txt       # 删除文件
hdfs dfs -rmdir /dir         # 删除空目录
hdfs dfs -rm -r /dir         # 递归删除目录

下一篇:大数据-08 HDFS 命令行实操