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

本文详细解析了HDFS中客户端(client)、名称节点(NameNode)和数据节点(DataNode)在读取流程中的交互过程,包括客户端如何通过DistributedFileSystem与NameNode通信获取文件块信息,以及如何从最近的数据节点读取数据。

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

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

2,交验完成后返回一个FSDataInputStream对象,当要读取前client还要向NameNode发送一次请求,然后NN将会返回要读取的文件的全部或者一部分block列表,这些就是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方法关闭输入流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值