HDFS Federation
HDFS Federation是Hadoop最新發(fā)布版本Hadoop-0.23.0中為解決HDFS單點故障而提出的namenode水平擴展方案帆卓。該方案允許HDFS創(chuàng)建多個namespace以提高集群的擴展性和隔離性。本篇文章主要介紹了HDFS Federation的設(shè)計動機和基本原理剑令。
背景
- Namespace 管理目錄吁津,文件和數(shù)據(jù)塊。它支持常見的文件系統(tǒng)操作梭依,如創(chuàng)建文件典尾,修改文件,刪除文件等河闰。
- Block Storage 由兩部分組成:Block Management維護集群中datanode的基本關(guān)系,它支持數(shù)據(jù)塊相關(guān)的操作姜性,如:創(chuàng)建數(shù)據(jù)塊,刪除數(shù)據(jù)塊等弃酌,同時儡炼,它也會管理副本的復(fù)制和存放。Physical Storage存儲實際的數(shù)據(jù)塊并提供針對數(shù)據(jù)塊的讀寫服務(wù)多柑。
以前的HDFS架構(gòu)只允許一個集群擁有一個命名空間楣责,一個Namenode管理著整個命名空間。HDFS Federation通過向HDFS增加多Namenode和namespace來解決這種限制初嘹。
HDFS Federation
為了水平擴展name service沮趣,F(xiàn)ederation使用了獨立的多Namenode/Namespaces的架構(gòu)房铭。這些namenode之間是聯(lián)合的,也就是說缸匪,他們之間相互獨立且不需要互相協(xié)調(diào),各自分工露懒,管理自己的區(qū)域砂心。(The Namenodes are federated; the Namenodes are independent and do not require coordination with each other.)Datanode被用作是存儲設(shè)備,在集群中坎弯,每一個Datanode都在Namenodes上注冊。Datanodes周期性的發(fā)送心跳包和關(guān)于塊的報告洒琢。Datanodes也要處理來自Namenodes的命令褐桌。
幾個關(guān)鍵的概念
- Block Pool 塊池,一個Block Pool是屬于同一個namespace下的一組塊集合呛踊。每個datanode可能會存儲集群中所有Block Pool的數(shù)據(jù)塊啦撮。(Datanodes store blocks for all the block pools in the cluster.)每個Block Pool的管理是獨立的。這樣的好處是愉择,允許一個namespace為一個新的塊生成一個Block IDs织中,而不需要和其他的namespace進行協(xié)調(diào)。一個namenode掛掉了狭吼,不會影響其他namenode。
- Namespace Volume 一個namespace和它的Block Pool一起被統(tǒng)稱為Namespace Volume破花。它是管理的最小單元疲吸。當(dāng)一個Namenode/namespace被刪除之后,每個Datanode上相應(yīng)的Block Pool也會被刪除尺栖。每個Namespace Volume是升級的最小的一個單元烦租。
- ClusterID 一個新的標識ClusterID添加到集群除盏,用來標記所有的Nodes,當(dāng)Namenode格式化時(formated)窃祝,將會自動創(chuàng)建ClusterID踱侣,這個ID用來區(qū)分集群中的Namenodes大磺。
Namespace的管理
Federation中存在多個命名空間杠愧,如何劃分和管理這些命名空間非常關(guān)鍵逞壁。在Federation中并采用“文件名hash”的方法,因為該方法的locality非常差绳瘟,比如:查看某個目錄下面的文件姿骏,如果采用文件名hash的方法存放文件,則這些文件可能被放到不同namespace中姨丈,HDFS需要訪問所有namespace擅腰,代價過大。為了方便管理多個命名空間歼争,HDFS Federation采用了經(jīng)典的Client Side Mount Table渗勘。
如圖三所示,下面四個深色三角形代表一個獨立的命名空間乔遮,上方淺色的三角形代表從客戶角度去訪問的子命名空間取刃。各個深色的命名空間Mount到淺色的表中,客戶可以訪問不同的掛載點來訪問不同的命名空間坯辩,這就如同在Linux系統(tǒng)中訪問不同掛載點一樣崩侠。這就是HDFS Federation中命名空間管理的基本原理:將各個命名空間掛載到全局mount-table中,就可以做將數(shù)據(jù)到全局共享改抡;同樣的命名空間掛載到個人的mount-table中,這就成為應(yīng)用程序可見的命名空間視圖阿纤。
HDFS Federation的優(yōu)勢
- 命名空間的擴展.因為隨著集群使用時間的加長,HDFS上存放的數(shù)據(jù)也將會越來越多.這個時候如果還是將所有的數(shù)據(jù)都往一個NameNode上存放,這個文件系統(tǒng)會顯得非常的龐大.這時候我們可以進行橫向擴展,把一些大的目錄分離出去.使得每個NameNode下的數(shù)據(jù)看起來更加的精簡阵赠。
- 性能的提升.這個也很好理解.當(dāng)NameNode所持有的數(shù)據(jù)量達到了一個非常大規(guī)模的量級的時候(比如超過1億個文件),這個時候NameNode的處理效率可能就會有影響,它可能比較容易的會陷入一個繁忙的狀態(tài).而整個集群將會受限于一個單點NameNode的處理效率,從而影響集群整體的吞吐量.這個時候多NameNode機制顯然可以減輕很多這部分的壓力。
- 資源的隔離.這一點考慮的就比較深了.通過多個命名空間,我們可以將關(guān)鍵數(shù)據(jù)文件目錄移到不同的NameNode上,以此不讓這些關(guān)鍵數(shù)據(jù)的讀寫操作受到其他普通文件讀寫操作的影響.也就是說這些NameNode將會只處理特定的關(guān)鍵的任務(wù)所發(fā)來的請求,而屏蔽了其他普通任務(wù)的文件讀寫請求,以此做到了資源的隔離.千萬不要小看這一點,當(dāng)你發(fā)現(xiàn)NameNode正在處理某個不良任務(wù)的大規(guī)模的請求操作導(dǎo)致響應(yīng)速度極慢時,你一定會非常的懊惱匕荸。