写数据的流程:
1.首先客户端client创建一个Distributed Filesystem(分布式文件系统)像Nam7eNode请求上传文件。
2.NameNode检查目录树是否可以创建文件(检查权限-是否允许上传,检查目录结构-路径是否存在),当都通过时响应客户端,反馈信息可以上传。
3.客户端接收到可以上传文件的反馈后,向NameNode请求上传第一个Block,上传到那几个DataNode。
4.NameNode进行计算,选择副本存储点,第一个选择的是本地存储点,第二个选择其他机架的一个节点,第三个选择其他机架的另一个节点,并把这三个节点返回给客户端。
5.客户端收到三个节点的信息,创建输入流,向节点距离最近的一个节点,进行请求Block传输通道,最近的节点会向另外的节点进行请求建立通道,另外的节点会向第三个节点请求建立传输通道。
6.三个节点接收到请求建立传输通道后,回逐一进行传输反馈给客户端。
7.客户端开始向第一个节点上传第一个Block,(先从磁盘进行读取数据放到本地内存进行缓存),以pocket为单位,第一个节点接收到一个pocket后就会传给第二个节点,第二个节点传输给第三个节点,第一个节点每上传一个pocket就会挡在一个应答队列等待应答。
8.当一个block0传输完毕后,客户端再次请求NameNode上传第二个block服务器(重复执行3-7步)。
读数据流程:
1.客户端通过DistributedFileSystem(分布式文件系统)请求下载文件,NameNode通过查询原数据,找到文件所在的NameNode地址,并返回地址给客户端。
2.客户端会根据节点的就近原则挑选一台DataNode服务器读取数据。
3.DataNode开始传输数据给客户端(从磁盘里面读取数据的输入流,以pocket为单位效验)。、
4.客户端以pocket为单位进行接收,先在本地缓存,然后写入目标文件。
5.关闭资源