HDFS存儲(chǔ)架構(gòu)剖析

HDFS架構(gòu)圖(Hadoop distribute File System)

image.png

NameNode 介紹

Namenode 是一個(gè)中心服務(wù)器,單一節(jié)點(diǎn)(簡(jiǎn)化系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)),負(fù)責(zé)管理文件系統(tǒng)的名字空間(namespace)以及客戶端對(duì)文件的訪問(wèn)。

文件操作,NameNode 負(fù)責(zé)文件元數(shù)據(jù)的操作,DataNode負(fù)責(zé)處理文件內(nèi)容的讀寫請(qǐng)求,跟文件內(nèi)容相關(guān)的數(shù)據(jù)流不經(jīng)過(guò)NameNode,只會(huì)詢問(wèn)它跟那個(gè)DataNode聯(lián)系,否則NameNode會(huì)成為系統(tǒng)的瓶頸。

副本存放在哪些DataNode上由 NameNode來(lái)控制,根據(jù)全局情況做出塊放置決定,讀取文件時(shí)NameNode盡量讓用戶先讀取最近的副本,降低帶塊消耗和讀取時(shí)延

Namenode 全權(quán)管理數(shù)據(jù)塊的復(fù)制,它周期性地從集群中的每個(gè)Datanode接收心跳信號(hào)和塊狀態(tài)報(bào)告(Blockreport)。接收到心跳信號(hào)意味著該Datanode節(jié)點(diǎn)工作正常。塊狀態(tài)報(bào)告包含了一個(gè)該Datanode上所有數(shù)據(jù)塊的列表。

查看HDFS塊文件

/opt/modules/hadoop-2.5.0/data/tmp/dfs/data/current/BP-1921057509-192.168.57.129-1517160177567/current/finalized

說(shuō)明:BP:表示塊池子

image.png

可以使用more命令查看塊文件中的數(shù)據(jù)。
meta結(jié)尾的數(shù)據(jù)表示元數(shù)據(jù)文件,這就是hdfs真正的存儲(chǔ)結(jié)構(gòu)

DataNode

一個(gè)數(shù)據(jù)塊在DataNode以文件存儲(chǔ)在磁盤上,包括兩個(gè)文件,一個(gè)是數(shù)據(jù)本身,一個(gè)是元數(shù)據(jù)包括數(shù)據(jù)塊的長(zhǎng)度,塊數(shù)據(jù)的校驗(yàn)和,以及時(shí)間戳

DataNode啟動(dòng)后向NameNode注冊(cè),通過(guò)后,周期性(1小時(shí))的向NameNode上報(bào)所有的塊信息。

心跳是每3秒一次,心跳返回結(jié)果帶有NameNode給該DataNode的命令如復(fù)制塊數(shù)據(jù)到另一臺(tái)機(jī)器,或刪除某個(gè)數(shù)據(jù)塊。如果超過(guò)10分鐘沒有收到某個(gè)DataNode 的心跳,則認(rèn)為該節(jié)點(diǎn)不可用。

集群運(yùn)行中可以安全加入和退出一些機(jī)器(對(duì)現(xiàn)有集群沒有影響)

HDFS文件

文件切分成塊(默認(rèn)大小128M),以塊為單位,每個(gè)塊有多個(gè)副本存儲(chǔ)在不同的機(jī)器上,副本數(shù)可在文件生成時(shí)指定(默認(rèn)3)

NameNode 是主節(jié)點(diǎn),存儲(chǔ)文件的元數(shù)據(jù)如文件名,文件目錄結(jié)構(gòu),文件屬性(生成時(shí)間,副本數(shù),文件權(quán)限),以及每個(gè)文件的塊列表以及塊所在的DataNode等等

DataNode 在本地文件系統(tǒng)存儲(chǔ)文件塊數(shù)據(jù),以及塊數(shù)據(jù)的校驗(yàn)和

可以創(chuàng)建、刪除、移動(dòng)或重命名文件,當(dāng)文件創(chuàng)建、寫入和關(guān)閉之后不能修改文件內(nèi)容。

Data Replication 文件復(fù)制

image.png

說(shuō)明:
part-0 :一個(gè)文件
{1,3}:文件被拆分為2個(gè)塊為1和3
r:2:復(fù)制兩份。

解釋:
For the common case, when the replication factor is three, HDFS’s placement policy is to put one replica on one node in the local rack, another on a different node in the local rack, and the last on a different node in a different rack. This policy cuts the inter-rack write traffic which generally improves write performance. The chance of rack failure is far less than that of node failure; this policy does not impact data reliability and availability guarantees. However, it does reduce the aggregate network bandwidth used when reading data since a block is placed in only two unique racks rather than three. With this policy, the replicas of a file do not evenly distribute across the racks. One third of replicas are on one node, two thirds of replicas are on one rack, and the other third are evenly distributed across the remaining racks. This policy improves write performance without compromising data reliability or read performance. 搜索網(wǎng)絡(luò)
對(duì)于一般情況,當(dāng)復(fù)制因子為3時(shí),HDFS的放置策略是在本地機(jī)架的一個(gè)節(jié)點(diǎn)上放置一個(gè)副本,在本地機(jī)架中的另一個(gè)節(jié)點(diǎn)上放置另一個(gè)副本,在不同的網(wǎng)絡(luò)上放置一個(gè)副本。此策略不會(huì)影響數(shù)據(jù)的可靠性和可用性。但是,它確實(shí)減少了讀取數(shù)據(jù)時(shí)使用的聚合網(wǎng)絡(luò)帶寬,因?yàn)橐粋€(gè)塊只放在兩個(gè)唯一的機(jī)架上,而不是三個(gè)。使用此策略,文件的副本不會(huì)均勻分布在各個(gè)機(jī)架上。三分之一的副本位于一個(gè)節(jié)點(diǎn)上,三分之二的副本位于一個(gè)機(jī)架上,另三分之一的副本位于一個(gè)機(jī)架上。此策略在不影響數(shù)據(jù)可靠性或讀取性能的情況下提高寫入性能。

機(jī)架:簡(jiǎn)單理解是一個(gè)交換機(jī)連接的所有服務(wù)器叫做一個(gè)機(jī)架

數(shù)據(jù)損壞的處理

步驟1

當(dāng)DataNode讀取block的時(shí)候,它會(huì)計(jì)算checksum

步驟2

如果計(jì)算后的checksum,與block創(chuàng)建時(shí)值不一樣,說(shuō)明該block已經(jīng)損壞

步驟3

Client讀取其它DateNode上的block。

步驟4

NameNode標(biāo)記該塊已經(jīng)損壞,然后復(fù)制block達(dá)到預(yù)期設(shè)置的文件備份數(shù)

步驟5

DataNode 在其文件創(chuàng)建后三周驗(yàn)證其checksum

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容