廣州網(wǎng)絡(luò)營銷網(wǎng)站建設(shè)揚(yáng)中網(wǎng)站制作
一、finalizeBlock
1.1 調(diào)用點(diǎn)&調(diào)用場景
主要用于完成block的寫入。調(diào)用點(diǎn)有兩處:
① BlockReceiver#receiveBlock方法里:
這個(gè)調(diào)用場景發(fā)生在:datanode在所有的packet都接收完了之后,如果是數(shù)據(jù)復(fù)制、balancer、或者stage是TRANSFER_FINALIZED的情況下,調(diào)用finalizeBlock。
② BlockReceiver.PacketResponder#finalizeBlock:
這個(gè)場景發(fā)生在client寫datanode的場景,datanode側(cè)接收到了block里最后一個(gè)packet。然后就會(huì)去finalize這個(gè)塊,并且向namenode發(fā)送IBR告訴namenode收到了這個(gè)塊,并且是Block_Received。
1.2 finalizeBlock具體實(shí)現(xiàn)邏輯
/*** Complete the block write!*/@Override // FsDatasetSpipublic void finalizeBlock(