首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 服务器 > 云计算 >

HDFS-DFSClient中的读Block机制

2013-02-17 
HDFS--DFSClient中的读Block机制BlockReader中的readChunk用于从DataNode中读取块信息和块数据(chunkbloc

HDFS--DFSClient中的读Block机制
BlockReader中的readChunk用于从DataNode中读取块信息和块数据(chunk=block);read方法如果发现块数据校验码无误,就向DataNode发送OP_STATUS_CHECKSUM_OK表示无错误发生。




DFSInputStream是DFSClient用于读取文件块的方法,其内包含了blockReader用于与DataNode交互(在readBuffer中调用BlockReader的read方法读取块内容)。
在读取文件块时,采用预读取方式,根据访问局部性原理,从offset开始(offset初始为0,即文件头),将长度为prefetchSize的块集合信息读到localBlocks(这是一个LocalBlock列表,可以视为缓存。LocalBlock是由{Block,DatanodeInfo[]}构成的pair,用于定位块,继承于Writeable)中,即

int read(long position, byte[] buffer, int offset, int length)

(注:position为要读取的文件开始位置,offset是从buffer的offset位置开始存)时,首先调用getBlockRange获取length范围内的所有块的LocalBlock,再对于每个LocalBlock依次调用fetchBlockByteRange读取相应的块到buffer中(执行流程是先根据LocalBlock生成一个BlockReader对象,在调用这个reader的readerAll方法读取块到buffer中)

热点排行