首页 > 技术文章 > HDFS的读写

realman9527 2020-07-25 17:13 原文

1.写数据

 

1)客户端创建Distributed FileSystem模块

2)向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。

3)NameNode返回是否可以上传。

4)客户端请求第一个 Block上传到哪个DataNode服务器节点上

5)NameNode返回DataNode节点

6)客户端通过FSDataOutputStream模块

7)请求DataNode1上传数据,DataNode1收到请求会继续调用DataNode2,然后DataNode2调用DataNode3,将这个通信管道建立完成。

8)  DataNode1、DataNode2、DataNode3逐级应答客户端

9)  客户端开始往DataNode1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,DataNode1收到一个Packet就会传给DataNode2,DataNode2传给DataNode3;DataNode1每传一个packet会放入一个应答队列等待应答

10)写完数据,关闭输输出流

11)发送完成信号给NameNode

2.读数据

 

 

1)客户端创建Distributed FileSystem

2)向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。

3)挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据。

4)通过FSDataInputStream读取

5)DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)。

6)客户端以Packet为单位接收,先在本地缓存,然后写入目标文件。

7)读取结束,关闭

推荐阅读