Hadoop 2.0 Federation

原文:http://www.linuxidc.com/Linux/2014-05/101179.htm

1 概述

Hadoop1.0的架構中,HDFS的所有的元數據都放在一個namenode中,只有一個namespace(名字空間)。這樣隨着HDFS的數據越來越多,單個namenode的資源使用必然會達到上限,而且namenode的負載也會越來越高,限制了HDFS的性能。

在hadoop2.0架構中,namenode federation(聯合)通過多個namenode/namespace把元數據的存儲和管理分散到多個節點中,使到namenode/namespace可以通過增加機器來進行水平擴展,並且能把單個namenode的負載分散到多個節點中,在HDFS數據規模較大的時候不會也降低HDFS的性能。還有可以通過多個namespace來隔離不同類型的應用,把不同類型應用的HDFS元數據的存儲和管理分派到不同的namenode中。

Hadoop2.0 federation介紹

2 架構

如果上圖所示,一個block pool由屬於同一個namespace的數據塊組成,每個namenode管理一個namespace,即每個namenode負責存儲和管理一個block pool的元數據。而每個datanode是會連接所有的namenode的,爲所有的block pools所共享,即每個datanode都會存儲所有的block pools的數據塊。每個block pool通過namespace隔離開來,對一個block pool的操作不會影響另外一個block pool。

從配置和使用的角度來看,整個HDFS有一個唯一的clusterid,如“hellokitty”,它可以配置多個block pool/namespace(也叫name service),如“mycluster”和“yourcluster”。爲了方便訪問不同名字空間的目錄和文件,federation還提供了一個類似linux的Client Side Mount Table的掛載機制,提供了一個統一的全局的文件系統視圖(viewfs)。用戶可以根據自己的需要把各個namespace掛載到一個叫做viewFS的文件系統視圖的不同目錄下。例如namespace/name service “mycluster”和“yourcluster”分別掛載到viewfs的“/my”和“/your”目錄下,如下圖所示:

Hadoop2.0 federation介紹

3 federation和HA

上面提到的每個namespace/name service配置一個namenode,這樣這個namespace/name service的單點問題還是存在,因此可以給每個namespace/name service配置成HA。

假設我們有4臺namenode,分別是namenode1,namenode2,namenode3,namenode4。其中namenode1和namenode2是namespace/name service“mycluster”的兩個主備namenode節點,NN_ID分別是“mycluster”的“nn1”和“nn2”;而namenode3和namenode4是namespace/name service“yourcluster”的兩個主備namenode節點,NN_ID分別是“yourcluster”的“nn1”和“nn2”。

“mycluster”和“yourcluster”分別掛載在viewfs的“/my”和“/your”目錄下。

結構如下圖所示:

Hadoop2.0 federation介紹

4 實戰tips

一般1000臺機器一下的中小規模的hadoop集羣,一個namespace/name service就足夠了,不需要考慮federation,以免增加不必要的複雜性。


Apache Hadoop HDFS federation官方wiki:http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/Federation.html

擴展閱讀:http://www.sizeofvoid.net/hadoop-2-0-namenode-ha-federation-practice-zh/


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章