如何快速入門(mén)大數(shù)據(jù)?HDFS基本原理和設(shè)計(jì)理念
本節(jié)將對(duì) HDFS 的基本原理進(jìn)行講解。
文件系統(tǒng)的問(wèn)題
文件系統(tǒng)是操作系統(tǒng)提供的磁盤(pán)空間管理服務(wù),該服務(wù)只需要用戶(hù)指定文件的存儲(chǔ)位置及文件讀取路徑,而不需要用戶(hù)了解文件在磁盤(pán)上是如何存放的。
但是當(dāng)文件所需空間大于本機(jī)磁盤(pán)空間時(shí),應(yīng)該如何處理呢?
加磁盤(pán),但是加到一定程度就有限制了。加機(jī)器,即用遠(yuǎn)程共享目錄的方式提供網(wǎng)絡(luò)化的存儲(chǔ),這種方式可以理解為分布式文件系統(tǒng)的雛形,它可以把不同文件放入不同的機(jī)器中,而且空間不足時(shí)可繼續(xù)加機(jī)器,突破了存儲(chǔ)空間的限制。
但是這種傳動(dòng)的分布式文件系統(tǒng)存在多個(gè)問(wèn)題。
1)各個(gè)存儲(chǔ)結(jié)點(diǎn)的負(fù)載不均衡,單機(jī)負(fù)載可能極高。例如,如果某個(gè)文件是熱門(mén)文件,則會(huì)有很多用戶(hù)經(jīng)常讀取這個(gè)文件,這就會(huì)造成該文件所在機(jī)器的訪問(wèn)壓力極高。
2)數(shù)據(jù)可靠性低。如果某個(gè)文件所在的機(jī)器出現(xiàn)故障,那么這個(gè)文件就不能訪問(wèn)了,甚至?xí)斐蓴?shù)據(jù)的丟失。
3)文件管理困難。如果想把一些文件的存儲(chǔ)位置進(jìn)行調(diào)整,就需要查看目標(biāo)機(jī)器的空間是否夠用,并且需要管理員維護(hù)文件位置,在機(jī)器非常多的情況下,這種操作就極為復(fù)雜。
HDFS 的基本思想
HDFS 是個(gè)抽象層,底層依賴(lài)很多獨(dú)立的服務(wù)器,對(duì)外提供統(tǒng)一的文件管理功能。HDFS 的基本架構(gòu)如圖 1 所示。

圖 1 HDFS的基本架構(gòu)
例如,用戶(hù)訪問(wèn) HDFS 中的 /a/b/c.mpg 這個(gè)文件時(shí),HDFS 負(fù)責(zé)從底層的相應(yīng)服務(wù)器中讀取該文件,然后返回給用戶(hù),這樣用戶(hù)就只需和 HDFS 打交道,而不用關(guān)心這個(gè)文件是如何存儲(chǔ)的。
為了解決存儲(chǔ)結(jié)點(diǎn)負(fù)載不均衡的問(wèn)題,HDFS 首先把一個(gè)文件分割成多個(gè)塊,然后再把這些文件塊存儲(chǔ)在不同服務(wù)器上。這種方式的優(yōu)勢(shì)就是不怕文件太大,并且讀文件的壓力不會(huì)全部集中在一臺(tái)服務(wù)器上,從而可以避免某個(gè)熱點(diǎn)文件會(huì)帶來(lái)的單機(jī)負(fù)載過(guò)高的問(wèn)題。
例如,用戶(hù)需要保存文件 /a/b/xxx.avi 時(shí),HDFS 首先會(huì)把這個(gè)文件進(jìn)行分割,如分為 4 塊,然后分別存放到不同的服務(wù)器上,如圖 2 所示。
但是如果某臺(tái)服務(wù)器壞了,那么文件就會(huì)讀不全。如果磁盤(pán)不能恢復(fù),那么存儲(chǔ)在上面的數(shù)據(jù)就會(huì)丟失。為了保證文件的可靠性,HDFS 會(huì)把每個(gè)文件塊進(jìn)行多個(gè)備份,一般情況下是 3 個(gè)備份。
假如要在由服務(wù)器 A、B、C 和 D 的存儲(chǔ)結(jié)點(diǎn)組成的 HDFS 上存儲(chǔ)文件 /a/b/xxx.avi,則 HDFS 會(huì)把文件分成 4 塊,分別為塊 1、塊 2、塊 3 和塊 4。為了保證文件的可靠性,HDFS 會(huì)把數(shù)據(jù)塊按以下方式存儲(chǔ)到 4 臺(tái)服務(wù)器上,如圖 3 所示。

圖 2 HDFS 文件分塊存儲(chǔ)示意

圖 3 HDFS 文件多副本存儲(chǔ)示意
采用分塊多副本存儲(chǔ)方式后,HDFS 文件的可靠性就大大增強(qiáng)了,即使某個(gè)服務(wù)器出現(xiàn)故障,也仍然可以完整讀取文件,該方式同時(shí)還帶來(lái)一個(gè)很大的好處,就是增加了文件的并發(fā)訪問(wèn)能力。例如,多個(gè)用戶(hù)讀取這個(gè)文件時(shí),都要讀取塊 1,HDFS 可以根據(jù)服務(wù)器的繁忙程度,選擇從哪臺(tái)服務(wù)器讀取塊 1。
為了管理文件,HDFS 需要記錄維護(hù)一些元數(shù)據(jù),也就是關(guān)于文件數(shù)據(jù)信息的數(shù)據(jù),如 HDFS 中存了哪些文件,文件被分成了哪些塊,每個(gè)塊被放在哪臺(tái)服務(wù)器上等。
HDFS 把這些元數(shù)據(jù)抽象為一個(gè)目錄樹(shù),來(lái)記錄這些復(fù)雜的對(duì)應(yīng)關(guān)系。這些元數(shù)據(jù)由一個(gè)單獨(dú)的模塊進(jìn)行管理,這個(gè)模塊叫作名稱(chēng)結(jié)點(diǎn)(NameNode)。存放文件塊的真實(shí)服務(wù)器叫作數(shù)據(jù)結(jié)點(diǎn)(DataNode)。
HDFS 的設(shè)計(jì)理念
簡(jiǎn)單來(lái)講,HDFS 的設(shè)計(jì)理念是,可以運(yùn)行在普通機(jī)器上,以流式數(shù)據(jù)方式存儲(chǔ)文件,一次寫(xiě)入、多次查詢(xún),具體有以下幾點(diǎn)。
1) 可構(gòu)建在廉價(jià)機(jī)器上
HDFS 的設(shè)計(jì)理念之一就是讓它能運(yùn)行在普通的硬件之上,即便硬件出現(xiàn)故障,也可以通過(guò)容錯(cuò)策略來(lái)保證數(shù)據(jù)的高可用性。
2)高容錯(cuò)性
由于 HDFS 需要建立在普通計(jì)算機(jī)上,所以結(jié)點(diǎn)故障是正常的事情。HDFS 將數(shù)據(jù)自動(dòng)保存多個(gè)副本,副本丟失后,自動(dòng)恢復(fù),從而實(shí)現(xiàn)數(shù)據(jù)的高容錯(cuò)性。
3)適合批處理
HDFS 適合一次寫(xiě)入、多次查詢(xún)(讀?。┑那闆r。在數(shù)據(jù)集生成后,需要長(zhǎng)時(shí)間在此數(shù)據(jù)集上進(jìn)行各種分析。每次分析都將涉及該數(shù)據(jù)集的大部分?jǐn)?shù)據(jù)甚至全部數(shù)據(jù),因此讀取整個(gè)數(shù)據(jù)集的時(shí)間延遲比讀取第一條記錄的時(shí)間延遲更重要。
4) 適合存儲(chǔ)大文件
這里說(shuō)的大文件包含兩種意思:一是值文件大小超過(guò) 100MB 及達(dá)到 GB 甚至 TB、PB 級(jí)的文件;二是百萬(wàn)規(guī)模以上的文件數(shù)量。
HDFS 的局限
HDFS 的設(shè)計(jì)理念是為了滿足特定的大數(shù)據(jù)應(yīng)用場(chǎng)景,所以 HDFS 具有一定的局限性,不能適用于所有的應(yīng)用場(chǎng)景,HDFS 的局限主要有以下幾點(diǎn)。
1) 實(shí)時(shí)性差
要求低時(shí)間延遲的應(yīng)用不適合在 HDFS 上運(yùn)行,HDFS 是為高數(shù)據(jù)吞吐量應(yīng)用而優(yōu)化的,這可能會(huì)以高時(shí)間延遲為代價(jià)。
2) 小文件問(wèn)題
由于 NameNode 將文件系統(tǒng)的元數(shù)據(jù)存儲(chǔ)在內(nèi)存中,因此該文件系統(tǒng)所能存儲(chǔ)的文件總量受限于 NameNode 的內(nèi)存總?cè)萘?。根?jù)經(jīng)驗(yàn),每個(gè)文件、目錄和數(shù)據(jù)塊的存儲(chǔ)信息大約占 150 字節(jié)。過(guò)多的小文件存儲(chǔ)會(huì)大量消耗 NameNode 的存儲(chǔ)量。
3)文件修改問(wèn)題
HDFS 中的文件只有一個(gè)寫(xiě)入者,而且寫(xiě)操作總是將數(shù)據(jù)添加在文件的末尾。HDFS 不支持具有多個(gè)寫(xiě)入者的操作,也不支持在文件的任意位置進(jìn)行修改。


有什么疑問(wèn)可以隨時(shí)私信我哦~~~