读数据的过程:
案例
某个文件上传后被切割成3个块,分别保存在这几个datanode中
black1(dn1,dn3,dn4),black2(dn1,dn4,dn5) ,black3(dn2,dn3,dn4)。
1 客户端问namenode,我的文件/aa/cls.avi在哪里。
2 namenode根据路径/aa/cls.avi到元数据查到保存的纪录信息。并发给客户端。纪录信息如下
black1(dn1,dn3,dn4),black2(dn1,dn4,dn5) ,black3(dn2,dn3,dn4)
3 客户端下载black1, 就近原则,然后随机一个datanode服务器(dn1),请求建立socket流
4 datanode(db1)开始发送数据(从磁盘里面读取数据放入流,以packet为单位来做校验)
5 客户端以packet为单位接收,使用本地缓存,然后写入目标文件。写完文件后
6 客户端下载剩下的文件块,执行3到5。直到所有文件读取完。