一. 前言
1.namenode架構的局限性
(1)namespace(命名空間)的限制
由于namenode在內存中存儲所有的元數據(metadata),因此單個namenode所能存儲的對象(文件+塊)數目受到namenode所在jvm的heap size的限制。50g的heap能夠存儲20億(200million)個對象,這20億個對象支持4000個datanode,12pb的存儲(假設文件平均大小為40mb)。隨著數據的飛速增長,存儲的需求也隨之增長。單個datanode從4t增長到36t,集群的尺寸增長到8000個datanode。存儲的需求從12pb增長到大于100pb。
(2)隔離問題
由于hdfs僅有一個namenode,無法隔離各個程序,因此hdfs上的一個實驗程序就很有可能影響整個hdfs上運行的程序。
(3)性能的瓶頸
由于是單個namenode的hdfs架構,因此整個hdfs文件系統的吞吐量受限于單個namenode的吞吐量。
2.hdfs federation架構設計,如圖所示
能不能有多個namenode
hdfs federation架構設計
二.實現
namenode ha是為了解決namenode可用性的問題,而namenode federation則主要是為了解決namenode擴展性,隔離性,以及單個namenode性能方面的問題。namenode federation架構如下:
namenode federation使用了多個命名空間,這些命名空間互相獨立,自制(其實是對元數據的水平切分),而集群中所有datanode向所有namenode都進行注冊,而一個塊池(block pool)有屬于同一個命名空間的數據塊組成,每個datanode可能會存儲集群中所有塊池的數據塊,每個塊池互相獨立,有一個掛掉了也不會影響其他塊池正常工作。
同時部署了namenode ha和namenode federation時,集群結構會相對復雜一點,如下圖。在實際的生成環境中,namenode ha幾乎是必備,而當集群規模在1000臺以下時,幾乎是不需要namenode federation的。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對服務器之家的支持。如果你想了解更多相關內容請查看下面相關鏈接
原文鏈接:https://blog.csdn.net/qq_43193797/article/details/85078422