HDFS的读写流程

HDFS写流程

客户端发起写请求道namenode,namenode返回可使用的资源,客户端根据资源使用情况对要写入的数据分块,逐一上传块到datanode,datanode获取上传块数据并写入磁盘,完成后报告给namenode块信息,同时也告诉客户端写入成功,客户端继续后续快的写入,在此期间namenode接受到datanode的块写入完成信息之后根据备份数直到满

1    首先客户端发起写请求到namenode,nanmenode检查目标是否存在,父目录是否存在。

2    namenode通知client是否可以上传。

3    client上传时,先对文件进行切分成块,默认block为128MB。client向namenode请求第一个block需要传输到哪个datanode上。

4    namenode接收到请求,返回datanode节点,默认为3(d1在datanode的节点上d2在datanode的不同节点上,d3在不同datanode的任意节点上)。

5、client请求一台datanode上传数据(本质上是一个RPC调用,建立pipeline),第一个datanode收到请求会继续调用第二个datanode,然后第二个调用第三个datanode,将整个pipeline建立完成,逐级返回客户端 即客户端请求d1上传数据,d1收到请求会继续调用d2,然后d2调用d3建立通信管道。

6    三个节点逐级答应客户端

7    客户端开始往d1节点上传第一个block(先从磁盘中读取数据放到一个本地内存缓存),以packet(数据包,64kb)为单位。

8    当第一个block传输完后,客户端再次请求namenode上传第二个接收block的datanode节点,直到满足备份为止


HDFS的读写流程

HDFS读流程

客户端发发起请求到namenode,namenode返回可使用资源,客户端根据使用资源到对应的datanode上读块数据,客户合并文件数据

1    和namenode通信查询元数据(block所在的datanode节点),找到块所在的datanode服务器

2    挑选一台datanode(就近原则,然后随机)服务器请求建立socket(套接字)流

3    datanode发送数据,从磁盘读取数据放入流,以packet为单位来做校验。

4    客户端以packet为单位接收,现在本地缓存,然后写入目标文件,最后合成文件。

HDFS的读写流程