HDFS读流程
- 客户端通过FileSystem的get方法加载配置获得FileSystem对象。
- FileSystem向NameNode通过open方法请求读取文件。
- NameNode进行检查(文件是否存在,是否有相应权限)。
- 若通过NameNode会返回输入流(FSDataInputStream对象),不通过会报错。
- HDFS客户端调用FSDataInputStream读取文件。
- FSDataInputStream根据前几个Block挑选最近的DataNode建立连接,读取数据。
- DataNode返回数据,客户端以Packet为单位接收,先在本地缓存,然后写入目标文件。读取完这个Block后关闭连接。重复7和8步,直到数据读取完毕。
- 关闭文件系统对象FileSystem。
HDFS写流程
- 客户端通过FileSystem的get方法加载配置获得FileSystem对象。
- FileSystem通过create方法向NameNode请求上传文件。
- NameNode进行检查(目标文件是否已存在,父目录是否存在)。
- 若通过NameNode会创建空文件并返回输出流(FSDataOutputStream对象),不通过会报错。
- HDFS客户端调用FSDataOutputStream写入文件。
- FSDataOutputStream与第一个DataNode建立连接,以以Packet为单位写入数据;第一个DataNode与第二个DataNode建立连接,备份数据;第二个DataNode与第三个DataNode建立连接,备份数据。
- 第三个DataNode在ack校检后应答第二个DataNode、第二个DataNode在ack校检后应答第1个DataNode,第一个DataNode在ack校检后应答HDFS客户端。
- 关闭文件系统FileSystem对象。