溫馨提示×

溫馨提示×

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

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

分布式文件系統(tǒng)HDFS的示例分析

發(fā)布時(shí)間:2021-12-09 09:55:18 來源:億速云 閱讀:100 作者:小新 欄目:大數(shù)據(jù)

小編給大家分享一下分布式文件系統(tǒng)HDFS的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

從RAID說起

大數(shù)據(jù)技術(shù)主要要解決的問題的是大規(guī)模數(shù)據(jù)的計(jì)算處理問題,那么首先要解決的就是大規(guī)模數(shù)據(jù)的存儲問題。大規(guī)模數(shù)據(jù)存儲要解決的核心問題有三個(gè)方面:

  • 數(shù)據(jù)存儲容量的問題,既然大數(shù)據(jù)要解決的是數(shù)以PB計(jì)的數(shù)據(jù)計(jì)算問題,而一般的服務(wù)器磁盤容量通常1-2TB,那么如何存儲這么大規(guī)模的數(shù)據(jù)。

  • 數(shù)據(jù)讀寫速度的問題,一般磁盤的連續(xù)讀寫速度為幾十MB,以這樣的速度,幾十PB的數(shù)據(jù)恐怕要讀寫到天荒地老。

  • 數(shù)據(jù)可靠性的問題,磁盤大約是計(jì)算機(jī)設(shè)備中最易損壞的硬件了,在網(wǎng)站一塊磁盤使用壽命大概是一年,如果磁盤損壞了,數(shù)據(jù)怎么辦?

在大數(shù)據(jù)技術(shù)出現(xiàn)之前,人們就需要面對這些關(guān)于存儲的問題,對應(yīng)的解決方案就是RAID技術(shù)。

RAID(獨(dú)立磁盤冗余陣列)技術(shù)主要是為了改善磁盤的存儲容量,讀寫速度,增強(qiáng)磁盤的可用性和容錯(cuò)能力。目前服務(wù)器級別的計(jì)算機(jī)都支持插入多塊磁盤(8塊或者更多),通過使用RAID技術(shù),實(shí)現(xiàn)數(shù)據(jù)在多塊磁盤上的并發(fā)讀寫和數(shù)據(jù)備份。

常用RAID技術(shù)有以下幾種,如圖所示。

分布式文件系統(tǒng)HDFS的示例分析  
常用RAID技術(shù)原理圖

假設(shè)服務(wù)器有N塊磁盤。

RAID0

數(shù)據(jù)在從內(nèi)存緩沖區(qū)寫入磁盤時(shí),根據(jù)磁盤數(shù)量將數(shù)據(jù)分成N份,這些數(shù)據(jù)同時(shí)并發(fā)寫入N塊磁盤,使得數(shù)據(jù)整體寫入速度是一塊磁盤的N倍。讀取的時(shí)候也一樣,因此RAID0具有極快的數(shù)據(jù)讀寫速度,但是RAID0不做數(shù)據(jù)備份,N塊磁盤中只要有一塊損壞,數(shù)據(jù)完整性就被破壞,所有磁盤的數(shù)據(jù)都會損壞。

RAID1

數(shù)據(jù)在寫入磁盤時(shí),將一份數(shù)據(jù)同時(shí)寫入兩塊磁盤,這樣任何一塊磁盤損壞都不會導(dǎo)致數(shù)據(jù)丟失,插入一塊新磁盤就可以通過復(fù)制數(shù)據(jù)的方式自動修復(fù),具有極高的可靠性。

RAID10

結(jié)合RAID0和RAID1兩種方案,將所有磁盤平均分成兩份,數(shù)據(jù)同時(shí)在兩份磁盤寫入,相當(dāng)于RAID1,但是在每一份磁盤里面的N/2塊磁盤上,利用RAID0技術(shù)并發(fā)讀寫,既提高可靠性又改善性能,不過RAID10的磁盤利用率較低,有一半的磁盤用來寫備份數(shù)據(jù)。

RAID3

一般情況下,一臺服務(wù)器上不會出現(xiàn)同時(shí)損壞兩塊磁盤的情況,在只損壞一塊磁盤的情況下,如果能利用其他磁盤的數(shù)據(jù)恢復(fù)損壞磁盤的數(shù)據(jù),這樣在保證可靠性和性能的同時(shí),磁盤利用率也得到大幅提升。

在數(shù)據(jù)寫入磁盤的時(shí)候,將數(shù)據(jù)分成N-1份,并發(fā)寫入N-1塊磁盤,并在第N塊磁盤記錄校驗(yàn)數(shù)據(jù),任何一塊磁盤損壞(包括校驗(yàn)數(shù)據(jù)磁盤),都可以利用其他N-1塊磁盤的數(shù)據(jù)修復(fù)。

但是在數(shù)據(jù)修改較多的場景中,任何磁盤修改數(shù)據(jù)都會導(dǎo)致第N塊磁盤重寫校驗(yàn)數(shù)據(jù),頻繁寫入的后果是第N塊磁盤比其他磁盤容易損壞,需要頻繁更換,所以RAID3很少在實(shí)踐中使用。

RAID5

相比RAID3,更多被使用的方案是RAID5。

RAID5和RAID3很相似,但是校驗(yàn)數(shù)據(jù)不是寫入第N塊磁盤,而是螺旋式地寫入所有磁盤中。這樣校驗(yàn)數(shù)據(jù)的修改也被平均到所有磁盤上,避免RAID3頻繁寫壞一塊磁盤的情況。

RAID6

如果數(shù)據(jù)需要很高的可靠性,在出現(xiàn)同時(shí)損壞兩塊磁盤的情況下(或者運(yùn)維管理水平比較落后,壞了一塊磁盤但是遲遲沒有更換,導(dǎo)致又壞了一塊磁盤),仍然需要修復(fù)數(shù)據(jù),這時(shí)候可以使用RAID6。

RAID6和RAID5類似,但是數(shù)據(jù)只寫入N-2塊磁盤,并螺旋式地在兩塊磁盤中寫入校驗(yàn)信息(使用不同算法生成)。

在相同磁盤數(shù)目(N)的情況下,各種RAID技術(shù)的比較如下表所示。

分布式文件系統(tǒng)HDFS的示例分析  
幾種RAID技術(shù)比較  

RAID技術(shù)有硬件實(shí)現(xiàn),比如專用的RAID卡或者主板直接支持,也可以通過軟件實(shí)現(xiàn),在操作系統(tǒng)層面將多塊磁盤組成RAID,在邏輯視作一個(gè)訪問目錄。RAID技術(shù)在傳統(tǒng)關(guān)系數(shù)據(jù)庫及文件系統(tǒng)中應(yīng)用比較廣泛,是改善計(jì)算機(jī)存儲特性的重要手段。

RAID技術(shù)只是在單臺服務(wù)器的多塊磁盤上組成陣列,大數(shù)據(jù)需要更大規(guī)模的存儲空間和訪問速度。將RAID技術(shù)原理應(yīng)用到分布式服務(wù)器集群上,就形成了Hadoop分布式文件系統(tǒng)HDFS的架構(gòu)思想。

HDFS架構(gòu)原理

和RAID在多個(gè)磁盤上進(jìn)行文件存儲及并行讀寫一樣思路,HDFS在一個(gè)大規(guī)模分布式服務(wù)器集群上,對數(shù)據(jù)進(jìn)行并行讀寫及冗余存儲。因?yàn)镠DFS可以部署在一個(gè)比較大的服務(wù)器集群上,集群中所有服務(wù)器的磁盤都可以供HDFS使用,所以整個(gè)HDFS的存儲空間可以達(dá)到PB級容量。HDFS架構(gòu)如圖。

分布式文件系統(tǒng)HDFS的示例分析  
HDFS架構(gòu)  

HDFS中關(guān)鍵組件有兩個(gè),一個(gè)是NameNode,一個(gè)是DataNode。

DataNode負(fù)責(zé)文件數(shù)據(jù)的存儲和讀寫操作,HDFS將文件數(shù)據(jù)分割成若干塊(block),每個(gè)DataNode存儲一部分block,這樣文件就分布存儲在整個(gè)HDFS服務(wù)器集群中。應(yīng)用程序客戶端(Client)可以并行對這些數(shù)據(jù)塊進(jìn)行訪問,從而使得HDFS可以在服務(wù)器集群規(guī)模上實(shí)現(xiàn)數(shù)據(jù)并行訪問,極大地提高訪問速度。實(shí)踐中HDFS集群的DataNode服務(wù)器會有很多臺,一般在幾百臺到幾千臺這樣的規(guī)模,每臺服務(wù)器配有數(shù)塊磁盤,整個(gè)集群的存儲容量大概在幾PB到數(shù)百PB。

NameNode負(fù)責(zé)整個(gè)分布式文件系統(tǒng)的元數(shù)據(jù)(MetaData)管理,也就是文件路徑名,數(shù)據(jù)block的ID以及存儲位置等信息,承擔(dān)著操作系統(tǒng)中文件分配表(FAT)的角色。HDFS為了保證數(shù)據(jù)的高可用,會將一個(gè)block復(fù)制為多份(缺省情況為3份),并將三份相同的block存儲在不同的服務(wù)器上。這樣當(dāng)有磁盤損壞或者某個(gè)DataNode服務(wù)器宕機(jī)導(dǎo)致其存儲的block不能訪問的時(shí)候,Client會查找其備份的block進(jìn)行訪問。

block多份復(fù)制存儲如下圖所示,對于文件/users/sameerp/data/part-0,其復(fù)制備份數(shù)設(shè)置為2,存儲的block id為1,3。block1的兩個(gè)備份存儲在DataNode0和DataNode2兩個(gè)服務(wù)器上,block3的兩個(gè)備份存儲DataNode4和DataNode6兩個(gè)服務(wù)器上,上述任何一臺服務(wù)器宕機(jī)后,每個(gè)block都至少還有一個(gè)備份存在,不會影響對文件/users/sameerp/data/part-0的訪問。

分布式文件系統(tǒng)HDFS的示例分析  
HDFS的block復(fù)制備份策略  

事實(shí)上,DataNode會通過心跳和NameNode保持通信,如果DataNode超時(shí)未發(fā)送心跳,NameNode就會認(rèn)為這個(gè)DataNode已經(jīng)失效,立即查找這個(gè)DataNode上存儲的block有哪些,以及這些block還存儲在哪些服務(wù)器上,隨后通知這些服務(wù)器再復(fù)制一份block到其他服務(wù)器上,保證HDFS存儲的block備份數(shù)符合用戶設(shè)置的數(shù)目,即使再有服務(wù)器宕機(jī),也不會丟失數(shù)據(jù)。

HDFS應(yīng)用

Hadoop分布式文件系統(tǒng)可以象一般的文件系統(tǒng)那樣進(jìn)行訪問:使用命令行或者編程語言API進(jìn)行文件讀寫操作。我們以HDFS寫文件為例看HDFS處理過程,如下圖。

分布式文件系統(tǒng)HDFS的示例分析  
HDFS寫文件操作  
  • 應(yīng)用程序Client調(diào)用HDFS API,請求創(chuàng)建文件,HDFS API包含在Client進(jìn)程中。

  • HDFS API將請求參數(shù)發(fā)送給NameNode服務(wù)器,NameNode在meta信息中創(chuàng)建文件路徑,并查找DataNode中空閑的block。然后將空閑block的id、對應(yīng)的DataNode服務(wù)器信息返回給Client。因?yàn)閿?shù)據(jù)塊需要多個(gè)備份,所以即使Client只需要一個(gè)block的數(shù)據(jù)量,NameNode也會返回多個(gè)NameNode信息。

  • Client調(diào)用HDFS API,請求將數(shù)據(jù)流寫出。

  • HDFS API連接第一個(gè)DataNode服務(wù)器,將Client數(shù)據(jù)流發(fā)送給DataNode,該DataNode一邊將數(shù)據(jù)寫入本地磁盤,一邊發(fā)送給第二個(gè)DataNode。同理第二個(gè)DataNode記錄數(shù)據(jù)并發(fā)送給第三個(gè)DataNode。

  • Client通知NameNode文件寫入完成,NameNode將文件標(biāo)記為正常,可以進(jìn)行讀操作了。

HDFS雖然提供了API,但是在實(shí)踐中,我們很少自己編程直接去讀取HDFS中的數(shù)據(jù),原因正如開篇提到,在大數(shù)據(jù)場景下,移動計(jì)算比移動數(shù)據(jù)更劃算。于其寫程序去讀取分布在這么多DataNode上的數(shù)據(jù),不如將程序分發(fā)到DataNode上去訪問其上的block數(shù)據(jù)。但是如何對程序進(jìn)行分發(fā)?分發(fā)出去的程序又如何訪問HDFS上的數(shù)據(jù)?計(jì)算的結(jié)果如何處理,如果結(jié)果需要合并,該如何合并?

Hadoop提供了對存儲在HDFS上的大規(guī)模數(shù)據(jù)進(jìn)行并行計(jì)算的框架,就是我們之前講的MapReduce。

看完了這篇文章,相信你對“分布式文件系統(tǒng)HDFS的示例分析”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

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

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

AI