HDFS上传文件流程
文件上传流程图如下 :
首先 , HDFS选用的是每启动一个线程 , 就传递一个块 , 然后接收到第一个块后的机器复制给其他机器 .
首先我们知道namenode的职责 :
- 管理整个文件系统的元数据 ( 目录树 文件和块对应信息 , dn信息)
- 响应整个客户端的所有请求 hdfs://node-1:9000
上传文件的流程
- 首先hdfs客户端通过RPC调用向nn发送请求上传文件1.txt
- 元数据根据请求信息查询元数据 , 判断是否可以上传
- 返回可以请求上传 , 响应给客户端
- 将数据的块(blk-1)[采用3副本]上传到元数据中
- 根据请求 , 并且结合dn信息返回3台可以用的dn的ip(dn1,dn2,dn3)
- nn返回上传副本的信息给客户端
- 客户端和dn1建立传输数据的管道(pipeline) , 与此同时 , dn1与dn2之间也建立传输数据的管道 , 直到最后一个为止
- 依次返回pipeline建立完毕信息 , 直到响应给客户端
- 传输数据包(packet) , 默认大小为64K , dn*把接收到的packet保存到指定的目录中 , 并且把packet继续往后发 , 直到最后一个
- 发送完毕后反方向追个返回ack应答 , 保证packet的安全稳定 , 直到返回给客户端
- 待第一块上传完毕 , 客户端按照上述流程走一遍 , 上传第二个块 , 从第4步开始 , 重新发起请求 , 寻找可用的dn位置
- 待所有块上传完毕 , 客户端把信息告知namenode , nn把信息同步到文件系统的元数据中
Q : 何为真正的上传文件成功 , 如果上传中p