1、數(shù)據(jù)塊(block)
數(shù)據(jù)塊是磁盤(pán)讀/寫(xiě)的最小單位,每個(gè)磁盤(pán)都有默認(rèn)的數(shù)據(jù)塊大小沐兵。HDFS作為分布式文件系統(tǒng)也有塊的概念,但是數(shù)據(jù)塊比較大便监,默認(rèn)128MB扎谎。與磁盤(pán)上的文件系統(tǒng)相似,HDFS上的文件也被劃分為塊大小的多個(gè)分塊(chunk)烧董,作為存儲(chǔ)單元毁靶。但HDFS中小于128MB的文件不會(huì)占用整個(gè)塊的空間。(如1MB的文件存在一個(gè)128MB的塊中逊移,文件只占用1MB预吆,而不是128MB)
為什么HDFS中的塊是128MB,這么大胳泉?
HDFS中的塊比磁盤(pán)的塊大很多拐叉,其目的是為了最小化尋址開(kāi)銷。
不宜過(guò)小胶背,因?yàn)閚amenode中存儲(chǔ)了文件巷嚣、文件塊等元信息喘先,塊很小的話钳吟,元信息變大,namenode的內(nèi)存需求就變大窘拯。
不宜過(guò)大红且,因?yàn)镸apReduce中的map任務(wù)通常一次只處理一個(gè)塊中的數(shù)據(jù)。塊越大涤姊,map任務(wù)數(shù)越小暇番,如果任務(wù)數(shù)過(guò)少(少于集群中的節(jié)點(diǎn)數(shù)量),任務(wù)的運(yùn)行效率就是降低思喊。
對(duì)分布式文件系統(tǒng)中的“塊”進(jìn)行抽象帶來(lái)的好處
一個(gè)文件的大小可以大于網(wǎng)絡(luò)中任意一個(gè)磁盤(pán)的容量壁酬。因?yàn)橐粋€(gè)大文件的所有塊并不需要存儲(chǔ)在一個(gè)磁盤(pán)上,可以在集群的任意一個(gè)磁盤(pán)上進(jìn)行存儲(chǔ)恨课。
使用抽象塊而不是使用整個(gè)文件作為存儲(chǔ)單元舆乔,簡(jiǎn)化了存儲(chǔ)系統(tǒng)的設(shè)計(jì)。如簡(jiǎn)化了存儲(chǔ)管理剂公,塊大小是固定的希俩,計(jì)算一個(gè)磁盤(pán)能存儲(chǔ)多少個(gè)塊比較容易。
塊非常適合用于數(shù)據(jù)備份進(jìn)而提供數(shù)據(jù)容錯(cuò)能力和提高可用性纲辽。HDFS中默認(rèn)一個(gè)塊有三個(gè)副本颜武,確保在塊璃搜、磁盤(pán)或機(jī)器發(fā)生問(wèn)題時(shí)數(shù)據(jù)不會(huì)丟失。
可以為一些常用的文件設(shè)置更多的副本數(shù)來(lái)提高讀取效率鳞上。
2这吻、namenode 和 datanode
HDFS集群運(yùn)行的節(jié)點(diǎn)有兩類:管理節(jié)點(diǎn)(namenode)和工作節(jié)點(diǎn)(datanode)。
namenode
namenode負(fù)責(zé)管理文件系統(tǒng)的命名空間篙议。
負(fù)責(zé)維護(hù)文件系統(tǒng)樹(shù)及整個(gè)樹(shù)內(nèi)所有的文件和目錄橘原。這些信息以兩個(gè)文件形式永久保存在本地磁盤(pán)上:命名空間鏡像文件和編輯日志文件。
記錄著每個(gè)文件中各個(gè)塊所在的數(shù)據(jù)節(jié)點(diǎn)信息涡上,但并不是永久保存塊的位置信息趾断。系統(tǒng)在啟動(dòng)時(shí),datanode會(huì)向namenode匯報(bào)吩愧,namenode根據(jù)匯報(bào)重建這些信息芋酌。
datanode
datanode是文件系統(tǒng)的工作節(jié)點(diǎn)。
datanode根據(jù)客戶端或namenode的需要存儲(chǔ)并檢索數(shù)據(jù)塊雁佳。
定期向namenode發(fā)送自己所存儲(chǔ)的塊的列表脐帝。
3、塊緩存
通常datanode都是從磁盤(pán)中讀取塊糖权。對(duì)于訪問(wèn)很頻繁的文件堵腹,其對(duì)應(yīng)的塊可以被顯示的緩存在datanode的內(nèi)存中,以堆外緩存(off-heap block cache)的形式存在星澳。默認(rèn)是一個(gè)塊僅緩存在一個(gè)datanode的內(nèi)存中疚顷,也可以根據(jù)每個(gè)文件配置datanode的數(shù)量,來(lái)提高讀操作性能禁偎。
4腿堤、聯(lián)邦HDFS(federation)
namenode在內(nèi)存中保存文件系統(tǒng)中每個(gè)文件和每個(gè)數(shù)據(jù)塊的引用關(guān)系,對(duì)于一個(gè)擁有大量文件的超大集群來(lái)說(shuō)如暖,內(nèi)存將成為限制系統(tǒng)橫向擴(kuò)展的瓶頸笆檀。
在Hadoop2.x發(fā)行版中引入了聯(lián)邦HDFS,允許系統(tǒng)通過(guò)添加namenode實(shí)現(xiàn)擴(kuò)展盒至,每個(gè)namenode管理文件系統(tǒng)命名空間中的一部分酗洒。如一個(gè)namenode管理/user目錄下文件,另一個(gè)namenode管理/share目錄下的文件枷遂。
namespace volume
在聯(lián)邦環(huán)境下樱衷,每個(gè)namenode維護(hù)一個(gè)命名空間卷(namespace volume),由命名空間的元數(shù)據(jù)和一個(gè)數(shù)據(jù)塊池(block pool)組成登淘,數(shù)據(jù)塊池包含該命名空間下文件的所有數(shù)據(jù)塊箫老。
命名空間卷之間相互獨(dú)立,兩兩互補(bǔ)通信黔州。一個(gè)失效也不影響其他耍鬓。因此集群中的datanode要注冊(cè)到每個(gè)namenode阔籽,并且存儲(chǔ)來(lái)自多個(gè)數(shù)據(jù)塊池中的數(shù)據(jù)塊。
5 牲蜀、HDFS的高可用
Hadoop2 增加了對(duì)HDFS高可用性的支持笆制。
第一種配置了一對(duì) 活動(dòng)-備用(active-standby)namenode。當(dāng)active namenode失效后涣达,standby namenode就會(huì)接管它的任務(wù)并開(kāi)始服務(wù)來(lái)自客戶端的請(qǐng)求在辆,對(duì)客戶端來(lái)說(shuō)不會(huì)有明顯的中斷。
第二種通過(guò)federation機(jī)制也就是聯(lián)邦HDFS可以將多個(gè)namenode組成一個(gè)集群度苔,外部可通過(guò)viewfs://URI來(lái)訪問(wèn)匆篓。Hadoop會(huì)通過(guò)你訪問(wèn)的路徑來(lái)自動(dòng)選擇集群。