HDFS读写流程分析

读流程:

(1)客户端调用DistributedFileSystem的open方法,通过rpc请求到namenode,获取所需block列表和位置信息(也就是FSDataInputStream对象)

(2)根据上文获取的block信息,调用FSDataInputStream的read方法,去第一个block的最近的datanode读取,如果成功,关闭与当前datanode的通信,接着去第二个block的最近datanode去读,依次进行下去。当这批block读取完成后,通过DFS会返回下一批block,直到整个文件读取完毕。

(3)当所有block读取完成后,关闭FSDataInputStream(输入流)。


写流程:

(1)客户端调用DistributedFileSystem的create方法,与namenode进行通信,查看在目录下是否有权限,并将要上传的文件的大小、文件名等信息发给nn,nn根据这些信息,算出文件需要切成多少块block及block位置信息返回。

(2)客户端调用FSDataInputStream API的write方法首先将其中一个block写在datanode上,每一个block默认都有3个副本,并不是由客户端分别往3个datanode上写3份,而是由已经上传了block的datanode产生新的线程,由这个namenode按照放置副本规则往其它datanode写副本。

(3)写完后返回给客户端一个信息,然后客户端在将信息反馈给namenode。

(4)接着关闭输出流,并且调用DFS的complete方法,告诉namenode写入完成。

猜你喜欢

转载自blog.csdn.net/xjp8587/article/details/80600292