这篇文章介绍了DFSPacket对象的lastPacketInBlock字段相关的知识。
【HDFS Client】DFSPacket对象什么情况下是lastPacketInBlock?
本文继续深挖lastPacketInBlock这个字段在HDFS Client写数据时的重要作用。
可以这么说,如果这个lastPacketInBlock出问题的话,是会影响增量块汇报(IBR)的,继而导致Block Missing丢块的问题。
我们先给出结论,lastPacketInBlock的两个重要作用:
1、在客户端侧控制endBlock,结束一个block,进而向namenode新申请新的块。
2、在datanode侧,控制block的finalize。
一、DataNode侧的作用
因为last packet in block只是一个标记packet,并没有真实的数据。
所以,在datanode侧,如果发现当前receive的packet是lastPacketInBlock的话,就会看是否有sync标记,
如果需要sync block,则flushOrSync(true, seqno),把块给同步到磁盘上。
if (lastPacketInBlock || len