首页 > 代码库 > HDFS读写原理
HDFS读写原理
hadoop三个核心内容是HDFS、mapreduce以及HBase。此文简单描述HDFS的读写原理
读原理
HDFS客户端调用Distributed FileSystem中的open()
通过RPC协议调用NameNode来确定请求文件块所在的位置
Distributed FileSystem(以下简称DFS)向客户端返回一个支持文件定位的输入流对象FSDataInputStream(以下简称FSDIS)用于给客户端读取数据的。FSDIS包含一个DFSInputStream对象,是用于管理NN和DN之间的I/O
客户端在FSDIS上调用read()函数
以近到远读取DataNode上的数据,这期间会一直不断的调用read(),直到读取数据结束
在FSDIS中调用close()关闭
写原理
HDFS客户端在DFS中调用了create()函数创建了一个文件
NN对请求进行验证(验证内容为两部分:一是文件是否存在。二是请求客户端是否有写权限)。NN创建文件成功时,DFS会返回FSDataOutputStream(以下简称FSDOS)给客户端,让客户端用来写入数据。FSDOS中也包含了一个DFSOS
客户端写入数据时,DFSOS会将文件分割成包。然后放入一个内部队列,称其为数据队列。DN会形成一“管道”,DataStream会将这些小的文件包放入数据流中,DataStream的作用是请求NN为数据文件包分配合适的DN存放副本
DataStream会逐一传送给DN,让DN存储
DFSOS同时也会保存数据到一个内部队列,用来等待DN返回确认信息,这个队列被称为确认队列
最后在FSDOS中调用close()
HDFS读写原理