溫馨提示×

溫馨提示×

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

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

分布式文件系統(tǒng)HDFS有什么用

發(fā)布時(shí)間:2021-12-09 14:06:56 來源:億速云 閱讀:122 作者:小新 欄目:云計(jì)算

小編給大家分享一下分布式文件系統(tǒng)HDFS有什么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

分布式文件系統(tǒng)HDFS有什么用

HDFS 的設(shè)計(jì)主要基于以下六點(diǎn)考慮:

(1)容錯(cuò)

獨(dú)立計(jì)算機(jī)的硬件錯(cuò)誤不能當(dāng)異常情況處理,而屬于正常狀態(tài)。HDFS 文件系統(tǒng)中會(huì)有許多個(gè)普通計(jì)算機(jī)節(jié)點(diǎn)構(gòu)成, 在任何時(shí)間任何一個(gè)節(jié)點(diǎn)都有可能出現(xiàn)故障, 因此HDFS 應(yīng)該設(shè)計(jì)成能夠自動(dòng)恢復(fù)和快速檢測錯(cuò)誤, 這應(yīng)該是維持HDFS 可靠運(yùn)行的核心目標(biāo)。

(2)流式訪問數(shù)據(jù)集

HDFS上運(yùn)行的應(yīng)用程序需要以流式訪問所存儲(chǔ)的數(shù)據(jù)集。這些應(yīng)用程序都采用并行的批處理方式進(jìn)行數(shù)據(jù)計(jì)算,不同于普通系統(tǒng)上用于數(shù)據(jù)處理的應(yīng)用程序。提高數(shù)據(jù)訪問吞吐量是研究HDFS的重點(diǎn),響應(yīng)時(shí)間和數(shù)據(jù)訪問的延遲則不作過多考慮。

(3)大數(shù)據(jù)存儲(chǔ)

HDFS 最基本的目標(biāo)就是支持大數(shù)據(jù)存儲(chǔ)。一個(gè)存儲(chǔ)在HDFS 系統(tǒng)上面的普通文件大小都在千兆至T 字節(jié), 一個(gè)HDFS 應(yīng)用最基本的要求是能支撐海量文件。

(4) 數(shù)據(jù)一致性

HDFS 應(yīng)用處理文件的方式是一次寫入多次讀取。單個(gè)文件寫入到HDFS 中后就不需要改變。這種處理文件的方式讓數(shù)據(jù)一致性問題得到簡化, 能夠大幅度的提高HDFS 文件訪問的吞吐量。

(5)速度

移動(dòng)計(jì)算的方式代價(jià)比移動(dòng)數(shù)據(jù)的方式開銷要低。一個(gè)需要計(jì)算的請求,如果計(jì)算離操作數(shù)據(jù)越近那么計(jì)算出來的結(jié)果就越高效, 特別是在海量級別的數(shù)據(jù)計(jì)算時(shí),效率更加明顯。

(6)可移植性

在異構(gòu)的軟件和硬件平臺間提供可移植性。HDFS 由Java 語言開發(fā),Java 語言的跨平臺特性完美的解決了這一要求。

HDFS采用master/slave架構(gòu)。一個(gè)HDFS集群是由一個(gè)Namenode和一定數(shù)目的Datanode組成,這些Datanode定時(shí)和Namenode通信,像Namenode反饋狀態(tài)以及接受Namenode的指令[p。為了減輕Namenode的負(fù)擔(dān),Namenode上并不需要永久保存所有Datanode上包含有哪些數(shù)據(jù)塊的信息,而是通過Datanode在啟動(dòng)時(shí)的上報(bào)數(shù)據(jù)塊信息,來更新Namenode上的映射表。HDFS暴露了文件系統(tǒng)的名字空間,用戶可以通過以文件的形式在上面存儲(chǔ)數(shù)據(jù)。從內(nèi)部看,一個(gè)文件其實(shí)被分成一個(gè)或多個(gè)數(shù)據(jù)塊(至少需要被劃分成一個(gè)塊),這些塊通常存儲(chǔ)在多個(gè)Datanode上,通過冗余性來保證可靠性以及加快后期的讀取速度。Datanode負(fù)責(zé)處理分布式文件系統(tǒng)客戶端的實(shí)際的讀寫數(shù)據(jù)請求。在Namenode的統(tǒng)一調(diào)度下進(jìn)行數(shù)據(jù)塊的創(chuàng)建、刪除和復(fù)制。

HDF S是一個(gè)能在大集群中存儲(chǔ)超大文件的系統(tǒng),支持跨機(jī)器存儲(chǔ),而且運(yùn)行可靠。每個(gè)文件都會(huì)被分成一系列大小為64MB(初始定義為64,實(shí)際在工程中可以自己設(shè)置,報(bào)告的后面會(huì)有相關(guān)操作)的數(shù)據(jù)塊,最后一個(gè)數(shù)據(jù)塊除外。為了容錯(cuò),在文件的數(shù)據(jù)塊存儲(chǔ)到DataNode中時(shí)相應(yīng)的都會(huì)存儲(chǔ)副本。一般情況下都會(huì)有三個(gè)副本并且放在不同的地方,第一個(gè)副本會(huì)被放在本地節(jié)點(diǎn),同時(shí)本地機(jī)架上的另外一個(gè)節(jié)點(diǎn)會(huì)放置第二個(gè)副本,第三個(gè)副本則經(jīng)復(fù)制后分別放到不同機(jī)架上的節(jié)點(diǎn)。這種方式的好處就是可以減少機(jī)架內(nèi)的寫流量,提高了寫的性能,同時(shí),可以自由配置每個(gè)文件的數(shù)據(jù)塊大小和副本系數(shù),應(yīng)用程序可以指定某個(gè)文件的副本數(shù)目。副本系數(shù)可以在文件創(chuàng)建之前制定或者創(chuàng)建之后修改。

Namenode是整個(gè)分布式文件系統(tǒng)的主服務(wù)器,是整個(gè)系統(tǒng)的核心,從命名我們可以清晰的看出是整個(gè)系統(tǒng)的名稱服務(wù)器,Namenode作為HDFS中文件目錄和文件分配的管理者,它保存的最重要信息,就是下面兩個(gè)映射:文件名到數(shù)據(jù)塊;數(shù)據(jù)塊到Datanode列表。其中文件名到數(shù)據(jù)塊的信息保存在磁盤上(持久化);但Namenode上不保存數(shù)據(jù)塊到Datanode列表。在保存文件名到數(shù)據(jù)塊的過程中,為了保證每次修改不需要從新保存整個(gè)結(jié)構(gòu),HDFS使用操作日志來保存更新?,F(xiàn)在可以得到Namenode需要存儲(chǔ)在Disk上的信息了,包括:in_use.lock,fsimage和edits.in_use.lock的功能和Datanode的一致。fsimage保存的是文件系統(tǒng)的目錄樹,edits則是文件樹上的操作日志,fstime是上一次新打開一個(gè)操作日志的時(shí)間(long型)。除此之外,Namenode執(zhí)行文件系統(tǒng)的名字空間操作,比如打開、關(guān)閉、重命名文件或目錄。它也負(fù)責(zé)確定數(shù)據(jù)塊到具體Datanode節(jié)點(diǎn)的映射。NAMENODE主要功能

(1)管理元數(shù)據(jù)和文件塊

管理元數(shù)據(jù)就是對它包含的名字空問、文件到文件塊的映射、文件塊到數(shù)據(jù)節(jié)點(diǎn)的映射進(jìn)行管理。其中,要求文件名到數(shù)據(jù)塊的映射不僅要保留在內(nèi)存中,還要持久化到磁盤上。文件塊的管理不僅包括文件塊的新建、復(fù)制,同時(shí)還包括無效文件塊的移除以及孤立文件塊的回收等。

(2)簡化元數(shù)據(jù)更新操作

為了避免每次都要重新保存整個(gè)結(jié)構(gòu),NameNode會(huì)記錄每次對文件系統(tǒng)的元數(shù)據(jù)進(jìn)行修改的操作,并用事務(wù)日志(Editlog)進(jìn)行表示。與此類似,修改文件的副本系數(shù)的操作也會(huì)被記錄到Editlog中,而Editlog會(huì)被NameNode存儲(chǔ)到本地的操作系統(tǒng)的文件系統(tǒng)中。NameNode管理整個(gè)存儲(chǔ)在FsImage文件中的文件系統(tǒng)的命名空間,包括文件的屬性、數(shù)據(jù)塊到文件的映射,F(xiàn)sImage文件與Editlog一樣都被存儲(chǔ)在NameNode所在的本地文件系統(tǒng)中。當(dāng)NameNode啟動(dòng)時(shí),Editlog和FsImage就從硬盤中被其讀取,把Editlog記錄的所有事務(wù)作用于FsImage,并將新產(chǎn)生的Fslmage替代舊的Editlog刷新到硬盤中。

(3)監(jiān)聽和處理請求

與客戶端和DataNode不同,NameNode只是監(jiān)聽客戶端事件及DataNode事件。而不會(huì)主動(dòng)發(fā)起請求,客戶端事件通常包括目錄和文件的創(chuàng)建、讀寫、重命名和刪除,以及文件列表信息獲取等。DataNode事件主要包括數(shù)據(jù)塊信息的匯報(bào)、心跳響應(yīng)、出錯(cuò)信息等。當(dāng)NameNode監(jiān)聽到這些請求時(shí)便對他們響應(yīng),并將相應(yīng)的處理結(jié)果返回到請求端。

(4)心跳檢測

連接建立以后,DataNode和NameNode之間會(huì)不斷保持心跳,這樣DataNode在向NameNode匯報(bào)自己的負(fù)載情況的同時(shí)還會(huì)接收來自NameNode的指令信息。如果有哪個(gè)DataNode沒有在一定時(shí)間內(nèi)對NameNode定期的ping作出回應(yīng),就會(huì)被認(rèn)為是出現(xiàn)了故障,此時(shí),NameNode就會(huì)重新調(diào)整整個(gè)文件系統(tǒng)。

Datanode負(fù)責(zé)存儲(chǔ)數(shù)據(jù),一個(gè)數(shù)據(jù)塊在多個(gè)Datanode中有備份,而一個(gè)Datanode對于一個(gè)數(shù)據(jù)塊最多只包含一個(gè)備份。所以可以簡單地認(rèn)為Datanode上存了數(shù)據(jù)塊ID和數(shù)據(jù)塊內(nèi)容,以及他們的映射關(guān)系。一個(gè)HDFS集群可能包含上千Datanode節(jié)點(diǎn),這些Datanode定時(shí)和Namenode通信,接受Namenode的指令。為了減輕Namenode的負(fù)擔(dān),Namenode上并不永久保存那個(gè) Datanode上有那些數(shù)據(jù)塊的信息,而是通過Datanode啟動(dòng)時(shí)的上報(bào),來更新Namenode上的映射表。

Datanode和Namenode建立連接以后,就會(huì)不斷地和Namenode保持心跳。心跳返回時(shí)包含了Namenode對Datanode的一些命令,如刪除某個(gè)數(shù)據(jù)塊或者是把數(shù)據(jù)塊從一個(gè)D atanode復(fù)制到另一個(gè)D atanode。應(yīng)該注意的是:Namenode不會(huì)發(fā)起到Datanode的請求,在這個(gè)通信過程中,它們是嚴(yán)格的客戶端/服務(wù)器架構(gòu)。Datanode當(dāng)然也作為服務(wù)器接受來自客戶端的訪問,處理數(shù)據(jù)塊讀/寫請求。Datanode之間還會(huì)相互通信,執(zhí)行數(shù)據(jù)塊復(fù)制任務(wù),同時(shí),在客戶端做寫操作的時(shí)候,Datanode需要相互配合,保證寫操作的一致性。

DATANODE主要功能:

(1) 數(shù)據(jù)塊的讀寫。

所有文件的數(shù)據(jù)塊都存儲(chǔ)在DataNode中,但客戶端并不知道某個(gè)數(shù)據(jù)塊具體的位置信息,所以不能直接通過DataNode進(jìn)行數(shù)據(jù)塊的相關(guān)操作,所有這些位置信息都存儲(chǔ)在NameNode。因此,當(dāng)系統(tǒng)客戶端需要執(zhí)行數(shù)據(jù)塊的創(chuàng)建、復(fù)制和刪除等操作時(shí),需要首先訪問NameNode以獲取數(shù)據(jù)塊的位置信息,然后再訪問指定的DataNode來執(zhí)行相關(guān)操作,具體的文件操作最終由客戶端進(jìn)程而非DataNode來完成。

(2) 向NameNode報(bào)告狀態(tài)。

由于數(shù)據(jù)塊到DataNode的映射并沒有持久化到NameNode本地磁盤,NameNode只能通過與DataNode之間的心跳信號來掌握文件塊狀態(tài),進(jìn)而掌握整個(gè)工作集群中所有DataNode節(jié)點(diǎn)狀態(tài)的整體布局,假如DataNode出現(xiàn)異常狀態(tài),及時(shí)作出調(diào)整。當(dāng)某個(gè)DataNode出現(xiàn)故障而導(dǎo)致失效時(shí),為了保證數(shù)據(jù)塊的副本數(shù)量達(dá)到規(guī)定范圍。NameNode就會(huì)調(diào)度相關(guān)DataNode執(zhí)行失效結(jié)點(diǎn)上數(shù)據(jù)塊的復(fù)制操作。

(3) 執(zhí)行數(shù)據(jù)的流水線復(fù)制。

當(dāng)創(chuàng)建文件或者是某些DataNode出現(xiàn)故障而導(dǎo)致數(shù)據(jù)塊副本數(shù)量少于規(guī)定數(shù)目時(shí),系統(tǒng)要執(zhí)行數(shù)據(jù)塊復(fù)制操作??蛻舳嗽趶腘ameNode獲取到需要進(jìn)行復(fù)制的數(shù)據(jù)塊列表之后,首先會(huì)把緩存于客戶端的數(shù)據(jù)塊復(fù)制到第一個(gè)DataNode上,然后采取流水線復(fù)制的方式,在同一時(shí)間將第一個(gè)DataNode上的數(shù)據(jù)復(fù)制到第二個(gè)DataNode,以此類推,直到所有數(shù)據(jù)塊的復(fù)制操作全部完成。流水線復(fù)制有效地提升了系統(tǒng)的運(yùn)行速度,特別是針對某些熱點(diǎn)數(shù)據(jù)需要復(fù)制大量Block的情形,往往能取得非常好的效果。

HDFS元數(shù)據(jù)緩存策略:

HDFS的所有元數(shù)據(jù)都是由Namenode來進(jìn)行管理和維護(hù)的。在Namenode中一共保存了以下3種類型的元數(shù)據(jù):文件和塊的命名空間、文件名到塊的映射、以及每個(gè)塊副本的位置。其中文件名到數(shù)據(jù)塊的映射持久化在磁盤土,而不僅僅保留在內(nèi)存中。所有對目錄樹的更新以及文件名和數(shù)據(jù)塊之間關(guān)系的修改,都必須能夠持久化。為了保證每次修改不需要重新保存整個(gè)結(jié)構(gòu),HDFS使用操作日志來保存更新。對于任何對文件元數(shù)據(jù)產(chǎn)生的修改,Namenode都會(huì)使用一個(gè)稱為Editlog的事務(wù)日志記錄下來。例如,在HDFS中刪除一個(gè)文件,Namenode就會(huì)在Editlog中插入一條記錄來表示;同樣,修改文件的復(fù)制(replication因子也將在Editlog插入一條記錄。Namenode在本地操作系統(tǒng)的文件系統(tǒng)中存儲(chǔ)這個(gè)Editlog。整個(gè)文件系統(tǒng)的namespace,包括數(shù)據(jù)塊到文件的映射、文件的屬性,都存儲(chǔ)在稱為FsImage的文件中,這個(gè)文件也是放在Namenode所在操作系統(tǒng)的文件系統(tǒng)上。

Namenode在內(nèi)存中保存著整個(gè)文件系統(tǒng)的名字空間和文件名到數(shù)據(jù)塊的映射。這個(gè)關(guān)鍵的元數(shù)據(jù)設(shè)計(jì)得很緊湊,在存儲(chǔ)大文件時(shí),一個(gè)帶有4G內(nèi)存的Namenode足夠支撐海量的文件和目錄。當(dāng)Namenode啟動(dòng)時(shí),它從硬盤中讀取Editlog和FsImage,將所有Editlog中的事務(wù)作用在內(nèi)存中的FsImage,并將這個(gè)新的FsImage從內(nèi)存中刷新到硬盤上,然后再丟棄這個(gè)舊的Editlog。

數(shù)據(jù)完整性策略: 

由于網(wǎng)絡(luò)的復(fù)雜性,可能導(dǎo)致DataNode 節(jié)點(diǎn)讀取的數(shù)據(jù)為損壞狀態(tài),原因有多種可能性,常見的有網(wǎng)絡(luò)通信錯(cuò)誤、程序問題、DataNode 節(jié)點(diǎn)自身存儲(chǔ)等等情況。這時(shí)就需要一套數(shù)據(jù)校驗(yàn)機(jī)制保證數(shù)據(jù)的完整性。客戶端寫入一個(gè)新的文件時(shí),將會(huì)計(jì)算每個(gè)文件塊的校驗(yàn)和, 然后將校驗(yàn)和保存為一個(gè)單獨(dú)的隱藏文件, 并將校驗(yàn)和文件同時(shí)存儲(chǔ)在目錄空間下。如果客戶端要讀取文件,將會(huì)同時(shí)讀取目錄空間下的校驗(yàn)文件,并對DataNode 節(jié)點(diǎn)上的文件塊的校驗(yàn)進(jìn)行匹配, 如果匹配出現(xiàn)錯(cuò)誤,那么說明該文件塊的數(shù)據(jù)有問題,客戶端將會(huì)選擇其他的文件塊副本所在的DataNode 節(jié)點(diǎn)進(jìn)行文件塊讀取操作。

副本放置策略:

在HDFS中,每一個(gè)數(shù)據(jù)塊默認(rèn)條件下都會(huì)保存3個(gè)備份(也可以自行修改備份的數(shù)量),為了使后期讀取效率更高并且同時(shí)保證數(shù)據(jù)的可靠性,HDFS設(shè)計(jì)了相應(yīng)的副本放置策略,一般情況下,第一個(gè)block副本放在和client所在的node甩(如果client不在集群范圍內(nèi),則這第一個(gè)node是隨機(jī)選取的,當(dāng)然系統(tǒng)會(huì)嘗試不選擇哪些太滿或者太忙的node)。第二個(gè)副本放置在與第一個(gè)節(jié)點(diǎn)相同的機(jī)架中的node中(隨機(jī)選擇)。第三個(gè)副本與第一二個(gè)副本不同的機(jī)架中,隨機(jī)放在不同的node中。如果還有更多的副本就隨機(jī)放在集群的任意位置。HDFS的副本放置策略在充分考慮了系統(tǒng)的可靠性(block在不同的機(jī)架)和帶寬(一個(gè)管道只需要穿越一個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)),并在它們之間做了一個(gè)很好的平衡。

以上是“分布式文件系統(tǒng)HDFS有什么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(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