一、HDFS客户端写流程
1.客户端请求上传数据到服务器
2.服务器接收到这个请求,然后到自己的元数据里面去查询,元数据中是否记录了该文件的存在
3.NN响应客户端是否可以上传
4.服务器会发送再次请求,需要上传多大的数据文件
5.服务器会根据上传文件大小进行调度,返回要上传的DataNode节点
6.客户端接收队列数据:
通过pop方法,取出第一个节点的地址,然后访问该节点,并吧剩下的其他节点的IP地址带过去;
第一个DN接收数据,再从队列中取出第一个,继续把剩下的IP带过去,直到最后一个节点结束;
最后一个节点收到信息之后,想源地址发送确认消息,确认到第一个DN的时候,DN会把确认消息返回给客户端;
7.datanode反顺序依次应答,直到应答给客户端
8.客户端向datanode上传文件块
9.上传文件块后,各datanode会通过心跳将位置信息汇报给namenode
注:如果上传文件块时,某个datanode节点挂掉了,该节点的上节点直接连接该节点的下游节点继续传输,最终在第7步汇报后,namenode会发现副本数不足,触发datanode复制更多副本
10.客户端重复上传操作,逐一将文件块上传,同时dataNode汇报块的位置信息,时间线重叠
11.所有块上传完毕后,namenode将所有信息存在元数据中,客户端关闭输出