1.客户端向namenode发送请求,请示写入数据
2.namenode接受请求后,判断这个用户是否有写入权限,如果不具备直接报错;如果有写入权限,接着判断在要写入的目录下是否已经存在这个文件,如果存在,直接报错,如果不存在,通知客户端可以上传
3.客户端对文件进行切分,形成block块
4.客户端请求第一个block块,存储在哪些地方
5.namenode根据机架感知原理,网络拓扑关系,副本机制找到相应的可以上传的datanode的连接列表,返回给客户端
6.在连接列表中选择第一台datanode进行连接并建立管道,让第一台与第二台连接,第二台与第三台连接形成一个管道
7.客户端通过数据包(64kb)的形式发送数据,当第一台接受数据后,然后将数据转发给第二台,第二台接受完,第二台数据再把数据发送给第三台
8.当最后一个接受请求后,建立一个反向的应答队列,当每个节点都将数据包接收以后,反向给予应答响应(ack确认机制)
9.数据开始源源不断的发送数据,当第一个block块发送完成之后,客户端重新请求namenode,获取第二个block块应该存放在哪些datanode中,接着从第五步开始执行,直到所有的block块全部写入完成