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