溫馨提示×

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

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

HDFS工作機(jī)制是什么

發(fā)布時(shí)間:2021-12-09 09:47:11 來(lái)源:億速云 閱讀:174 作者:小新 欄目:大數(shù)據(jù)

這篇文章將為大家詳細(xì)講解有關(guān)HDFS工作機(jī)制是什么,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

一、HDFS是什么

HDFS(Hadoop Distributed File System)分布式文件系統(tǒng),它是谷歌的GFS提出后出現(xiàn)的一種用戶級(jí)文件系統(tǒng)。提供了一個(gè)高度容錯(cuò)和高吞吐量的海量數(shù)據(jù)存儲(chǔ)解決方案。

HDFS工作機(jī)制是什么

hadoop生態(tài)-HDFS的核心位置

二、漫畫看懂HDFS騷操作

HDFS工作機(jī)制是什么

2.1 寫操作

HDFS工作機(jī)制是什么

1

HDFS工作機(jī)制是什么

2

HDFS工作機(jī)制是什么

3

2.2 讀操作

HDFS工作機(jī)制是什么

2.3 容錯(cuò)性

常見(jiàn)錯(cuò)誤種類

HDFS工作機(jī)制是什么

節(jié)點(diǎn)故障

HDFS工作機(jī)制是什么

通信故障和數(shù)據(jù)損壞

HDFS工作機(jī)制是什么

讀寫故障

HDFS工作機(jī)制是什么

HDFS工作機(jī)制是什么

HDFS工作機(jī)制是什么

以上是漫畫解說(shuō)部分,主要涵蓋了讀寫流程已經(jīng)故障處理。下面會(huì)有具體的架構(gòu)講解。

三、HDFS架構(gòu)原理

HDFS工作機(jī)制是什么

3.1 HDFS幾個(gè)主要概念

3.1.1 NameNode

  • 維護(hù)和管理DataNodes

  • 管理文件系統(tǒng)namespace并控制client對(duì)應(yīng)的訪問(wèn)權(quán)限

  • 記錄所有存儲(chǔ)在集群中的文件的元信息。eg: blocks存儲(chǔ)的位置、文件的大小、權(quán)限、文件結(jié)構(gòu)等,有兩個(gè)文件和元數(shù)據(jù)關(guān)聯(lián)著
    FsImage
    保存了最新的元數(shù)據(jù)檢查點(diǎn),包含了整個(gè)HDFS文件系統(tǒng)的所有目錄和文件的信息。對(duì)于文件來(lái)說(shuō)包括了數(shù)據(jù)塊描述信息、修改時(shí)間、訪問(wèn)時(shí)間等;對(duì)于目錄來(lái)說(shuō)包括修改時(shí)間、訪問(wèn)權(quán)限控制信息(目錄所屬用戶,所在組)等。
    一般開(kāi)始時(shí)namenode的操作都放在EditLog中,然后通過(guò)異步更新。
    EditLog
    記錄最近通過(guò)namenode對(duì)文件系統(tǒng)的所有修改操作。

  • 記錄文件系統(tǒng)的所有操作元數(shù)據(jù)。 存儲(chǔ)在 EditLogs

  • 維護(hù)著與DataNodes的心跳檢測(cè)

  • DataNodes磁盤存儲(chǔ)均衡、DataNodes故障轉(zhuǎn)移

3.1.2 DataNode

數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)

3.1.3 Secondary NameNode

HDFS工作機(jī)制是什么

它的主要職責(zé)

  • 備用節(jié)點(diǎn),也稱為standby namenode。NameNode是HDFS的大腦核心,一旦NameNode出現(xiàn)不可用,那么整個(gè)HDFS集群將不可用,Secondary NameNode作為NameNode的備用節(jié)點(diǎn),進(jìn)行NameNode容錯(cuò)

  • 負(fù)責(zé)合并Editlogs和FsImage

  • 定時(shí)從 namenode 下載Editlogs并和現(xiàn)有FsImage進(jìn)行合并,然后將合并后的FsImage更新到namenode

FailoverController
故障切換器,管理著將活動(dòng)namenode轉(zhuǎn)移為備用namenode的過(guò)程,默認(rèn)通過(guò)ZK來(lái)確保僅有一個(gè)活躍namenode。每一個(gè)namenode都有一個(gè)運(yùn)行著的故障轉(zhuǎn)移器。

3.1.4 Balancer

用于平衡DataNode集群之間各節(jié)點(diǎn)的磁盤利用率。

3.1.5 HttpFS

提供Http方式訪問(wèn)和操作HDFS功能

HDFS工作機(jī)制是什么

上面幾個(gè)概念的拓?fù)鋱D

3.2 Block數(shù)據(jù)塊

HDFS里的數(shù)據(jù)都是以blocks分散在DataNodes。
通常,文件系統(tǒng)我們存放數(shù)據(jù)都是以一個(gè)blocks集進(jìn)行存儲(chǔ),HDFS也是如此。
在 hadoop 集群中,每個(gè) block 的默認(rèn)大小為 128M(此處指 hadoop 2.x 版本,hadoop 1.x 版本為 64M),也可以通過(guò)配置進(jìn)行修改

dfs.block.size或 dfs.blocksize =64M

HDFS 不會(huì)將每個(gè)文件存儲(chǔ)在配置的 block 大小的確切倍數(shù)中,比如一個(gè) 514M 的文件 example.txt,下圖所示,假設(shè) block 大小為默認(rèn)的 128M,那么將會(huì)創(chuàng)建 5 個(gè)block,前 4 個(gè) block 大小為 128M,但是最后一個(gè) block 的大小則僅為 2M。

HDFS工作機(jī)制是什么

block大小的設(shè)置,如果太小會(huì)產(chǎn)生太多的blocks,這樣元數(shù)據(jù)就會(huì)很多,從而使管理blocks和元數(shù)據(jù)產(chǎn)生巨大開(kāi)銷,增加NameNode和DataNode的負(fù)載。

3.3 寫原理

假如我們要一個(gè)文件名字“example.txt”,248M。

HDFS工作機(jī)制是什么

假設(shè)block.size設(shè)置的128M,因此client會(huì)把該文件切分成兩個(gè)block,分布是 128M和120M。

每當(dāng)向HDFS寫數(shù)據(jù)的時(shí)候,都遵循下面的幾個(gè)流程

  • HDFS client 向NameNode 發(fā)送 兩個(gè)blocks(blockA、blockB)的寫入請(qǐng)求

  • NameNode給client進(jìn)行寫入授權(quán)并提供用來(lái)進(jìn)行存儲(chǔ)和復(fù)制的DataNodes IP

  • DataNodes基于HDFS可用性、復(fù)制因子和機(jī)架感知的選擇是完全隨機(jī)的

  • 假設(shè)復(fù)制因子設(shè)置的是3,那么NameNode將為每個(gè)blocks提供3個(gè)DataNodes IP。 相對(duì)每個(gè)block提供的3個(gè)DataNodes都是唯一的。假設(shè)NameNode提供的DataNodes列表如下:

For Block A, list A = {IP of DataNode 1, IP of DataNode 4, IP of DataNode 6}
For Block B, set B = {IP of DataNode 3, IP of DataNode 7, IP of DataNode 9}

  • 每個(gè)block將在三個(gè)不同的DataNode進(jìn)行復(fù)制,維持整個(gè)集群的復(fù)制因子一致性

  • 接下來(lái)整個(gè)數(shù)據(jù)將會(huì)經(jīng)歷下面三個(gè)階段:1建立管道 2數(shù)據(jù)流與復(fù)制 3管道關(guān)閉及確認(rèn)



3.3.1 建立管道

client在blocks寫入之前會(huì)確保提供的DataNodes是否已經(jīng)做好接受數(shù)據(jù)的準(zhǔn)備。在這樣的情況下,client會(huì)連接該block列表中的各個(gè)DataNodes,為每個(gè)block建一個(gè)管道。以BlockA舉例,它的DN(DataNode)列表是 { DN 1 IP, DN 4 IP, DN 6 IP }

HDFS工作機(jī)制是什么

如上圖,大概有一下幾個(gè)步驟:

  • client 拿著 blockA 向 NameNode發(fā)起寫請(qǐng)求

  • NameNode返回一組可供存儲(chǔ)和復(fù)制的DN IP列表

  • client向 DN1 進(jìn)行寫入準(zhǔn)備確認(rèn),同時(shí)會(huì)告訴DN1接下來(lái)要進(jìn)行復(fù)制的DN4和DN6的IP

  • DN1 會(huì)向 DN4發(fā)起寫入準(zhǔn)備確認(rèn),依次類推DN4給DN6發(fā)送確認(rèn)

  • DN6 確認(rèn)完畢回傳給 DN4,DN4確認(rèn)后會(huì)將自己以及DN6的確認(rèn)信息給DN1,最后DN1將三個(gè)DN的確認(rèn)結(jié)果答復(fù)給client

  • 管道建立完畢,client將開(kāi)始進(jìn)行數(shù)據(jù)復(fù)制或者數(shù)據(jù)處理

3.3.2 數(shù)據(jù)流與復(fù)制

當(dāng)client與DataNodes之間的管道建立之后,client將開(kāi)始將推送數(shù)據(jù)到管道。我們這里假設(shè)的復(fù)制因子是3,所以blockA將被復(fù)制三份,但是注意的是client只會(huì)將blockA推送到DN1,然后由DataNodes自己按照順序進(jìn)行復(fù)制。

HDFS工作機(jī)制是什么

如上圖所示,整個(gè)復(fù)制過(guò)程步驟如下:

  • client 將blockA寫入DN1,接著DN1連接DN4

  • DN1通過(guò)管道向DN4復(fù)制數(shù)據(jù)

  • DN4數(shù)據(jù)寫完后會(huì)繼續(xù)連接DN6進(jìn)行最后一份數(shù)據(jù)的復(fù)制

3.3.3 管道關(guān)閉和確認(rèn)

當(dāng)block復(fù)制3份完成后,client和NameNode會(huì)有一系列的ack確認(rèn)來(lái)保證數(shù)據(jù)被成功寫入。
如下圖所示,DataNodes的確認(rèn)和寫入的順序恰好相反,DN6寫入成功后會(huì)給DN4發(fā)送確認(rèn)消息,接著DN4會(huì)將DN6和自己的確認(rèn)消息發(fā)送給DN1,最后DN1將所有的確認(rèn)消息發(fā)送給client,client再給NameNode確認(rèn)block寫入成功,然后NameNode更新對(duì)應(yīng)的元數(shù)據(jù),最終client關(guān)閉管道。

HDFS工作機(jī)制是什么

以上的所有流程,我們都是針對(duì)blockA進(jìn)行解說(shuō),而blockB是完全一樣的,blockB有自己的管道、自己的DataNodes并行的進(jìn)行寫入。

HDFS工作機(jī)制是什么

如上圖所示,有兩個(gè)管道分別為blokA和blockB提供,他們各自的流程順序如下:

  • For Block A: 1A -> 2A -> 3A -> 4A

  • For Block B: 1B -> 2B -> 3B -> 4B -> 5B -> 6B

3.4 讀原理

讀的原理相對(duì)寫更容易理解,我們同樣以example.txt舉例。

HDFS工作機(jī)制是什么

如上圖所示,有以下幾個(gè)步驟

  • client請(qǐng)求NameNode 要讀取example.txt的數(shù)據(jù),NameNode查詢?cè)獢?shù)據(jù),將該文件對(duì)應(yīng)的所有block及對(duì)應(yīng)的DataNode列表返回

  • client并行的分別從DataNodes讀取blockA和blockB的數(shù)據(jù)。為了保證低延遲和節(jié)約帶寬,通常會(huì)選擇離client近的副本進(jìn)行讀取,如果可能,會(huì)選擇和閱讀節(jié)點(diǎn)在同一個(gè)機(jī)架上的副本(如圖中所示,選擇了Rack1, blockA和blockB都有對(duì)應(yīng)的副本)

  • client一旦獲取到所有的block,就會(huì)開(kāi)始組裝成文件,并返回。

關(guān)于“HDFS工作機(jī)制是什么”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向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