请介绍下hdfs读流程

提问者:帅平 问题分类:面试刷题
请介绍下hdfs读流程
1 个回答
候你多时
候你多时
1. Client向NameNode发送RPC请求。请求⽂件block的位置;
2. NameNode收到请求之后会检查⽤户权限以及是否有这个⽂件,如果都符合,则会视情况返回部分或全部的block列表,对于每个block,NameNode都会返回含有该block副本的DataNode地址;这些返回的DataNode地址,会按照集群拓扑结构得出DataNode与客户端的距离,然后进⾏排序,排序两个规则:⽹络拓扑结构中距离 Client 近的排靠前;⼼跳机制中超时汇报的DataNode状态为STALE,这样的排靠后;
3. Client选取排序靠前的DataNode来读取block,如果客户端本身就是DataNode,那么将从本地直接获取数据(短路读取特性);
4. 底层上本质是建⽴Socket Stream(FSDataInputStream),重复的调⽤⽗类DataInputStream的read⽅法,直到这个块上的数据读取完毕;
5. 当读完列表的block后,若⽂件读取还没有结束,客户端会继续向NameNode 获取下⼀批的block列表;
6. 读取完⼀个block都会进⾏checksum验证,如果读取DataNode时出现错误,客户端会通知NameNode,然后再从下⼀个拥有该block副本的DataNode 继续读;
注:Hadoop在设计时考虑到数据的安全与⾼效, 数据⽂件默认在HDFS上存放三份, 存储策略为本地⼀份,
7. read⽅法是并⾏的读取block信息,不是⼀块⼀块的读取;NameNode只是返回Client请求包含块的DataNode地址,并不是返回请求块的数据;
8. 最终读取来所有的block会合并成⼀个完整的最终⽂件;
发布于:1年前 (2023-02-16) IP属地:四川省
我来回答