HDFS的读写

1.写数据

HDFS的读写_第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.读数据

HDFS的读写_第2张图片

 

 

1)客户端创建Distributed FileSystem

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

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

4)通过FSDataInputStream读取

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

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

7)读取结束,关闭

你可能感兴趣的:(HDFS的读写)