执行流程
一、 读取流程(下载)
- 客户端Client向NameNode发起RPC请求
- NameNode在收到请求之后,会先进行校验,例如文件是否存在等
- 校验完成之后,会将这个文件所对应的存储Block的节点地址放入一个队列中(文件分的块中,每个块有3个副本,每一次先给客户端一个块的3副本的存储地址。放地址的原因是为了保证hdfs的高吞吐),返回给客户端。
- 客户端收到队列之后,从队列中取出这个块对应的地址(3个),从这些地址中选取一个较近(网络距离,所谓最近即响应速度最快的节点)的节点地址来连接并且读取数据。如果客户端本身就是DataNode,那么将从本地直接获取数据
- 读取完一个Block之后,校验Block(每一个Block都会对应一个.meta),(checksum验证,即验证读取到的Block大小和声明的Block大小是否一致)如果校验失败,则客户端就会认为这个Block产生损坏,客户端会通知NameNode,然后客户端重新选取地址,重新读取&#x