当前位置: 移动技术网 > IT编程>数据库>其他数据库 > Hadoop HDFS读写流程

Hadoop HDFS读写流程

2019年08月20日  | 移动技术网IT编程  | 我要评论

读取:

1) 客户端调用 distributedfilesystem open() 方法打开文件。

2) distributedfilesystem rpc 连接到 namenode,请求获取文件的数据块的信息;namenode 返回文件的部分或者全部数据块列表;对于每个数据块,namenode 都会返回该数据块副本的 datanode 地址;distributedfilesystem 返回 fsdatainputstream 给客户端,用来读取数据。

3) 客户端调用 fsdatainputstream read() 方法开始读取数据。

4) fsinputstream 连接保存此文件第一个数据块的最近的 datanode,并以数据流的形式读取数据;客户端多次调用 read(),直到到达数据块结束位置。

5) fsinputstream连接保存此文件下一个数据块的最近的 datanode,并读取数据。

6) 当客户端读取完所有数据块的数据后,调用 fsdatainputstream close() 方法。

 

 

 

写入:

 

1)  客户端调用 distribuedfilesystem create() 方法来创建文件。

2) distributedfilesystem rpc 连接 namenode,请求在文件系统的命名空间中创建一个新的文件;namenode 首先确定文件原来不存在,并且客户端有创建文件的权限,然后创建新文件;distributedfilesystem 返回 fsoutputstream 给客户端用于写数据。

3) 客户端调用 fsoutputstream write() 函数,向对应的文件写入数据。

4) 当客户端开始写入文件的时候,客户端会将文件切分成多个 packets,并在内部以数据队列“data queue(数据队列)”的形式管理这些 packets,并向 namenode 申请 blocks,获 取用来存储 replicas 的合适的 datanode 列表,列表的大小根据 namenode replication 的设定而定;

队列中的分包被打包成数据包,将第一个块写入第一个datanode,第一个 datanode写完传给第二个节点,第二个写完传给第三节点

5) 为了保证所有 datanode 的数据都是准确的,接收到数据的 datanode 要向发送者发送确认包(ack packet)。确认包沿着数据流管道反向而上,当第三个节点写完返回一个ack packet 第二个节点,第二个返回一个ack packet给第一个节点,第一个节点返回ack packet fsdataoutputstream对象,意思标识第一个块写完,副本数为3;然后剩余的块依次这样写


6) 不断执行第 (3)~(5)步,直到数据全部写完。

7) 调用 fsoutputstream close() 方法,将所有的数据块写入数据流管道中的数据结点,并等待确认返回成功。最后通过 namenode 完成写入。

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网