1.客户端向NameNode申请上传文件
2.NameNode判断文件是否已经存在,只有当文件不存在时才可以上传
3.如果文件不存在,NameNode返回可存储文件的DataNode节点信息
4.客户端尝试向DataNode建立通信管道,客户端只会向一个节点发送请求,由该节点继续向后续节点发送连接请求。
5.所有被连接的DataNode逐级应答客户端,通信管道建立成功
6.当所有通信管道建立成功后,客户端开始向DataNode上传数据,DataNode收到数据后,先保存在缓存中,并写入本地磁盘的同时向后续DataNode 发送数据,后续DataNode重复上一个节点的步骤,直到最后一个节点。
注:文件在上传的之前首先会被切分成数据块(Block),一个Block在上传的时候以数据包(Packet)为单位进行上传。