HDFS1.0源代码解析—数据传输和接受的类BlockSender和BlockReceiver
本次主要介绍DN端进行数据传输和接受的类BlockSender和BlockReceiver,其中BlockSender是读取DN本地block数据传送回数据请求端,BlockReceiver是接受存储数据,写入到本地的block中。
首选介绍BlockSender的主要函数的作用:
构造函数
245 if (len > bytesPerChecksum && len % bytesPerChecksum != 0) {246 len -= len % bytesPerChecksum;247 }257 // write packet header258 pkt.putInt(packetLen);259 pkt.putLong(offset);260 pkt.putLong(seqno);261 pkt.put((byte)((offset + len >= endOffset) ? 1 : 0));262 //why no ByteBuf.putBoolean()?263 pkt.putInt(len);264265 int checksumOff = pkt.position();266 int checksumLen = numChunks * checksumSize;267 byte[] buf = pkt.array();269 if (checksumSize > 0 && checksumIn != null) {270 try {271 checksumIn.readFully(buf, checksumOff, checksumLen);272 } catch (IOException e) {289 int dataOff = checksumOff + checksumLen;245-249行主要是控制在传输最后一块数据之前传输的所有都是整块,这点好处注释中有写,但是不是太明白,希望大神留言指点。257-263行是写入一些读取使用的控制信息,比如packet的长度、偏移、序号等等。269到272行读取元数据信息,289以后是对读取block真实数据的方式做判断,最终都是将数据写入到pkt中。最后,输出流out将数据输出。