HDFS读写流程详解
请详细描述HDFS的文件读取和写入流程,说明客户端、NameNode和DataNode之间的交互过程。
回答
我还是少年
HDFS读流程:
- 客户端调用
FileSystem.open()向NameNode请求文件元数据 - NameNode返回该文件所有block的DataNode地址列表(含副本位置)
- 客户端根据网络拓扑选择最近的DataNode建立Socket连接
- 客户端向DataNode发送读取请求,数据以packet(64KB)为单位传输
- 读取完成后关闭连接
HDFS写流程:
- 客户端调用
FileSystem.create()向NameNode请求创建文件 - NameNode检查权限和路径合法性,在命名空间创建文件条目(状态为
UNDER_CONSTRUCTION) - NameNode返回第一个block的DataNode列表(按机架感知排序)
- 客户端以packet(64KB)为单元构建数据管道(Pipeline),依次写入DataNode
- 第一个DataNode写入后转发给第二个→第三个(流水线复制)
- 每写满一个block(128MB),关闭该block并申请新的block
- 所有block写完后,客户端通知NameNode关闭文件,NameNode将文件状态改为已完成