上一篇我们讲过了java的HDFSAPI操作,现在这篇blog分享一下HDFS的读写机制,和hadoop架构中的副本存储节点的选择
HDFS写数据机制
简述:
- 客户端向namenode请求上传文件,namenode检查目标路径的环境是否已存在。
- namenode返回上传应答。
- block上传到哪几个DN节点。
- namenode返回3个节点,分别为dn1、dn2、dn3。
- 客户端请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成
- dn1、dn2、dn3逐级应答
- 客户端开始往dn1上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位,dn1收到一个packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待
- 当一个block传输完成之后,客户端再次请求namenode上传第二个block的服务器。回到第三步。
简单的源码分析:
-
客户端通过调用DistributedFileSystem的create方法创建新文件。
-
DistributedFileSystem通过RPC调用namenode去创建一个新文件,创建前, namenode检查环境。如果通过, namenode就会记录下新文件,否则就会抛出IO异常。
-
前两步结束后