在hdfs中 Packet 是读写 网络传输的基本单元, 有必要探讨下Packet 的基本结构
以下是Packet 类所有的数据成员,均已详细注释
private static class Packet {
private static final long HEART_BEAT_SEQNO = -1L;
long seqno; // sequencenumber of buffer in block
final long offsetInBlock; // offset in block
boolean syncBlock; // this packet forces the current block to disk
//当前Packet 有多少个 chunk
int numChunks; // number of chunks currently in packet
final int maxChunks; // max chunks in packet
//大小为65565,计算来源为:33(packet头部长度) + 4(checksum长度)*127 + 512(chunk长度)* 127
private byte[] buf;
private boolean lastPacketInBlock; // is this the last packet in block?
//校验数据的其实位置,33
int checksumStart;
//校验数据的当前位置,每一个占用4个byte,第一位置也是33
int checksumPos;
//实际数据的其实位置,541
final int dataStart;
//校验数据的当前位置,分割为每一个chunk,每个chunk占512个byte,第一chunk位置也是541
int dataPos;
...
}
packet 结构如下
* (C is checksum data, D is payload data,C之前为packet的header结构)
*
* [_________CCCCCCCCC________________DDDDDDDDDDDDDDDD___]
* ^ ^ ^ ^
* | checksumPos dataStart dataPos
* checksumStart
*