本文共 1211 字,大约阅读时间需要 4 分钟。
1.客户端发起RPC请求到NameNode
2.NameNode收到请求之后会校验这个文件是否存在
3.如果文件存在,NameNode就会读取元数据,同时给DataNode一个信号
4.客户端就会向NameNode要第一个Block的地址
5.NameNode在收到请求之后会读取元数据,然后将第一个Block的地址放入队列中返回给客户端
6.客户端收到队列之后从中选择一个较近的节点来读取第一个Block,会对这个Block进行checksum的验证;如果校验失败,客户端会给NameNode一个信号,然后重新选取地址重新读取;如果校验成功,则客户端会向NameNode要第二个Block的地址,重复456过程
7.客户端读取完成所有的Block之后,会给NameNode一个结束信号,NameNode在收到信号之后会关闭文件
1.客户端发起RPC请求到NameNode
2.NameNode在接收到请求之后会进行校验:
a.校验指定路径是否存在 b.校验写入路径是否有权限 c.校验指定路径中是否有同名文件3.如果校验失败,则抛出异常;如果校验成功,记录元数据,NameNode会给客户端一个信号
4.客户端在收到信号之后会向NameNode要第一个Block的存储位置
5.NameNode在受到请求之后,会等待DataNode的心跳,选取DataNode的地址,放入队列中返回给客户端.默认情况下,NameNode会选择3个地址
6.客户端受到队列之后取出3个地址,从这些地址中选择一个较近的节点写入第一个Block的第一个副本
7.第一个副本所在节点会通过pipeline(管道,实际上就是NIO中的Channel),将第二个副本写到其他节点上,第二个副本所在的节点再写到第三个副本
8.写完之后,第三个副本所在的节点会给第二个副本所在的节点返回ack,第二个副本所在的节点收到之后会给第一个副本所在的节点返回ack,第一个副本所在的节点再给客户端返回ack
9.写完第一个Block之后,客户端会和NameNode要第二个Block的存储位置,然后重复5678过程
10.当写完所有的Block之后,客户端会给NameNode一个结束信号,NameNode就会关闭文件/关流,文件关闭之后,这个文件就不可修改
1.客户端发起RPC请求到NameNode
2.NameNode在受到请求之后,会将这个请求记录到edits文件中,然后更新内存中的元数据,内存更新成功之后,会给客户端返回一个ack信号,此时这个文件对应的Block依然存储在DataNode上
3.在NameNode受到DataNode的心跳的时候,NameNode就会检查Block信息,会给DataNode进行心跳响应,要求删除对应的Block.DataNode受到心跳响应之后才会真正删除Block
转载地址:http://erxmb.baihongyu.com/