NameNode的做用:node
管理着文件系統的命名空間。它維護着文件系統數以及文件樹中全部的文件和目錄。這些信息以兩個文件形式永久保存在本地磁盤中(這兩個文件也會被持久化存儲在本地硬盤),分別是命名空間鏡像文件(fsimage)和操做日誌文件(editslog),這些信息被Cache在RAM中。NameNode記錄着每一個文件中各個塊所在的數據節點信息,可是他並不永久保存這些塊的信息,由於這些信息會在系統啓動時從數據節點信息重建。網絡
Nameode的容錯:架構
第一種方式:是將持久化存儲在本地硬盤的文件系統元數據備份。Hadoop能夠經過配置來讓Namenode將他的持久化狀態文件寫到不一樣的文件系統中,這種寫操做是同步而且是原子化的。比較常見的配置是將持久化狀態寫到本地硬盤的同時,也寫入到一個遠程掛載的網絡文件系統。oop
第二種方式:是運行一個輔助的NameNode(Secondary Namenode)。不過 Secondary並不能被用做Namenode,它的主要做用是按期將NameSpace鏡像與操做日誌文件(editslog)合併,以防止操做日誌文件(editslog)變得過大。一般,Secondary Namenode 運行在一個單獨的物理機上,由於合併操做須要佔用大量cpu時間以及和Namenode至關的內存。輔助Namenode保存着合併後的Namespace鏡像的一個備份,當Namenode發生故障時啓用。可是輔助namenode保存的狀態老是滯後於主節點,因此在主節點所有失效的時候,不免是會丟失部分數據。咱們通常採起的方案是,把存儲在遠程掛載的網絡文件系統中的namenode元數據複製到輔助namenode,並做爲新的namenode運行,或者,也能夠運行熱備份namenode代替運行輔助namenode。spa
第三種 zookeeper提供的高可用(ha)機制。Ha配置來一對活動備用(active-standby)namenode,當活動namenode失效時,備用的namenode就會接管他的任務並開始服務於來自客戶端的請求,不會有明顯的中斷。日誌
HA實現架構修改:內存
1,namenode之間須要經過高可用共享存儲實現編輯日誌的共享。當備用的namenode接管工做滯後,他將通讀共享編輯日誌直到末尾,已實現與活動namenode的狀態同步,並繼續讀取由活動namenode寫入的新條目。同步
2,datanode須要同時向兩個namenode發送數據塊處理報告,由於數據的映射信息存儲在namenode的內部中,而非磁盤。it
3,客戶端須要使用特定的機制來處理namenode的失效問題,這一機制對用戶是透明的。zookeeper
4,輔助namenode的角色被備用namenode所包含,備用的namenode爲活動的namenode命名空間設置週期性檢查點。
當活動的namenode失效,備用的namenode也失效(這種機率極低),管理員依舊能夠聲明一個備用namenode並實現冷啓動。