溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

HDFS的工作原理是什么呢

發(fā)布時(shí)間:2021-12-03 10:51:49 來(lái)源:億速云 閱讀:143 作者:柒染 欄目:大數(shù)據(jù)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)HDFS的工作原理是什么呢,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

Hadoop分布式文件系統(tǒng)(HDFS)是一種被設(shè)計(jì)成適合運(yùn)行在通用硬件上的分布式文件系統(tǒng)。HDFS是一個(gè)高度容錯(cuò)性的系統(tǒng),適合部署在廉價(jià)的 機(jī)器上。它能提供高吞吐量的數(shù)據(jù)訪問(wèn),非常適合大規(guī)模數(shù)據(jù)集上的應(yīng)用。要理解HDFS的內(nèi)部工作原理,首先要理解什么是分布式文件系統(tǒng)。

1、分布式文件系統(tǒng)

多臺(tái)計(jì)算機(jī)聯(lián)網(wǎng)協(xié)同工作(有時(shí)也稱為一個(gè)集群)就像單臺(tái)系統(tǒng)一樣解決某種問(wèn)題,這樣的系統(tǒng)我們稱之為分布式系統(tǒng)。

分布式文件系統(tǒng)是分布式系統(tǒng)的一個(gè)子集,它們解決的問(wèn)題就是數(shù)據(jù)存儲(chǔ)。換句話說(shuō),它們是橫跨在多臺(tái)計(jì)算機(jī)上的存儲(chǔ)系統(tǒng)。存儲(chǔ)在分布式文件系統(tǒng)上的數(shù)據(jù)自動(dòng)分布在不同的節(jié)點(diǎn)上。

分布式文件系統(tǒng)在大數(shù)據(jù)時(shí)代有著廣泛的應(yīng)用前景,它們?yōu)榇鎯?chǔ)和處理來(lái)自網(wǎng)絡(luò)和其它地方的超大規(guī)模數(shù)據(jù)提供所需的擴(kuò)展能力。

2、分離元數(shù)據(jù)和數(shù)據(jù):NameNode和DataNode

存儲(chǔ)到文件系統(tǒng)中的每個(gè)文件都有相關(guān)聯(lián)的元數(shù)據(jù)。元數(shù)據(jù)包括了文件名、i節(jié)點(diǎn)(inode)數(shù)、數(shù)據(jù)塊位置等,而數(shù)據(jù)則是文件的實(shí)際內(nèi)容。

在傳統(tǒng)的文件系統(tǒng)里,因?yàn)槲募到y(tǒng)不會(huì)跨越多臺(tái)機(jī)器,元數(shù)據(jù)和數(shù)據(jù)存儲(chǔ)在同一臺(tái)機(jī)器上。

為了構(gòu)建一個(gè)分布式文件系統(tǒng),讓客戶端在這種系統(tǒng)中使用簡(jiǎn)單,并且不需要知道其他客戶端的活動(dòng),那么元數(shù)據(jù)需要在客戶端以外維護(hù)。HDFS的設(shè)計(jì)理念是拿出一臺(tái)或多臺(tái)機(jī)器來(lái)保存元數(shù)據(jù),并讓剩下的機(jī)器來(lái)保存文件的內(nèi)容。

NameNode和DataNode是HDFS的兩個(gè)主要組件。其中,元數(shù)據(jù)存儲(chǔ)在NameNode上,而數(shù)據(jù)存儲(chǔ)在DataNode的集群上。  NameNode不僅要管理存儲(chǔ)在HDFS上內(nèi)容的元數(shù)據(jù),而且要記錄一些事情,比如哪些節(jié)點(diǎn)是集群的一部分,某個(gè)文件有幾份副本等。它還要決定當(dāng)集群的節(jié)點(diǎn)宕機(jī)或者數(shù)據(jù)副本丟失的時(shí)候系統(tǒng)需要做什么。

存儲(chǔ)在HDFS上的每份數(shù)據(jù)片有多份副本(replica)保存在不同的服務(wù)器上。在本質(zhì)上,NameNode是HDFS的Master(主服務(wù)器),DataNode是Slave(從服務(wù)器)。

3、HDFS寫過(guò)程

NameNode負(fù)責(zé)管理存儲(chǔ)在HDFS上所有文件的元數(shù)據(jù),它會(huì)確認(rèn)客戶端的請(qǐng)求,并記錄下文件的名字和存儲(chǔ)這個(gè)文件的DataNode集合。它把該信息存儲(chǔ)在內(nèi)存中的文件分配表里。

例如,客戶端發(fā)送一個(gè)請(qǐng)求給NameNode,說(shuō)它要將“zhou.log”文件寫入到HDFS。那么,其執(zhí)行流程如圖1所示。具體為:

***步:客戶端發(fā)消息給NameNode,說(shuō)要將“zhou.log”文件寫入。(如圖1中的①)

第二步:NameNode發(fā)消息給客戶端,叫客戶端寫到DataNode A、B和D,并直接聯(lián)系DataNode B。(如圖1中的②)

第三步:客戶端發(fā)消息給DataNode B,叫它保存一份“zhou.log”文件,并且發(fā)送一份副本給DataNode A和DataNode  D。(如圖1中的③)

第四步:DataNode B發(fā)消息給DataNode A,叫它保存一份“zhou.log”文件,并且發(fā)送一份副本給DataNode  D。(如圖1中的④)

第五步:DataNode A發(fā)消息給DataNode D,叫它保存一份“zhou.log”文件。(如圖1中的⑤)

第六步:DataNode D發(fā)確認(rèn)消息給DataNode A。(如圖1中的⑤)

第七步:DataNode A發(fā)確認(rèn)消息給DataNode B。(如圖1中的④)

第八步:DataNode B發(fā)確認(rèn)消息給客戶端,表示寫入完成。(如圖1中的⑥)

HDFS的工作原理是什么呢

圖1 HDFS寫過(guò)程示意圖

在分布式文件系統(tǒng)的設(shè)計(jì)中,挑戰(zhàn)之一是如何確保數(shù)據(jù)的一致性。對(duì)于HDFS來(lái)說(shuō),直到所有要保存數(shù)據(jù)的DataNodes確認(rèn)它們都有文件的副本 時(shí),數(shù)據(jù)才被認(rèn)為寫入完成。因此,數(shù)據(jù)一致性是在寫的階段完成的。一個(gè)客戶端無(wú)論選擇從哪個(gè)DataNode讀取,都將得到相同的數(shù)據(jù)。

4、HDFS讀過(guò)程

為了理解讀的過(guò)程,可以認(rèn)為一個(gè)文件是由存儲(chǔ)在DataNode上的數(shù)據(jù)塊組成的??蛻舳瞬榭粗皩懭氲膬?nèi)容的執(zhí)行流程如圖2所示,具體步驟為:

***步:客戶端詢問(wèn)NameNode它應(yīng)該從哪里讀取文件。(如圖2中的①)

第二步:NameNode發(fā)送數(shù)據(jù)塊的信息給客戶端。(數(shù)據(jù)塊信息包含了保存著文件副本的DataNode的IP地址,以及DataNode在本地硬盤查找數(shù)據(jù)塊所需要的數(shù)據(jù)塊ID。)  (如圖2中的②)

第三步:客戶端檢查數(shù)據(jù)塊信息,聯(lián)系相關(guān)的DataNode,請(qǐng)求數(shù)據(jù)塊。(如圖2中的③)

第四步:DataNode返回文件內(nèi)容給客戶端,然后關(guān)閉連接,完成讀操作。(如圖2中的④)

HDFS的工作原理是什么呢

圖2 HDFS讀過(guò)程示意圖

客戶端并行從不同的DataNode中獲取一個(gè)文件的數(shù)據(jù)塊,然后聯(lián)結(jié)這些數(shù)據(jù)塊,拼成完整的文件。

5、通過(guò)副本快速恢復(fù)硬件故障

當(dāng)一切運(yùn)行正常時(shí),DataNode會(huì)周期性發(fā)送心跳信息給NameNode(默認(rèn)是每3秒鐘一次)。如果NameNode在預(yù)定的時(shí)間內(nèi)沒(méi)有收到 心跳信息(默認(rèn)是10分鐘),它會(huì)認(rèn)為DataNode出問(wèn)題了,把它從集群中移除,并且啟動(dòng)一個(gè)進(jìn)程去恢復(fù)數(shù)據(jù)。DataNode可能因?yàn)槎喾N原因脫離 集群,如硬件故障、主板故障、電源老化和網(wǎng)絡(luò)故障等。

對(duì)于HDFS來(lái)說(shuō),丟失一個(gè)DataNode意味著丟失了存儲(chǔ)在它的硬盤上的數(shù)據(jù)塊的副本。假如在任意時(shí)間總有超過(guò)一個(gè)副本存在(默認(rèn)3個(gè)),故障 將不會(huì)導(dǎo)致數(shù)據(jù)丟失。當(dāng)一個(gè)硬盤故障時(shí),HDFS會(huì)檢測(cè)到存儲(chǔ)在該硬盤的數(shù)據(jù)塊的副本數(shù)量低于要求,然后主動(dòng)創(chuàng)建需要的副本,以達(dá)到滿副本數(shù)狀態(tài)。

6、跨多個(gè)DataNode切分文件

在HDFS里,文件被切分成數(shù)據(jù)塊,通常每個(gè)數(shù)據(jù)塊64MB~128MB,然后每個(gè)數(shù)據(jù)塊被寫入文件系統(tǒng)。同一個(gè)文件的不同數(shù)據(jù)塊不一定保存在相同的DataNode上。這樣做的好處是,當(dāng)對(duì)這些文件執(zhí)行運(yùn)算時(shí),能夠通過(guò)并行方式讀取和處理文件的不同部分。

當(dāng)客戶端準(zhǔn)備寫文件到HDFS并詢問(wèn)NameNode應(yīng)該把文件寫到哪里時(shí),NameNode會(huì)告訴客戶端,那些可以寫入數(shù)據(jù)塊的 DataNode。寫完一批數(shù)據(jù)塊后,客戶端會(huì)回到NameNode獲取新的DataNode列表,把下一批數(shù)據(jù)塊寫到新列表中的DataNode上。

上述就是小編為大家分享的HDFS的工作原理是什么呢了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI