心跳管理器主要用於管理DataNode的心跳,如果某DataNode在一段時間內(10分30秒)停止與NameNode發生心跳,則會將該DataNode直接標記爲死亡節點,而不是先退役,因爲可能該DN真的已經死亡了,而不用經歷退役階段。爲了不引起一連串的DataNode被標記爲死亡,每次只允許一個DataNode節點被聲明爲死亡,並從DatanodeManager,heartbeatManager,networktopology,blockManager中刪除信息。
默認情況下,DataNode心跳的時間間隔是3秒,如果加大該時間間隔是否會引入一些問題呢?
1、 無效塊刪除:該功能影響比較小,因爲即使在一段時間內,沒有刪除該塊,也不會造成數據丟失,只會佔用部分磁盤空間;
2、 塊副本不足:對該功能影響比較大,發現集羣中副本數目不足,應該及時地冗餘,否則可能因爲DataNode出現故障加大丟失數據的風險;
文件讀寫:如果讀寫頻繁,NameNode沒有及時的收集到DataNode剩餘空間,可能會造成部分DataNode寫數據塊失敗。