HDFS 读写文件流程

写文件流程

1.客户端会根据RPC协议,向namenode发出请求上传文件的要求。

2.namenode根据请求检查元数据,判断客户端是否具有上传的权限。

3.如果有权限,向客户端发送可以上传的命令。

4.客户端会将想要上传的文件按照HDFS的block大小进行切割。再次向namenode发送请求上传block-1  3个副本(HDFS副本存储策略设定的数量)的指令。

5.namenode会根据datanode汇报的信息(健康状况(心跳机制)、磁盘使用情况(块汇报机制))找出3台可用的位置。

6.namenode将找出的3台可以存储3个副本的位置(datanode1、datanode2、datanode3)信息发送给客户端。

7.客户端向距离最近(网络拓扑图中的远近)的位置(datanode1)建立pipeline管道(即:IO),建立完成后,datanode1会和datanode2建立管道,建立完成后,datanode2会和datanode3建立管道。

8.都建立完成后,datanode1会向客户端建立完毕的命令。

9.客户端开始读数据,数据会以64K的数据包(packet)在管道里传输。

10.datanode1会接受packet数据,保存至本地文件系统中后,继续向后续的节点(datanode2、datanode3)推送这个数据包,同时会向客户端发送一个ACK应答相应校验。datanode2同样接受这个数据包保存至本地文件系统中,向datanode3继续推送这个数据包,同时会向datanode1发送一个ACK应答相应校验。最终datanode3接受保存完这个数据包后,再向datanode2发送一个ACK应答相应校验。

11.当block-1  3个副本数据都传输完成后,从第四步开始继续发送请求上传block-2  3个副本...  的指令。

12.当所有的数据块上传完毕后,客户端会通知namenode写完成,namenode会同步文件的元数据信息。

 

读流程

1.客户端向namenode发送请求下载文件的命令.

2.namenode根据请求检查元数据判断客户端是否有权限下载,有的话,会视情况(根据文件的大小)分批次返回数据块的信息(这些信息是排序好了的,近的在前,状态差的靠后)。

3.客户端连接到第一个数据块进行读数据,在读取完毕之前,连接到第二个块。

4.连接到第二个数据块进行读数据。

5.如果文件比较大,还有数据块,客户端继续下一批次的读取。

6.最后,客户端会将数据块按照编号进行追加(有一个CRC循环冗余码的校验)。

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值