1.介紹
HDFS?(Hadoop?Distributed?File?System)是?Hadoop?下的分布式文件系統(tǒng),具有高容錯、高吞吐量等特性,可以部署在低成本的硬件上。
2.HDFS?設(shè)計(jì)原理
2.1?HDFS?架構(gòu)
HDFS?遵循主/從架構(gòu),由單個(gè)?NameNode(NN)?和多個(gè)?DataNode(DN)?組成:
-?NameNode?:?負(fù)責(zé)執(zhí)行有關(guān)?`?文件系統(tǒng)命名空間?`?的操作,例如打開,關(guān)閉、重命名文件和目錄等。它同時(shí)還負(fù)責(zé)集群元數(shù)據(jù)的存儲,記錄著文件中各個(gè)數(shù)據(jù)塊的位置信息。
-?DataNode:負(fù)責(zé)提供來自文件系統(tǒng)客戶端的讀寫請求,執(zhí)行塊的創(chuàng)建,刪除等操作。
2.2?文件系統(tǒng)命名空間
HDFS?的?`?文件系統(tǒng)命名空間?`?的層次結(jié)構(gòu)與大多數(shù)文件系統(tǒng)類似?(如?Linux),?支持目錄和文件的創(chuàng)建、移動、刪除和重命名等操作,支持配置用戶和訪問權(quán)限,但不支持硬鏈接和軟連接。`NameNode`?負(fù)責(zé)維護(hù)文件系統(tǒng)名稱空間,記錄對名稱空間或其屬性的任何更改。
2.3?數(shù)據(jù)復(fù)制
由于?Hadoop?被設(shè)計(jì)運(yùn)行在廉價(jià)的機(jī)器上,這意味著硬件是不可靠的,為了保證容錯性,HDFS?提供了數(shù)據(jù)復(fù)制機(jī)制。HDFS?將每一個(gè)文件存儲為一系列塊,每個(gè)塊由多個(gè)副本來保證容錯,塊的大小和復(fù)制因子可以自行配置(默認(rèn)情況下,塊大小是?128M,默認(rèn)復(fù)制因子是?3)。
2.4?數(shù)據(jù)復(fù)制的實(shí)現(xiàn)原理
大型的?HDFS?實(shí)例在通常分布在多個(gè)機(jī)架的多臺服務(wù)器上,不同機(jī)架上的兩臺服務(wù)器之間通過交換機(jī)進(jìn)行通訊。在大多數(shù)情況下,同一機(jī)架中的服務(wù)器間的網(wǎng)絡(luò)帶寬大于不同機(jī)架中的服務(wù)器之間的帶寬。因此?HDFS?采用機(jī)架感知副本放置策略,對于常見情況,當(dāng)復(fù)制因子為?3?時(shí),HDFS?的放置策略是:
在寫入程序位于?`datanode`?上時(shí),就優(yōu)先將寫入文件的一個(gè)副本放置在該?`datanode`?上,否則放在隨機(jī)?`datanode`?上。之后在另一個(gè)遠(yuǎn)程機(jī)架上的任意一個(gè)節(jié)點(diǎn)上放置另一個(gè)副本,并在該機(jī)架上的另一個(gè)節(jié)點(diǎn)上放置最后一個(gè)副本。此策略可以減少機(jī)架間的寫入流量,從而提高寫入性能。
如果復(fù)制因子大于?3,則隨機(jī)確定第?4?個(gè)和之后副本的放置位置,同時(shí)保持每個(gè)機(jī)架的副本數(shù)量低于上限,上限值通常為?`(復(fù)制系數(shù)?-?1)/機(jī)架數(shù)量?+?2`,需要注意的是不允許同一個(gè)?`dataNode`?上具有同一個(gè)塊的多個(gè)副本。
2.5??副本的選擇
為了最大限度地減少帶寬消耗和讀取延遲,HDFS?在執(zhí)行讀取請求時(shí),優(yōu)先讀取距離讀取器最近的副本。如果在與讀取器節(jié)點(diǎn)相同的機(jī)架上存在副本,則優(yōu)先選擇該副本。如果?HDFS?群集跨越多個(gè)數(shù)據(jù)中心,則優(yōu)先選擇本地?cái)?shù)據(jù)中心上的副本。
2.6?架構(gòu)的穩(wěn)定性
1.?心跳機(jī)制和重新復(fù)制
每個(gè)?DataNode?定期向?NameNode?發(fā)送心跳消息,如果超過指定時(shí)間沒有收到心跳消息,則將?DataNode?標(biāo)記為死亡。NameNode?不會將任何新的?IO?請求轉(zhuǎn)發(fā)給標(biāo)記為死亡的?DataNode,也不會再使用這些?DataNode?上的數(shù)據(jù)。?由于數(shù)據(jù)不再可用,可能會導(dǎo)致某些塊的復(fù)制因子小于其指定值,NameNode?會跟蹤這些塊,并在必要的時(shí)候進(jìn)行重新復(fù)制。
2.?數(shù)據(jù)的完整性
由于存儲設(shè)備故障等原因,存儲在?DataNode?上的數(shù)據(jù)塊也會發(fā)生損壞。為了避免讀取到已經(jīng)損壞的數(shù)據(jù)而導(dǎo)致錯誤,HDFS?提供了數(shù)據(jù)完整性校驗(yàn)機(jī)制來保證數(shù)據(jù)的完整性,具體操作如下:
當(dāng)客戶端創(chuàng)建?HDFS?文件時(shí),它會計(jì)算文件的每個(gè)塊的?`?校驗(yàn)和?`,并將?`?校驗(yàn)和?`?存儲在同一?HDFS?命名空間下的單獨(dú)的隱藏文件中。當(dāng)客戶端檢索文件內(nèi)容時(shí),它會驗(yàn)證從每個(gè)?DataNode?接收的數(shù)據(jù)是否與存儲在關(guān)聯(lián)校驗(yàn)和文件中的?`?校驗(yàn)和?`?匹配。如果匹配失敗,則證明數(shù)據(jù)已經(jīng)損壞,此時(shí)客戶端會選擇從其他?DataNode?獲取該塊的其他可用副本。
3.元數(shù)據(jù)的磁盤故障
`FsImage`?和?`EditLog`?是?HDFS?的核心數(shù)據(jù),這些數(shù)據(jù)的意外丟失可能會導(dǎo)致整個(gè)?HDFS?服務(wù)不可用。為了避免這個(gè)問題,可以配置?NameNode?使其支持?`FsImage`?和?`EditLog`?多副本同步,這樣?`FsImage`?或?`EditLog`?的任何改變都會引起每個(gè)副本?`FsImage`?和?`EditLog`?的同步更新。
4.支持快照
快照支持在特定時(shí)刻存儲數(shù)據(jù)副本,在數(shù)據(jù)意外損壞時(shí),可以通過回滾操作恢復(fù)到健康的數(shù)據(jù)狀態(tài)。
3.HDFS?的特點(diǎn)
3.1?高容錯
由于?HDFS?采用數(shù)據(jù)的多副本方案,所以部分硬件的損壞不會導(dǎo)致全部數(shù)據(jù)的丟失。
3.2?高吞吐量
HDFS?設(shè)計(jì)的重點(diǎn)是支持高吞吐量的數(shù)據(jù)訪問,而不是低延遲的數(shù)據(jù)訪問。
3.3??大文件支持
HDFS?適合于大文件的存儲,文檔的大小應(yīng)該是是?GB?到?TB?級別的。
3.4?簡單一致性模型
HDFS?更適合于一次寫入多次讀取?(write-once-read-many)?的訪問模型。支持將內(nèi)容追加到文件末尾,但不支持?jǐn)?shù)據(jù)的隨機(jī)訪問,不能從文件任意位置新增數(shù)據(jù)。文章來源:http://www.zghlxwxcb.cn/news/detail-724442.html
3.5?跨平臺移植性
HDFS?具有良好的跨平臺移植性,這使得其他大數(shù)據(jù)計(jì)算框架都將其作為數(shù)據(jù)持久化存儲的首選方案。文章來源地址http://www.zghlxwxcb.cn/news/detail-724442.html
到了這里,關(guān)于Hadoop分布式文件系統(tǒng)-HDFS的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!