HDFS读、写文件流程

1、读文件流程

HDFS读、写文件流程

  • 第一步:Client 向NameNode 发送数据请求后,寻找数据对应的数据块的位置信息。
  • 第二步:NameNode 返回文件对应的数据块元数据信息,如所属机器、数据块的block_id、数据块的先后顺序等。
  • 第三步:由Client 与DataNode 直接通信,读取各个block 数据块的信息。过程为并行读取,由客户端合并数据。

2、写文件流程

HDFS读、写文件流程

  • 第一步:
    • Client 向NameNode 发送写数据请求后,寻找可以写入的数据块block 信息的机器位置。
    • 若文件过大,写入可能会分成很多block 数据块,实际上是通过一个block 一个block的申请。
    • 若副本为3,则每次请求后返回一个block 的对应的3 个副本的block 的存放位置。
  • 第二步:
    • Client 获取到对应的block 数据块所处的DataNode 节点位置后,Client 开始写操作。
    • Client 先写入第一个DataNode,以数据包package 的方式逐个发送和接收。如64K 大小的package 包大小来发送和接收。
    • 存在多个副本时,package 包的写入是依次进行的。写入到第一个DataNode 后,第一个向第二个DataNode 传输。第二个写完后,由第二个向第三个DataNode 传输package。以此类推。
    • 写完一个block 数据块后,如果还有则反复进行第一步和第二步。
  • 第三步:
    • 待所有的数据块block 均写完后,Client 接收到全部写完的ack 答复,告诉NameNode数据已写完,Client 关闭socket 流。
    • DataNode 也会向NameNode 报告新增block 数据块的信息。