一、文件的写流程
- 启动服务端NN,DN进程,提供一个分布式文件系统客户端
- 由客户端向NN发送请求,请求上传一个文件,NN对请求进行合法性检查(权限,路径是否合法,路径是否已经存在)
- 如果合法,NN响应客户端允许上传
- 客户端根据自己设置的块大小,读取文件中第一块的内容,请求NN分配DN列表
- NN参考客户端上传的文件的副本数,根据机架感知,返回对应的DN列表
- 客户端会请求举例最近的DN节点,再由DN列表中的每个DN节点都请求举例最近的DN节点,建立数据传输通道
- 通道建立完成,客户端将第一块的数据,封装为一个个packet,发送到通道的下一个节点,通道的每一个DN节点在收到packet后,进行校验,检验合法,罗盘存储,将packet发送到下一个DN节点,回复客户端ack确认消息
- 第一个块传输完成后,DN向NN上报块的消息,只要有一个DN节点上报块信息,NN就认为这个块已经传输完成,通道关闭,
开始下一个块的传输 - 下一个块依次按照④-⑧流程传输
- 所有的块传输完成后,NN响应客户端传输完成,客户端关闭输出流
二、文件的异常写流程
-
在写流程的⑦,客户端每封装一个packet(64K),将packet存储到dataQuene队列中,在发送时,将dataQuene队列中的每个packet依次发送到通道,packet在发送到通道后,会从dataQuene中移动到ackQuene队列
-
一旦一个packet收到了所有dn节点回复的ack确认消息,ackQuene中的这个packet会被删除,如果在收到确认消息时,超时,此时中断传输,所有外部的packet,会立刻回滚到dataQuene,重新建立传输通道,剔除坏的节点,继续传输,只要有传输完成后,DN向NN上报块的消息,只要有一个DN节点上报块信息,NN就认为这个块已经传输完成,通道关闭。
-
副本数如果暂时不满足条件,之后NN会自动检查,维护副本数
三、文件的读流程
- 启动服务端NN,DN进程,提供一个分布式文件系统客户端
- 由客户端向NN发送请求,请求下载一个文件,NN对请求进行合法性检查(权限,路径是否合法)
- 如果合法,NN响应客户端允许下载,同时返回当前下载文件的所有元数据信息(块的映射信息)
- 客户端根据返回的元数据信息,去每个对应的DN节点按照顺序依次下载每个块