一、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. 写入结束