DataNode查看他的屬性,可以分成以下幾個方面:
1.offerService()方法,此方法在DataNode主循環中執行,做的事情包括和NameNode心跳交互;通知NameNode一段時間以來收到的block;本機block的報告
2.DataXceiverServer,主要處理block的讀寫
3.BlockScanner,對本機block的掃描和校驗處理
4.FSDataset,本機block存儲的入口
5.ipcServer,主要是DataNode和DataNode之間recover block時使用。
這里主要說明第1點,其它幾點在另外一文中已經介紹過,offerService的主要流程見下圖:

offerService是在一個while循環里面被執行,只要DataNode存活,就一直被執行,工作流程如下:
1.如果距離上一次heartbeat時間超過了指定的時間,調用namenode.sendHeartbeat方法,namenode是ipc的框架下的一個proxy,可以認為就是遠程的NameNode,該方法向NameNode匯報DataNode還存活,以及匯報DataNode的利用率,NameNode會返回一系列關於本DataNode的BlockCommand
2.DataNode處理返回的BlockCommand,BlockCommand有DNA_TRANSFER(發送block去指定的DataNode),DNA_INVALIDATE(刪除指定的本機上面的block),DNA_SHUTDOWN(DataNode停止工作),DNA_REGISTER(DataNode向NameNode注冊),DNA_FINALIZE(DataNode完成升級流程),DNA_RECOVERBLOCK(recover block)等
3.報告自從上一次心跳以來DataNode收到的block信息,調用namenode.blockReceived方法
4.如果距離上一次block report時間超過了指定的時間,調用namenode.blockReport方法,NameNode會返回一系列的DatanodeCommand,接下來的處理就和第2點一樣了
5.根據其他條件,適當的做一些處理,主要是為了考慮資源利用等等
