1、HDFS写流程
1)client跟NN通信请求写文件,NN检查目标文件是否存在,父目录是否存在
2)NN返回是否可以写
3)client对文件按块(block)切分。请求第一个block该传输到哪些DN服务器上。
4)NN返回可以写的DN的服务器。
5)client请求一个台DN写数据(RPC调用,建立pipeline),第一个DN收到请求会继续调用第二个DN,然后第二个调用第三个DN,将整个pipeline建立完成,逐级返回客户端。
6)client开始传输block,以packet为单位传输, 以chunk为单位校验。第一个DN收到第一个packet就会传给第二台,第二台传给第三台;第一台每传一个packet就会放入一个应答队列等待应答。
7)当一个block传输完成时,client再次请求NN上传第二个block的服务器。
2、HDFS读流程
1)跟NN通信查询元数据(block所在的DN的节点),找到文件块所在的DN的服务器。
2)挑选一台DN(就近原则,然后随机)服务器,请求建立socket流。
3)DN开始发送数据(从磁盘里读取数据放入流,以packet为单位做校验)
4)客户端以packet为单位接收,现在本地缓存,然后写入目标文件中,后面的block块就相当于append到前面的block块,最后合成最终需要的文件。