CodeWalk

HDFS读写流程详解

作者:我还是少年 · 2026-05-30 12:55

请详细描述HDFS的文件读取和写入流程,说明客户端、NameNode和DataNode之间的交互过程。

回答

我还是少年

HDFS读流程:

  1. 客户端调用FileSystem.open()向NameNode请求文件元数据
  2. NameNode返回该文件所有block的DataNode地址列表(含副本位置)
  3. 客户端根据网络拓扑选择最近的DataNode建立Socket连接
  4. 客户端向DataNode发送读取请求,数据以packet(64KB)为单位传输
  5. 读取完成后关闭连接

HDFS写流程:

  1. 客户端调用FileSystem.create()向NameNode请求创建文件
  2. NameNode检查权限和路径合法性,在命名空间创建文件条目(状态为UNDER_CONSTRUCTION
  3. NameNode返回第一个block的DataNode列表(按机架感知排序)
  4. 客户端以packet(64KB)为单元构建数据管道(Pipeline),依次写入DataNode
  5. 第一个DataNode写入后转发给第二个→第三个(流水线复制
  6. 每写满一个block(128MB),关闭该block并申请新的block
  7. 所有block写完后,客户端通知NameNode关闭文件,NameNode将文件状态改为已完成