大数据开发之Hadoop篇----hdfs读流程

读流程所涉及到的有client,NameNode和DataNode这个三个,我们来了解下这三个之间在读流程里都是干什么的。

1,当我们输入一条读入数据的命令的时候,如:hdfs dfs -ls /  或者 hdfs dfs -cat /user/hadoop/xxx时,client就通过DistributedFileSystem这个对象的open方法去和NameNode进行rpc通信,其中open方法会将一个path路径传递过去,这个path路径就是我们要查看的文件或者文件夹的路径。NameNode会对这个path进行交验,判断是否存在这个路径以及你要读取的路径你是否拥有权限去读取,如果都没问题的话就接着第二步,否则报错。

2,交验完成后,NameNode将会返回要读取的文件的全部或者一部分block列表(其实就是返回一个FSDataInputStream对象),这些就是blockmap的内容嘛,还记不记得前几篇的有介绍到hdfs的写流程,其中说到DataNode会返回心跳包给NameNode以及每隔10个心跳包就会返回一个blockmap给NameNode,里面就记录了每个文件所对应的block以及其存储的节点位置。

3,client调用FSDataInputStream对象的read方法去读取每一个block最近地址的副本(虽然有多个副本但是并不是要读取全部副本的,所以会根据一个算法来读取离client最近节点上的副本),读取完成后回去交验这个block是否有损坏,假如没有任何问题会自动关闭与当前DataNode的通信。如果check失败了,会记录下这个受损的block在哪个DataNode节点上,下次不会再读取了。

4,然后就是下个block的读取,当我们把block列表里面的block读取完后,文件还没有结束将继续向NameNode申请下一批block列表。

5,最后client调用FSDataInputStream对象的close方法关闭输入流。

猜你喜欢

转载自blog.csdn.net/weixin_39702831/article/details/83089266
今日推荐