一、HDFS读流程

1. client端发起RPC,访问远程Namenode

2. Namenode首先会查询元数据,找到client端访问文件的存储位置的数据块信息

3. Namenode视情况将对应的文件数据块(block)的节点地址全部或部分返回

4. client端收到此数据块(block)对应的节点地址

5. client端会从队列中取出第一个数据块对应的节点地址,从这些节点地址中选取最近的DataNode进行读取文件

6. 读取之后会对这个block进行checksum验证,如验证失败说明数据损坏,client会再次向Namenode发送信息,说明该节点的block损坏,然后从其他节点再次读取数据

7. 如验证通过,读取完当前的block后,关闭与当前的DataNode的链接,从队列中取出下一个block的最佳DataNode

8. 当将此队列的block读取完毕,且文件读取还没有结束,client端会继续向Namenode请求下一批block地址

9. 在文件完全读取后,client端会向Namenode发送完毕的信号,Namenode关闭对应文件

10. 读取结束

    

 二、HDFS写流程

1. client端发起RPC,访问远程Namenode

2. Namenode接收请求后,会检查要创建的文件是否已经存在,创建者是否有权限进行操作,验证通过创建记录,失败即抛出异常

3. 验证通过后,Namenode会确定文件大小以及分块的数量,确定对应节点,并在内部以数据队列的形式管理

4. client端收到地址后,从队列中依次取出节点地址,依次上传数据,通过管道进行自动备份,保证副本数量

5. client端在上传完成第一个数据块后发送完成信息号,再次请求可用DataNode,重复如上写流程

6. 客户端在所有数据上传完成后会向Namenode发送完毕信号,Namenode会给client端返回一个关闭文件信号

7.   写入结束