溫馨提示×

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

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

HDFS架構(gòu)與設(shè)計(jì)原理

發(fā)布時(shí)間:2021-09-18 11:06:00 來(lái)源:億速云 閱讀:135 作者:chen 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“HDFS架構(gòu)與設(shè)計(jì)原理”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“HDFS架構(gòu)與設(shè)計(jì)原理”吧!

1 前言

HDFS(Hadoop Distributed File  System)是我們熟知的Hadoop分布式文件系統(tǒng),是一個(gè)高容錯(cuò)的系統(tǒng),能提供高吞吐量的數(shù)據(jù)訪問(wèn),非常適合大規(guī)模數(shù)據(jù)集上的應(yīng)用。

2 HDFS特點(diǎn)

流式數(shù)據(jù)訪問(wèn):這點(diǎn)初學(xué)者可能不好理解,流式數(shù)據(jù)訪問(wèn)模式是HDFS數(shù)據(jù)訪問(wèn)特點(diǎn)之一,是指收集到部分?jǐn)?shù)據(jù)就開(kāi)始處理,而不是收集到全部數(shù)據(jù)再處理,否則會(huì)導(dǎo)致比較大的延遲,也會(huì)消耗大量?jī)?nèi)存。

大規(guī)模數(shù)據(jù)集:HDFS對(duì)大文件存儲(chǔ)比較友好,HDFS上的一個(gè)典型文件大小一般都在GB至TB級(jí)。

一次寫入多次讀取:HDFS數(shù)據(jù)訪問(wèn)特點(diǎn)之一,文件經(jīng)過(guò)創(chuàng)建、寫入和關(guān)閉之后就不能夠改變。這也簡(jiǎn)化了數(shù)據(jù)一致性問(wèn)題,并且使高吞吐量的數(shù)據(jù)訪問(wèn)成為可能。

不支持低延時(shí)數(shù)據(jù)訪問(wèn):這也是HDFS數(shù)據(jù)訪問(wèn)的特點(diǎn),HDFS關(guān)系的是高吞吐量,不適合那些低延時(shí)數(shù)據(jù)訪問(wèn)的應(yīng)用。

單用戶寫入,不支持任意修改:HDFS的數(shù)據(jù)以讀為主,只支持單個(gè)寫入者,并且寫操作總是以添加的形式在文末追加,不支持在任意位置進(jìn)行修改。

3 HDFS架構(gòu)

HDFS采用Master/Slave架構(gòu)。一個(gè)HDFS集群有兩個(gè)重要的角色,分別是Namenode和Datanode。Namenode是管理節(jié)點(diǎn),負(fù)責(zé)管理文件系統(tǒng)的命名空間(namespace)以及客戶端對(duì)文件的訪問(wèn)。Datanode是實(shí)際存儲(chǔ)數(shù)據(jù)的節(jié)點(diǎn)。HDFS暴露了文件系統(tǒng)的命名空間,用戶能夠以操作文件的形式在上面操作數(shù)據(jù)。HDFS架構(gòu)圖如下:

HDFS架構(gòu)與設(shè)計(jì)原理

HDFS上的文件是以數(shù)據(jù)塊的形式存放的,這些數(shù)據(jù)塊通常存儲(chǔ)在一組Datanode上。Namenode執(zhí)行文件系統(tǒng)的命名空間操作,比如打開(kāi)、關(guān)閉、重命名文件或目錄。它也負(fù)責(zé)確定數(shù)據(jù)塊到具體Datanode節(jié)點(diǎn)的映射。Datanode負(fù)責(zé)處理文件系統(tǒng)客戶端的讀寫請(qǐng)求,并在Namenode的統(tǒng)一調(diào)度下執(zhí)行數(shù)據(jù)塊的創(chuàng)建、刪除和復(fù)制。

4 數(shù)據(jù)塊與副本機(jī)制

HDFS被設(shè)計(jì)成能夠在一個(gè)大集群中跨機(jī)器可靠地存儲(chǔ)超大文件。它將每個(gè)文件存儲(chǔ)成一系列的數(shù)據(jù)塊,除了最后一個(gè),所有的數(shù)據(jù)塊都是同樣大小的。為了容錯(cuò),文件的所有數(shù)據(jù)塊都會(huì)有副本。每個(gè)文件的數(shù)據(jù)塊大小和副本系數(shù)都是可配置的。應(yīng)用程序可以指定某個(gè)文件的副本數(shù)目。副本系數(shù)可以在文件創(chuàng)建的時(shí)候指定,也可以在之后改變。HDFS中的文件都是一次性寫入的,并且嚴(yán)格要求在任何時(shí)候只能有一個(gè)寫入者。

HDFS架構(gòu)與設(shè)計(jì)原理

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ù)塊的列表。

5 機(jī)架感知與副本存放

副本的存放是HDFS可靠性和性能的關(guān)鍵,HDFS在這方面做了優(yōu)化,它采用一種稱為 機(jī)架感知 (Rack Awareness)  的策略來(lái)改進(jìn)數(shù)據(jù)的可靠性、可用性和網(wǎng)絡(luò)帶寬的利用率。

大型HDFS  實(shí)例一般運(yùn)行在跨越多個(gè)機(jī)架的計(jì)算機(jī)組成的集群上,不同機(jī)架上的兩臺(tái)機(jī)器之間的通訊需要經(jīng)過(guò)交換機(jī)。在大多數(shù)情況下,同一個(gè)機(jī)架內(nèi)的兩臺(tái)機(jī)器間的帶寬會(huì)比不同機(jī)架的兩臺(tái)機(jī)器間的帶寬大。

通過(guò)一個(gè)機(jī)架感知的過(guò)程,Namenode可以確定每個(gè)Datanode所屬的機(jī)架id。一個(gè)簡(jiǎn)單但沒(méi)有優(yōu)化的策略就是將副本存放在不同的機(jī)架上。這樣可以有效防止當(dāng)整個(gè)機(jī)架失效時(shí)數(shù)據(jù)的丟失,并且允許讀數(shù)據(jù)的時(shí)候充分利用多個(gè)機(jī)架的帶寬。這種策略設(shè)置可以將副本均勻分布在集群中,有利于當(dāng)組件失效情況下的負(fù)載均衡。但是,因?yàn)檫@種策略的一個(gè)寫操作需要傳輸數(shù)據(jù)塊到多個(gè)機(jī)架,這增加了寫的代價(jià)。

在大多數(shù)情況下,副本系數(shù)是3, HDFS存放策略  是將一個(gè)副本存放在本地機(jī)架的節(jié)點(diǎn)上,一個(gè)副本放在同一機(jī)架的另一個(gè)節(jié)點(diǎn)上,最后一個(gè)副本放在不同機(jī)架的節(jié)點(diǎn)上。這種策略減少了機(jī)架間的數(shù)據(jù)傳輸,這就提高了寫操作的效率。機(jī)架的錯(cuò)誤遠(yuǎn)遠(yuǎn)比節(jié)點(diǎn)的錯(cuò)誤少,所以這個(gè)策略不會(huì)影響到數(shù)據(jù)的可靠性和可用性。于此同時(shí),因?yàn)閿?shù)據(jù)塊只放在兩個(gè)(不是三個(gè))不同的機(jī)架上,所以此策略減少了讀取數(shù)據(jù)時(shí)需要的網(wǎng)絡(luò)傳輸總帶寬。這一策略在不損害數(shù)據(jù)可靠性和讀取性能的情況下改進(jìn)了寫的性能。

6 HDFS元數(shù)據(jù)管理

Namenode上保存著HDFS的命名空間。對(duì)于任何對(duì)文件系統(tǒng)元數(shù)據(jù)產(chǎn)生修改的操作,Namenode都會(huì)使用一種稱為EditLog的事務(wù)日志記錄下來(lái)。例如,在HDFS中創(chuàng)建一個(gè)文件,Namenode就會(huì)在Editlog中插入一條記錄來(lái)表示;同樣地,修改文件的副本系數(shù)也將往Editlog插入一條記錄。Namenode在本地操作系統(tǒng)的文件系統(tǒng)中存儲(chǔ)這個(gè)Editlog。整個(gè)文件系統(tǒng)的命名空間,包括數(shù)據(jù)塊到文件的映射、文件的屬性等,都存儲(chǔ)在一個(gè)稱為FsImage的文件中,這個(gè)文件也是放在Namenode所在的本地文件系統(tǒng)上。

Namenode在內(nèi)存中保存著整個(gè)文件系統(tǒng)的命名空間和文件數(shù)據(jù)塊映射(Blockmap)的映像。當(dāng)Namenode啟動(dòng),或者檢查點(diǎn)被周期性觸發(fā)時(shí),它從硬盤中讀取Editlog和FsImage,將所有Editlog中的事務(wù)作用在內(nèi)存中的FsImage上,并將這個(gè)新版本的FsImage從內(nèi)存持久化到本地磁盤上。然后HDFS刪除舊的Editlog,因?yàn)檫@個(gè)舊  的Editlog的事務(wù)都已經(jīng)作用在FsImage上了。這個(gè)過(guò)程被稱為一個(gè) 檢查點(diǎn) (checkpoint)。  在檢查點(diǎn)期間,Editlog的更改將應(yīng)用于FsImage。 checkpoint 觸發(fā)時(shí)機(jī)  ,可以是以給定的時(shí)間間隔(dfs.namenode.checkpoint.period,單位秒)觸發(fā),或者在給定數(shù)量的文件系統(tǒng)事務(wù)累積之后(dfs.namenode.checkpoint.txns)觸發(fā)。  如果設(shè)置了這兩個(gè)屬性,則要達(dá)到的第一個(gè)閾值將觸發(fā)檢查點(diǎn)。

到此,相信大家對(duì)“HDFS架構(gòu)與設(shè)計(jì)原理”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向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