HDFS的读写流程
HDFS的写入(上传)操作
(1)客户端向NameNode发出上传文件请求
(2)NameNode检查目标文件是否存在,父目录是否存在,然后响应客户端是否能上传
(3)客户端根据规定的块大小拆分数据,然后向NameNode询问第一个block(数据块)上传到哪些DataNode上
(4)NameNode返回多个DataNode节点(默认三个节点)
(5)客户端通过FSDataOutputStream模块请求DataNode上传数据,第一个DataNode节点收到请求后向调用下一个DataNode节点,
第二个节点再调用下一个节点。。。。将这个通信管道建立完成
(6)所有数据节点依次应答客户端
(7)客户端开始往第一台数据节点上传第一个block,以Packet为单位,第一台数据节点收到后复制一份传给第二个数据节点,依次往后传,直到所有
数据节点都拿到block。第一台数据节点每传一个packet会放在一个应答队列等待应答。
(8)当一个数据块上传完成后,客户端向NameNode请求上传第二个数据块。重复3-8步骤。
HDFS的读数据流程
(1)客户端通过Distributed FileSystem 向NameNode请求下载文件,NameNode通过查询元数据,找到文件酷爱所在的所有DataNode地址
(2)通过就近原则挑选一台DataNode服务器,请求读取数据。
(3)DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)
(4)客户端以Packet为单位接受,先在本地缓存,然后写入目标文件。