1)NameNode啓動時,會啓動一個IPC server服務,
2)DataNode啓動後會主動鏈接NameNode的IP server服務,默認每隔3秒鏈接一次,也就是心跳。
這個時間能夠經過 dfs.heartbeat.interval參數設置,也就是心跳時間。
3)DataNode經過心跳在NameNode註冊彙報本身的狀態,NameNode經過心跳獲取DataNode的狀態和下達指令。
4)當NameNode長時間沒有收到DataNode的心跳,就認爲DataNode掛掉了。
這種心跳機制一樣存在於Yarn中ResourceManager和NodeManager中。安全
這個就是Hadoop的Master/Slave架構,NameNode和ResourceManager就是Master,DataNode和NodeManager就是Slave。架構
第一個問題,NameNode元數據怎樣保存的?
首先NaomNode的元數據須要放在內存中,由於咱們須要常常訪問NameNode節點獲取元數據,如果放在磁盤中,那效率會很是低。oop
既然放在內存中,那必要要有一個機制保證內存數據的安全,由於內存中數據一旦斷電就丟了,因此內存中的元數據也必需要落地到磁盤,這個就是FstImage.日誌
但這樣尚未到萬事大吉的地步,內存中的元數據隨時可能更新,這時是否要同步更新FsImage呢?若是咱們更新,必然會致使效率底下,若是咱們不更新,那內存中的元數據和FsImage就會不一致,一旦出現NameNode節點斷電之類的狀況,就會出現部分數據丟失。server
那麼咱們引入這樣一個記錄文件Edits,只要內存中的元數據增長或者更新,那麼就同步把這個操做記錄追加到Edits,這樣即使NameNode斷電,咱們還能夠根據Edits和FsImage來恢復元數據。內存
新的問題又來了,內存中的元數據但是常常發生變化的,那不斷的追加記錄到Edits中,那必然會致使這個文件愈來愈大,那麼將來咱們須要恢復元數據時,須要花費的時間也必然大大增長,影響咱們效率,因此咱們須要按期對FsImage和Edits進行合併。同步
好了,任務來了,定義把FsImage和Edits進行合併,那這個任務誰來作呢?NameNode能夠嗎?固然能夠,但這會致使NameNode任務太重,影響效率,那爲了保證效率,就把這個任務交給另一我的來作,那就是Secondary NameNode。工作流
從這裏能夠明白Secondary NameNode並非NameNode的熱備,當NameNode掛了的時候,它並不能替代NameNode工做,但它能夠用幫助恢復NameNode。it
具體NameNode和Secondary NameNode的工做流程以下
階段1:
1)首次啓動集羣后,咱們須要對NameNode格式化,這時會建立FsImage和Edits,這些文件就在$HADOOP_HOME/data/name/current下.
以後啓動,直接加載Edits和FsImage到內存中。
2)Client也就是客戶端對元數據進行增刪改的操做請求。
3)NameNode先記錄操做,更新日誌,而後在內存中對元數據進行增刪改的操做。io
階段2:
SecondaryNameNode執行合併的操做,叫CheckPoint,這個操做有兩個觸發條件。
第一個,就是間隔時間到,默認是1小時,這個能夠調整。
第二個,就是SecondaryNameNode會一分鐘檢查一次操做次數,當操做數達到設置的上限,就會觸發。
1)首先SecondaryNameNode會詢問NameNode是否須要執行CheckPoint
2)拿到NameNode的返回結果,就開始請求執行CheckPoint
3)NameNode滾動更新正在的Edits日誌,將滾動前的Edits和FsImage文件拷貝到SecondaryNameNode上。
4)SecondaryNameNode將兩個文件加載到內存進行合併,生成新的fsImage.chkpoint,拷貝到NameNode上。
5)NameNode將fsimage.chkpoint命名爲fsimage。
固然在有了HA後,也不多使用SecondaryName了。
前面講了,當NameNode啓動後,首先是將FsImage和Edits文件加入內存,這個是爲保證獲得最新的元數據,這個其實也是合併,以後生成一個新的FsImage和一個空白的Edits,而後啓動IPC Server服務,監聽DataNode的請求,在這個期間,NameNode的文件系統對外界處於只讀狀態,也就是安全模式。
以後DataNode啓動,在各個DataNode經過NameNode的IPCServer 發送他們最新的塊列表信息。
當達到dfs.replication.min 設定的值,NameNode會退出安全模式,這個參數設置的值就是最小副本條件,指的是文件系統中塊知足的最小副本級別。