hadoop三个核心内容是HDFS、mapreduce以及HBase。此文简单描述HDFS的读写原理


读原理

3880695504009×××39.png

  1. HDFS客户端调用Distributed FileSystem中的open()

  2. 通过RPC协议调用NameNode来确定请求文件块所在的位置

  3. Distributed FileSystem(以下简称DFS)向客户端返回一个支持文件定位的输入流对象FSDataInputStream(以下简称FSDIS)用于给客户端读取数据的。FSDIS包含一个DFSInputStream对象,是用于管理NN和DN之间的I/O

  4. 客户端在FSDIS上调用read()函数

  5. 以近到远读取DataNode上的数据,这期间会一直不断的调用read(),直到读取数据结束

  6. 在FSDIS中调用close()关闭


写原理

675539944205662234.png

  1. HDFS客户端在DFS中调用了create()函数创建了一个文件

  2. NN对请求进行验证(验证内容为两部分:一是文件是否存在。二是请求客户端是否有写权限)。NN创建文件成功时,DFS会返回FSDataOutputStream(以下简称FSDOS)给客户端,让客户端用来写入数据。FSDOS中也包含了一个DFSOS

  3. 客户端写入数据时,DFSOS会将文件分割成包。然后放入一个内部队列,称其为数据队列。DN会形成一“管道”,DataStream会将这些小的文件包放入数据流中,DataStream的作用是请求NN为数据文件包分配合适的DN存放副本

  4. DataStream会逐一传送给DN,让DN存储

  5. DFSOS同时也会保存数据到一个内部队列,用来等待DN返回确认信息,这个队列被称为确认队列

  6. 最后在FSDOS中调用close()