在Hadoop 2.0以前,也有若干技術試圖解決單點故障的問題:html
Secondary NameNode。node
它不是HA,它只是階段性的合併edits和fsimage,以縮短集羣啓動的時間。apache
當NameNode失效的時候,Secondary NN並沒有法馬上提供服務,Secondary NN甚至沒法保證數據完整性:安全
若是NN數據丟失的話,在上一次合併後的文件系統的改動會丟失。架構
Backup NameNode 。oop
它在內存中複製了NN的當前狀態,算是Warm Standby,可也就僅限於此,並無failover等。性能
它一樣是階段性的作checkpoint,也沒法保證數據完整性。spa
手動把name.dir指向NFS。安全的Cold Standby,能夠保證元數據不丟失,但集羣的恢復則徹底靠手動。htm
單NN的架構使得HDFS在集羣擴展性和性能上都有潛在的問題,當集羣大到必定程度後,NN進程使用的內存可能會達到上百G,經常使用的估算公式爲1G對應1百萬個塊,按缺省塊大小計算的話,大概是64T。同時,全部的元數據信息的讀取和操做都須要與NN進行通訊,譬如客戶端的addBlock、getBlockLocations,還有DataNode的blockRecieved、sendHeartbeat、blockReport,在集羣規模變大後,NN成爲了性能的瓶頸。blog
HDFS Federation是爲解決HDFS單點故障而提出的NameNode水平擴展方案。
容許HDFS建立多個NameSpace以提升集羣擴展性和隔離性。
當前HDFS包含兩層結構:
(1) Namespace 管理目錄,文件和數據塊。它支持常見的文件系統操做,如建立文件,修改文件,刪除文件等。
(2)Block Storage有兩部分組成: Block Management維護集羣中datanode的基本關係,它支持數據塊相關的操做,如:建立數據塊,刪除數據塊等,同時,它也會管理副本的複製和存放。 Physical Storage存儲實際的數據塊並提供針對數據塊的讀寫服務。
HDFS架構只容許整個集羣中存在一個namespace,而該namespace被僅有的一個namenode管理。這個架構使得HDFS很是容易實現,可是,它(見上圖)在具體實現過程當中會出現一些模糊點,進而致使了不少侷限性
參考文獻:
[0] HDFS Federation
https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/Federation.html
[1] An Introduction to HDFS Federation
http://zh.hortonworks.com/blog/an-introduction-to-hdfs-federation/