关于读写删流程不是我自己总结的,是从之前学习时候资料上大体拿过来用的,但无论是不是我自己总结的都不碍事,重要的是我们汲取精华化为己用,你说对吗,就像你现在也在白嫖我的文字一样,反正是很香.
10.读流程
1.客户端发起请求到NN
2.NN在收到请求之后会先效验该文件是否存在.若存在,会将这个文件所对应的Block的存储地址放入一个队列中返回给客户端
3.客户端收到队列之后会从队列中按每个Block对应的地址将其一次取出,从副本个数地址中取出地址较近的一个读取
4.读取完一个Block后,会对这个Block进行一次checksum的验证,验证该Block的数据总量是否准确;若大小不一致,则说明该Block损坏,客户端会通知NN,然后再从其它节点上重新读取该Block
5.如果读完一个Block便会接着读下一个Block,直到所有的Block读完
6.客户端读取数据若比较大会分批次,在读完该批次地址便会向NN要下一批地址
7.读完所有的Block,客户端会向NN发送消息通知NN关闭文件
11.写流程
1.客户端发起请求到NN,该请求包含对文件信息的描述
2.NN收到请求后,效验该用户的权限;如果效验通过,则检查该路径下是否有同名文件,如果没有同名文件,则允许写入
3.NN计算这个文件需要的地址数量,然后会给每一块分配对应的地址,并且将地址放入队列中返回给客户端
4.客户端在收到地址后,会将数据进行封包(packets),写入DataNode
5.在写的时候,从分配地址中选取一个较近的节点将数据写入.在写完一个Block之后,这个DataNode自动的通过Pipeline管道将这个Block备份到其它节点上构成指定的副本数
6.节点之间依次传递ACK信号表示备份成功,在客户端收到ACK之后会继续写下一个Block
7.客户端写完所有的Block之后会通知NN关闭流,流关闭后该文件更改为不可写