一、hdfs读取流程图
假设block副本个数3个
image.png客户端发起请求到namenode节点,要求namenode告诉客户端读取的block位置在哪些datanode上,第一次读取的datanode一般是网络路径最近的一个,如果读取失败,客户端会通过ClientProtocol协议上报给namenode,该datanode节点的block数据损坏了,然后继续读取datanode2一直到读取成功或者读完所有datanode。
一、hdfs读取流总结
- hdfs读过程涉及到很多rpc通讯,其中DFSClient与NameNode通信协议是ClientProtocol,NameNode和DataNode通信协议是DatanodeProtocol
,NameNode与secondaryNameNode通信协议是NamenodeProtocol。 - hdfs通讯有自带的RPC和Socket通讯,其中client和namenode,datanode和namenode是通过rpc通信而client和datanode之间是通过socket通信。
- hdfs有远程scoket读取和本地读取两种方式,如果设dfs.client.read.shortcircuit = true,如果client和block在一个节点上,就会直接读取,无需通过TCP远程读取,提高读取效率。
- hdfs存储的单位是block,一个条大数据可以跨多个block存储,但是读取时候是一packet包读取的,每个packet能够传输多个chunk,一个block会被切分多个chunk。
网友评论