HDFS Federation(HDFS 联盟)介绍
1. 當(dāng)前HDFS架構(gòu)和功能概述
我們先回顧一下HDFS功能。HDFS實(shí)際上具有兩個(gè)功能:命名空間管理(Namespace management)和塊/存儲(chǔ)管理服務(wù)(block/storage management)。
1.1 命名空間管理
HDFS的命名空間包含目錄、文件和塊。命名空間管理:是指命名空間支持對(duì)HDFS中的目錄、文件和塊做類似文件系統(tǒng)的創(chuàng)建、修改、刪除、列表文件和目錄等基本操作。
1.2 塊/存儲(chǔ)管理
在塊存儲(chǔ)服務(wù)中包含兩部分工作:塊管理和物理存儲(chǔ)。這是一個(gè)更通用的存儲(chǔ)服務(wù)。其他的應(yīng)用可以直接建立在Block Storage上,如HBase,Foreign Namespaces等。
1.2.1 塊管理
A) 處理Data Node向Name Node注冊(cè)的請(qǐng)求,處理datanode的成員關(guān)系,處理來自Data Node周期性的心跳。
B) 處理來自塊的報(bào)告信息,維護(hù)塊的位置信息。
C) 處理與塊相關(guān)的操作:塊的創(chuàng)建、刪除、修改及獲取塊信息。
D) 管理副本放置(replica placement)和塊的復(fù)制及多余塊的刪除。
1.2.2 物理存儲(chǔ)
所謂物理存儲(chǔ)就是:Data Node把塊存儲(chǔ)到本地文件系統(tǒng)中,對(duì)本地文件系統(tǒng)的讀、寫。
1.3 當(dāng)前HDFS的架構(gòu)
在當(dāng)前的HDFS架構(gòu)中(Hadoop v0.23之前),在整個(gè)HDFS集群中只有一個(gè)命名空間,并且只有單獨(dú)的一個(gè)Name Node,這個(gè)Name Node負(fù)責(zé)對(duì)這單獨(dú)的一個(gè)命名空間進(jìn)行管理。這也正是單點(diǎn)失效(Single Point Failure)的隱患所在。本文所講的HDFS Federation就是針對(duì)當(dāng)前HDFS架構(gòu)上的缺陷所做的改進(jìn),簡(jiǎn)單說HDFS Federation就是使得HDFS支持多個(gè)命名空間,并且允許在HDFS中同時(shí)存在多個(gè)Name Node。
簡(jiǎn)單回顧一下目前HDFS的架構(gòu),如下圖所示。在整個(gè)HDFS集群中只有一個(gè)Namenode,還有一個(gè)Backup Namenode。Namenode會(huì)實(shí)時(shí)將變化的HDFS的信息同步給Backup Namenode。Backup Namenode顧名思義是用來做Namenode的備份的。Namenode中命名空間以層次結(jié)構(gòu)組織中存儲(chǔ)著文件名和BlockID的對(duì)應(yīng)關(guān)系、BlockID和具體Block位置的對(duì)應(yīng)關(guān)系。這個(gè)單獨(dú)的Namenode管理著數(shù)個(gè)Datanode,Block分布在各個(gè)Datanode中,每個(gè)Datanode會(huì)周期性的向此Namenode發(fā)送心跳消息,報(bào)告自己所在Datanode的使用狀態(tài)。Block是用來存儲(chǔ)數(shù)據(jù)的最小單元,通常一個(gè)文件會(huì)存儲(chǔ)在一個(gè)或者多個(gè)Block中,默認(rèn)Block大小為64MB。
2. 單個(gè)Namenode的HDFS架構(gòu)的局限性
2.1 Namespace(命名空間)的限制
由于Namenode在內(nèi)存中存儲(chǔ)所有的元數(shù)據(jù)(metadata),因此單個(gè)Namenode所能存儲(chǔ)的對(duì)象(文件+塊)數(shù)目受到Namenode所在JVM的heap size的限制。50G的heap能夠存儲(chǔ)20億(200 million)個(gè)對(duì)象,這20億個(gè)對(duì)象支持4000個(gè)datanode,12PB的存儲(chǔ)(假設(shè)文件平均大小為40MB)。 隨著數(shù)據(jù)的飛速增長(zhǎng),存儲(chǔ)的需求也隨之增長(zhǎng)。單個(gè)datanode從4T增長(zhǎng)到36T,集群的尺寸增長(zhǎng)到8000個(gè)datanode。存儲(chǔ)的需求從12PB增長(zhǎng)到大于100PB。2.2 性能的瓶頸
由于是單個(gè)Namenode的HDFS架構(gòu),因此整個(gè)HDFS文件系統(tǒng)的吞吐量受限于單個(gè)Namenode的吞吐量。毫無疑問,這將成為下一代MapReduce的瓶頸。2.3 隔離問題
由于HDFS僅有一個(gè)Namenode,無法隔離各個(gè)程序,因此HDFS上的一個(gè)實(shí)驗(yàn)程序就很有可能影響整個(gè)HDFS上運(yùn)行的程序。那么在HDFS Federation中,可以用不同的Namespace來隔離不同的用戶應(yīng)用程序,使得不同Namespace Volume中的程序相互不影響。2.4 集群的可用性
在只有一個(gè)Namenode的HDFS中,此Namenode的宕機(jī)無疑會(huì)導(dǎo)致整個(gè)集群不可用。2.5 Namespace和Block Management的緊密耦合
當(dāng)前在Namenode中的Namespace和Block Management組合的緊密耦合關(guān)系會(huì)導(dǎo)致如果想要實(shí)現(xiàn)另外一套Namenode方案比較困難,而且也限制了其他想要直接使用塊存儲(chǔ)的應(yīng)用。2.6 為什么縱向擴(kuò)展目前的Namenode不可行?比如將Namenode的Heap空間擴(kuò)大到512GB。
這樣縱向擴(kuò)展帶來的第一個(gè)問題就是啟動(dòng)問題,啟動(dòng)花費(fèi)的時(shí)間太長(zhǎng)。當(dāng)前具有50GB Heap Namenode的HDFS啟動(dòng)一次大概需要30分鐘到2小時(shí),那512GB的需要多久? 第二個(gè)潛在的問題就是Namenode在Full GC時(shí),如果發(fā)生錯(cuò)誤將會(huì)導(dǎo)致整個(gè)集群宕機(jī)。 第三個(gè)問題是對(duì)大JVM Heap進(jìn)行調(diào)試比較困難。優(yōu)化Namenode的內(nèi)存使用性價(jià)比比較低。3. 為什么要引入Federation
引入Federation的最主要原因是簡(jiǎn)單,其簡(jiǎn)單性是與真正的分布式Namenode相比而言的。Federation能夠快速的解決了大部分單Namenode HDFS的問題。
Federation是簡(jiǎn)單魯棒的設(shè)計(jì),由于聯(lián)盟中各個(gè)Namenode之間是相互獨(dú)立的。Federation整個(gè)核心設(shè)計(jì)實(shí)現(xiàn)大概用了3.5個(gè)月。大部分改變是在Datanode、Config和Tools,而Namenode本身的改動(dòng)非常少,這樣Namenode原先的魯棒性不會(huì)受到影響。比分布式的Namenode簡(jiǎn)單,雖然這種實(shí)現(xiàn)的擴(kuò)展性比起真正的分布式的Namenode要小些,但是可以迅速滿足需求。另外一個(gè)原因是Federation良好的向后兼容性,已有的單Namenode的部署配置不需要任何改變就可以繼續(xù)工作。
因此Federation(聯(lián)盟)是未來可選的方案之一。在Federation架構(gòu)中可以無縫的支持目前單Namenode架構(gòu)中的配置。4. HDFS Federation
HDFS Federation使用了多個(gè)獨(dú)立的Namenode/namespace來使得HDFS的命名服務(wù)能夠水平擴(kuò)展。在HDFS Federation中的Namenode之間是聯(lián)盟關(guān)系,他們之間相互獨(dú)立且不需要相互協(xié)調(diào)。HDFS Federation中的Namenode提供了提供了命名空間和塊管理功能。HDFS Federation中的datanode被所有的Namenode用作公共存儲(chǔ)塊的地方。每一個(gè)datanode都會(huì)向所在集群中所有的Namenode注冊(cè),并且會(huì)周期性的發(fā)送心跳和塊信息報(bào)告,同時(shí)處理來自Namenode的指令。4.1 Federation HDFS與當(dāng)前HDFS的比較
- 當(dāng)前HDFS只有一個(gè)命名空間(Namespace),它使用全部的塊。而Federation HDFS中有多個(gè)獨(dú)立的命名空間(Namespace),并且每一個(gè)命名空間使用一個(gè)塊池(block pool)。
- 當(dāng)前HDFS中只有一組塊。而Federation HDFS中有多組獨(dú)立的塊。塊池(block pool)就是屬于同一個(gè)命名空間的一組塊。
- 當(dāng)前HDFS由一個(gè)Namenode和一組datanode組成。而Federation HDFS由多個(gè)Namenode和一組datanode,每一個(gè)datanode會(huì)為多個(gè)塊池(block pool)存儲(chǔ)塊。
4.2 Block Pool(塊池)
所謂Block pool(塊池)就是屬于單個(gè)命名空間的一組block(塊)。每一個(gè)datanode為所有的block pool存儲(chǔ)塊。Datanode是一個(gè)物理概念,而block pool是一個(gè)重新將block劃分的邏輯概念。同一個(gè)datanode中可以存著屬于多個(gè)block pool的多個(gè)塊。Block pool允許一個(gè)命名空間在不通知其他命名空間的情況下為一個(gè)新的block創(chuàng)建Block ID。同時(shí),一個(gè)Namenode失效不會(huì)影響其下的datanode為其他Namenode的服務(wù)。
當(dāng)datanode與Namenode建立聯(lián)系并開始會(huì)話后自動(dòng)建立Block pool。每個(gè)block都有一個(gè)唯一的標(biāo)識(shí),這個(gè)標(biāo)識(shí)我們稱之為擴(kuò)展的塊ID(Extended Block ID)= BlockID+BlockID。這個(gè)擴(kuò)展的塊ID在HDFS集群之間都是唯一的,這為以后集群歸并創(chuàng)造了條件。
Datanode中的數(shù)據(jù)結(jié)構(gòu)都通過塊池ID(BlockPoolID)索引,即datanode中的BlockMap,storage等都通過BPID索引。
在HDFS中,所有的更新、回滾都是以Namenode和BlockPool為單元發(fā)生的。即同一HDFS Federation中不同的Namenode/BlockPool之間沒有什么關(guān)系。
Hadoop V0.23版本中Block Pool的管理功能依然放在了Namenode中,將來的版本中會(huì)將Block Pool的管理功能移動(dòng)的新的功能節(jié)點(diǎn)中。
4.3 Datanode的改進(jìn)
在datanode中,對(duì)應(yīng)于每個(gè)Namnode都有一條相應(yīng)的線程。每個(gè)datanode會(huì)去每一個(gè)Namenode注冊(cè),并且周期性的給所有的Namenode發(fā)送心跳及datanode的使用報(bào)告。Datanode還會(huì)給Namenode發(fā)送其所在的block pool的block report(塊報(bào)告)。由于有多個(gè)Namenode同時(shí)存在,因此任何一個(gè)Namenode都可以隨時(shí)動(dòng)態(tài)加入、刪除和更新。
4.4 Federation中的其他方面的改進(jìn)
- 提供了工具,對(duì)于Namenode的初始化和退役的監(jiān)控和管理。
- 允許在datanode級(jí)別或者block pool級(jí)別的負(fù)載均衡。
- Datanode的后臺(tái)守護(hù)進(jìn)程,為Federation所做的磁盤和目錄掃描。
- 提供了顯示Namenode的Block pool的使用狀態(tài)的Web UI。
- 還提供了對(duì)全部集群存儲(chǔ)使用狀態(tài)的UI展示。
- 在Web UI中列出了所有的Namenode及其細(xì)節(jié),如Namenode-BlockPoolID和存儲(chǔ)的使用狀態(tài),失去聯(lián)系的、活的和死的塊信息。還有前往各個(gè)Namenode Web UI的鏈接。
- Datanode退役狀態(tài)的展示。
4.5 多命名空間的管理問題
在一個(gè)集群中需要唯一的命名空間還是多個(gè)命名空間,核心問題命名空間中數(shù)據(jù)的共享和訪問的問題。使用全局唯一的命名空間是解決數(shù)據(jù)共享和訪問的一種方法。在多命名空間下,我們還可以使用Client Side Mount Table方式做到數(shù)據(jù)共享和訪問。如上圖所示,每個(gè)深色三角形代表一個(gè)獨(dú)立的命名空間,上方淺色的三角形代表從客戶角度去訪問下方的子命名空間。各個(gè)深色的命名空間Mount到淺色的表中,客戶可以訪問不同的掛載點(diǎn)來訪問不同的命名空間,這就如同在Linux系統(tǒng)中訪問不同掛載點(diǎn)一樣。這就是HDFS Federation中命名空間管理的基本原理:將各個(gè)命名空間掛載到全局mount-table中,就可以做將數(shù)據(jù)到全局共享;同樣的命名空間掛載到個(gè)人的mount-table中,這就成為應(yīng)用程序可見的命名空間視圖。
4.6 Namespace Volume(命名空間卷)
一個(gè)Namespace和它的Block Pool合在一起稱作Namespace Volume。Namespace Volume是一個(gè)獨(dú)立完整的管理單元。當(dāng)一個(gè)Namenode/Namespace被刪除,與之相對(duì)應(yīng)的Block Pool也也被刪除。在升級(jí)時(shí)每一個(gè)Namespace Volume也會(huì)整體作為一個(gè)單元。4.7 ClusterID
在HDFS Federation中添加了Cluster ID用來區(qū)分集群中的每個(gè)節(jié)點(diǎn)。當(dāng)格式化一個(gè)Namenode時(shí),這個(gè)ClusterID會(huì)自動(dòng)生成或者手動(dòng)提供。在格式化同一集群中其他Namenode時(shí)會(huì)用到這個(gè)ClusterID。
4.8 HDFS Federation對(duì)老版本的HDFS是兼容的
這種兼容性可以使得已有的Namenode配置不需要任何改變繼續(xù)工作。
具體的如何配置和管理Federation HDFS,請(qǐng)參考?http://hadoop.apache.org/common/docs/r0.23.0/hadoop-yarn/hadoop-yarn-site/Federation.html#Federation_Configuration?。
總結(jié)
以上是生活随笔為你收集整理的HDFS Federation(HDFS 联盟)介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: truncate,delete,drop
- 下一篇: ajax参数中有加号,浅谈在js传递参数