自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

分布式文件系統(tǒng)HDFS體系和設(shè)計(jì)那些事兒

運(yùn)維 系統(tǒng)運(yùn)維 分布式
HDFS是高容錯(cuò)性的,可以部署在低成本的硬件之上,HDFS提供高吞吐量地對(duì)應(yīng)用程序數(shù)據(jù)訪問,它適合大數(shù)據(jù)集的應(yīng)用程序,HDFS放開一些POSIX的需求去實(shí)現(xiàn)流式地訪問文件數(shù)據(jù)……本文將詳解HDFS體系和設(shè)計(jì)那些事兒。

1.介紹

hadoop文件系統(tǒng)(HDFS)是一個(gè)運(yùn)行在普通的硬件之上的分布式文件系統(tǒng),它和現(xiàn)有的分布式文件系統(tǒng)有著很多的相似性,然而和其他的分布式文件系統(tǒng)的區(qū)別也是很明顯的,HDFS是高容錯(cuò)性的,可以部署在低成本的硬件之上,HDFS提供高吞吐量地對(duì)應(yīng)用程序數(shù)據(jù)訪問,它適合大數(shù)據(jù)集的應(yīng)用程序,HDFS放開一些POSIX的需求去實(shí)現(xiàn)流式地訪問文件數(shù)據(jù),HDFS開始是為開源的apache項(xiàng)目nutch的基礎(chǔ)結(jié)構(gòu)而創(chuàng)建,HDFS是hadoop項(xiàng)目的一部分,而hadoop又是lucene的一部分。

2.假定和目標(biāo)

硬件故障

硬件的故障時(shí)很正常的,而不是異常。整個(gè)HDFS系統(tǒng)將由數(shù)百或數(shù)千個(gè)存儲(chǔ)著文件數(shù)據(jù)片斷的服務(wù)器組成。實(shí)際上它里面有非常巨大的組成部分,每一個(gè)組成部分都會(huì)頻繁地出現(xiàn)故障,這就意味著HDFS里的一些組成部分是總是失效的,因此,故障的檢測(cè)和自動(dòng)快速恢復(fù)是HDFS一個(gè)很核心的結(jié)構(gòu)目標(biāo)。

流式的數(shù)據(jù)訪問

運(yùn)行在HDFS之上的應(yīng)用程序必須流式地訪問它們的數(shù)據(jù)集,它不是典型的運(yùn)行在常規(guī)的文件系統(tǒng)之上的常規(guī)程序。HDFS是設(shè)計(jì)成適合批量處理的,而不是用戶交互式的。重點(diǎn)是在數(shù)據(jù)吞吐量,而不是數(shù)據(jù)訪問的反應(yīng)時(shí)間,POSIX強(qiáng)制的很多硬性需求對(duì)很多應(yīng)用不是必須的,去掉POSIX的很多關(guān)鍵地方的語(yǔ)義以獲得更好的數(shù)據(jù)吞吐率。 大數(shù)據(jù)集運(yùn)行在HDFS之上的程序有很大量的數(shù)據(jù)集。這意味著典型的HDFS文件是GB到TB的大小,所以,HDFS是很好地支持大文件。它應(yīng)該提供很高的聚合數(shù)據(jù)帶寬,應(yīng)該一個(gè)集群中支持?jǐn)?shù)百個(gè)節(jié)點(diǎn),還應(yīng)該支持一個(gè)集群中千萬(wàn)的文件。

簡(jiǎn)單一致性模型

大部分的HDFS程序?qū)ξ募僮餍枰氖且淮螌懭?,多次讀取的。一個(gè)文件一旦創(chuàng)建、寫入、關(guān)閉之后就不需要修改了。這個(gè)假定簡(jiǎn)單化了數(shù)據(jù)一致的問題和高吞吐量的數(shù)據(jù)訪問。Map-Reduce程序或者網(wǎng)絡(luò)爬蟲程序都是非常完美地適合這個(gè)模型。有一個(gè)計(jì)劃在將來實(shí)現(xiàn)文件的附加寫入。

移動(dòng)計(jì)算比移動(dòng)數(shù)據(jù)更經(jīng)濟(jì)

在靠近要被計(jì)算的數(shù)據(jù)所存儲(chǔ)的位置來進(jìn)行計(jì)算是最理想的狀態(tài),尤其是在數(shù)據(jù)集特別巨大的時(shí)候。這樣消除了網(wǎng)絡(luò)的擁堵,提高了系統(tǒng)的整體吞吐量。這個(gè)假定就是將計(jì)算離數(shù)據(jù)更近比將文件移動(dòng)到程序運(yùn)行的位置更好。HDFS提供了接口,來讓程序?qū)⒆约阂苿?dòng)到離數(shù)據(jù)存儲(chǔ)的位置更近。

輕便的訪問異構(gòu)的軟硬件平臺(tái)

HDFS應(yīng)該設(shè)計(jì)成這樣的一種方式,就是簡(jiǎn)單輕便地從一個(gè)平臺(tái)到另外一個(gè)平臺(tái),這將推動(dòng)需要大數(shù)據(jù)集的應(yīng)用更廣泛地采用HDFS作為平臺(tái)。

名字節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)

HDFS是一個(gè)主從結(jié)構(gòu)的體系,一個(gè)HDFS集群是由一個(gè)名字節(jié)點(diǎn),它是一個(gè)管理文件的命名空間和調(diào)節(jié)客戶端訪問文件的主服務(wù)器,當(dāng)然還有的數(shù)據(jù)節(jié)點(diǎn),一個(gè)節(jié)點(diǎn)一個(gè),它來管理存儲(chǔ)。HDFS暴露文件命名空間和允許用戶數(shù)據(jù)存儲(chǔ)成文件。

內(nèi)部機(jī)制是將一個(gè)文件分割成一個(gè)或多個(gè)的塊,這些塊存儲(chǔ)在一組數(shù)據(jù)節(jié)點(diǎn)中。名字節(jié)點(diǎn)操作文件命名空間的文件或目錄操作,如打開,關(guān)閉,重命名,等等。它同時(shí)確定塊與數(shù)據(jù)節(jié)點(diǎn)的映射。數(shù)據(jù)節(jié)點(diǎn)來負(fù)責(zé)來自文件系統(tǒng)客戶的讀寫請(qǐng)求。

數(shù)據(jù)節(jié)點(diǎn)同時(shí)還要執(zhí)行塊的創(chuàng)建,刪除,和來自名字節(jié)點(diǎn)的塊復(fù)制指示。

名字節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)都是軟件運(yùn)行在普通的機(jī)器之上,機(jī)器典型的都是linux,HDFS是用java來寫的,任何支持java的機(jī)器都可以運(yùn)行名字節(jié)點(diǎn)或數(shù)據(jù)節(jié)點(diǎn),利用java語(yǔ)言的超輕便型,很容易將HDFS部署到大范圍的機(jī)器上。典型的部署時(shí)將有一個(gè)專門的機(jī)器來運(yùn)行名字節(jié)點(diǎn)軟件,機(jī)群中的其他機(jī)器運(yùn)行一個(gè)數(shù)據(jù)節(jié)點(diǎn)實(shí)例。體系結(jié)構(gòu)排斥在一個(gè)機(jī)器上運(yùn)行多個(gè)數(shù)據(jù)節(jié)點(diǎn)的實(shí)例,但是實(shí)際的部署不會(huì)有這種情況。

集群中只有一個(gè)名字節(jié)點(diǎn)極大地簡(jiǎn)單化了系統(tǒng)的體系。名字節(jié)點(diǎn)是仲裁者和所有HDFS的元數(shù)據(jù)的倉(cāng)庫(kù)。系統(tǒng)設(shè)計(jì)成用戶的實(shí)際數(shù)據(jù)不經(jīng)過名字節(jié)點(diǎn)。#p#

文件命名空間

HDFS支持傳統(tǒng)的繼承是的文件組織。一個(gè)用戶或一個(gè)程序可以創(chuàng)建目錄,存儲(chǔ)文件到很多目錄之中。文件系統(tǒng)的名字空間層次和其他的文件系統(tǒng)相似??梢詣?chuàng)建、移動(dòng)文件,將文件從一個(gè)目錄移動(dòng)到另外一個(gè),或重命名。HDFS現(xiàn)在還沒有實(shí)現(xiàn)用戶的配額和訪問控制。HDFS還不支持硬鏈接和軟鏈接。然而,HDFS結(jié)構(gòu)不排斥在將來實(shí)現(xiàn)這些功能。

名字節(jié)點(diǎn)維護(hù)文件的系統(tǒng)的命名空間,任何文件命名空間的改變和或?qū)傩远急幻止?jié)點(diǎn)記錄。應(yīng)用程序可以指定文件的復(fù)制數(shù),文件的拷貝被稱作文件的復(fù)制因子,這些信息有名字空間來負(fù)責(zé)存儲(chǔ)。

數(shù)據(jù)復(fù)制

HDFS設(shè)計(jì)成可靠地在集群中的大量機(jī)器之間存儲(chǔ)非常大量的文件,它以塊序列的形式存儲(chǔ)每一個(gè)文件。文件的除了最后一個(gè)塊的其他塊都是相同的大小。屬于文件的塊為了故障容錯(cuò)而被復(fù)制。塊的大小和復(fù)制數(shù)可以為每個(gè)文件配置。HDFS中的文件都是嚴(yán)格地任何時(shí)候只有一個(gè)寫操作。程序可以特別地為某個(gè)文件指定。復(fù)制數(shù),文件的復(fù)制數(shù)可以在文件的創(chuàng)建的時(shí)候指定或者以后改變。名字節(jié)點(diǎn)來做所有的塊復(fù)制,它周期性地接受來自集群中數(shù)據(jù)節(jié)點(diǎn)的心跳和塊報(bào)告。一個(gè)心跳的收條表示這個(gè)數(shù)據(jù)節(jié)點(diǎn)是健康的,是渴望服務(wù)數(shù)據(jù)的。一個(gè)塊報(bào)告包括該數(shù)據(jù)節(jié)點(diǎn)上的所有的塊列表。

復(fù)制塊的放置位置。第一個(gè)塊的階段

復(fù)制塊的放置位置的選擇嚴(yán)重影響HDFS的可靠性和性能。這個(gè)特征是HDFS和其他的分布式文件系統(tǒng)的區(qū)別。這個(gè)特征需要很多的調(diào)節(jié)和經(jīng)驗(yàn)。根據(jù)機(jī)架的復(fù)制布局目的就是提高數(shù)據(jù)的可靠性,可用性和網(wǎng)絡(luò)帶寬的利用。

當(dāng)前的這方面的實(shí)現(xiàn)方式是在這個(gè)方向上的第一步。短期的目標(biāo)實(shí)現(xiàn)是這個(gè)方式要在生產(chǎn)環(huán)境下去驗(yàn)證,以得到它的行為和實(shí)現(xiàn)一個(gè)為將來的測(cè)試和研究更佳的方式的基礎(chǔ)。

HDFS運(yùn)行在跨越很多機(jī)架的集群機(jī)器之上。兩個(gè)不同機(jī)架上的節(jié)點(diǎn)通信是通過交換機(jī)的,在大多數(shù)情況下,兩個(gè)在相同機(jī)架上的節(jié)點(diǎn)之間的網(wǎng)絡(luò)帶寬是優(yōu)于在不同的機(jī)架之上的兩個(gè)機(jī)器。

在開始的時(shí)候,每一個(gè)數(shù)據(jù)節(jié)點(diǎn)自檢它所屬的機(jī)架,然后在向名字節(jié)點(diǎn)注冊(cè)的時(shí)候告知它的機(jī)架id。HDFS提供接口以便很容易地掛載檢測(cè)機(jī)架標(biāo)示的模塊。一個(gè)簡(jiǎn)單但不是最優(yōu)的方式就是將復(fù)制跨越不同的機(jī)架,這樣以保證在這個(gè)機(jī)架出現(xiàn)故障而不丟失數(shù)據(jù),還能在讀數(shù)據(jù)的時(shí)候充分利用不同機(jī)架的帶寬。這個(gè)方式均勻地將復(fù)制分散在集群中以簡(jiǎn)單化地實(shí)現(xiàn)了組件實(shí)效的負(fù)載均衡,然而,這個(gè)方式增加了寫的成本,因?yàn)閷懙臅r(shí)候需要傳輸文件塊到很多的機(jī)架。

在大多數(shù)復(fù)制數(shù)為3的普通的情況下,HDFS放置方式是將第一個(gè)放在本地節(jié)點(diǎn),將第二個(gè)復(fù)制放到本地機(jī)架上的另外一個(gè)節(jié)點(diǎn)而將第三個(gè)復(fù)制放到不同機(jī)架上的節(jié)點(diǎn)。這種方式減少了機(jī)架內(nèi)的寫流量,提高了寫的性能。機(jī)架失效的機(jī)會(huì)遠(yuǎn)小于機(jī)器實(shí)效的。這種方式?jīng)]有影響數(shù)據(jù)的可靠性和可用性的保證。但是它減少了讀操作的網(wǎng)絡(luò)聚合帶寬,因?yàn)槲募K存在

兩個(gè)不同的機(jī)架, 而不是三個(gè)。文件的復(fù)制不是均勻地分布在機(jī)架當(dāng)中。1/3在同一個(gè)節(jié)點(diǎn)上,第二個(gè)1/3復(fù)制在同一個(gè)機(jī)架上,另外1/3是均勻地分布在其他的機(jī)架上。這種方式提高了寫性能,而沒有影響數(shù)據(jù)的可靠性和讀性能。

上面的實(shí)現(xiàn)方式正在進(jìn)行中。

復(fù)制的選擇

HDFS嘗試滿足一個(gè)讀操作來自離它最近的復(fù)制。假如在讀節(jié)點(diǎn)的同一個(gè)機(jī)架上就有這個(gè)復(fù)制,就直接讀這個(gè),如果HDFS集群是跨越多個(gè)數(shù)據(jù)中心,那么本地?cái)?shù)據(jù)中心的復(fù)制是優(yōu)先于遠(yuǎn)程的復(fù)制。

安全模式

在啟動(dòng)的時(shí)候,名字節(jié)點(diǎn)進(jìn)入一個(gè)特殊的狀態(tài)叫做安全模式。安全模式是不發(fā)生文件塊的復(fù)制的。名字節(jié)點(diǎn)接受來自數(shù)據(jù)節(jié)點(diǎn)的心跳和塊報(bào)告。一個(gè)塊報(bào)告包括的是數(shù)據(jù)節(jié)點(diǎn)向名字節(jié)點(diǎn)報(bào)告數(shù)據(jù)塊的列表。

每一個(gè)塊有一個(gè)特定的最小復(fù)制數(shù)。當(dāng)名字節(jié)點(diǎn)檢查這個(gè)塊已經(jīng)大于最小的復(fù)制數(shù)就被認(rèn)為是安全地復(fù)制了,當(dāng)達(dá)到配置的塊安全復(fù)制比例時(shí)(+30s)名字節(jié)點(diǎn)就退出安全模式。它將檢測(cè)數(shù)據(jù)塊的列表,將小于特定復(fù)制數(shù)的塊復(fù)制到其他的數(shù)據(jù)節(jié)點(diǎn)。#p#

文件系統(tǒng)的元數(shù)據(jù)的持久化

HDFS的命名空間是由名字節(jié)點(diǎn)來存儲(chǔ)的。名字節(jié)點(diǎn)用事務(wù)日志叫做EditLog來持久化每一個(gè)對(duì)文件系統(tǒng)的元數(shù)據(jù)的改變,例如,在HDFS中創(chuàng)建一個(gè)新的文件,名字節(jié)點(diǎn)將會(huì)插入一吊記錄到EditLog來標(biāo)示這個(gè)改變。類似地,改變文件的復(fù)制因子也會(huì)向EditLog中插入一條記錄。名字節(jié)點(diǎn)在本地文件系統(tǒng)中用一個(gè)文件來存儲(chǔ)這個(gè)EditLog。完整的文件系統(tǒng)命名空間、文件塊的映射和文件系統(tǒng)的配置都存在一個(gè)叫FsImage的文件中,F(xiàn)sImage也是名字節(jié)點(diǎn)的本地文件系統(tǒng)中。

名字節(jié)點(diǎn)在內(nèi)存中有一個(gè)完整的文件系統(tǒng)命名空間和文件塊的映射鏡像。這個(gè)元數(shù)據(jù)時(shí)設(shè)計(jì)成緊湊的,這樣4G的內(nèi)存的名字節(jié)點(diǎn)就能很輕松地處理非常大文件數(shù)和目錄,當(dāng)名字節(jié)點(diǎn)啟動(dòng),它將從磁盤中讀取FsImage和EditLog應(yīng)用EditLog中的所有的事務(wù)到內(nèi)存中的FsImage表示方法,然后將新的元數(shù)據(jù)刷新到本地磁盤的新的FsImage中這樣可以截去舊的EditLog,因?yàn)槭聞?wù)已經(jīng)被處理并已經(jīng)持久化的FsImage中。這個(gè)過程叫做檢查點(diǎn)。在現(xiàn)在的實(shí)現(xiàn)檢查點(diǎn)在名字節(jié)點(diǎn)啟動(dòng)的時(shí)候發(fā)生。支持周期性的檢查點(diǎn)正在進(jìn)行中。

數(shù)據(jù)節(jié)點(diǎn)存儲(chǔ)HDFS數(shù)據(jù)到本地的文件系統(tǒng)中。數(shù)據(jù)節(jié)點(diǎn)沒有關(guān)于HDFS文件的信息。它以單獨(dú)的文件存儲(chǔ)每一個(gè)HDFS的塊到本地文件系統(tǒng)中。數(shù)據(jù)節(jié)點(diǎn)不產(chǎn)生所有的文件到同一個(gè)目錄中,而是它用啟發(fā)式的檢測(cè)最優(yōu)的每一個(gè)目錄的文件數(shù)。它在適當(dāng)?shù)臅r(shí)候創(chuàng)建子目錄。在本地文件的同一個(gè)目錄下創(chuàng)建所有的文件不是最優(yōu)的,因?yàn)楸镜匚募到y(tǒng)可能單個(gè)目錄里有數(shù)目巨大的文件效率較差。當(dāng)數(shù)據(jù)節(jié)點(diǎn)啟動(dòng)的時(shí)候,它將掃描它的本地文件系統(tǒng),根據(jù)本地的文件產(chǎn)生一個(gè)所有HDFS數(shù)據(jù)塊的列表并報(bào)告給名字節(jié)點(diǎn),這個(gè)報(bào)告稱作塊報(bào)告。

通信協(xié)議

所有的通信協(xié)議都是在TCP/IP協(xié)議之上的。一個(gè)客戶端和明確的配置端口的名字節(jié)點(diǎn)建立連接之后,它和名字節(jié)點(diǎn)的協(xié)議是ClientProtocal。數(shù)據(jù)節(jié)點(diǎn)和名字節(jié)點(diǎn)之間用DatanodeProtocal。詳細(xì)的這些協(xié)議將在后面解釋。

RPC抽象地包裝了ClientProtocol和DataNodeProtocol。根據(jù)設(shè)計(jì),名字節(jié)點(diǎn)不會(huì)發(fā)起一個(gè)RPC,它只是對(duì)數(shù)據(jù)節(jié)點(diǎn)和客戶端發(fā)起的RPC做出反饋。

魯莽性

HDFS的主要目標(biāo)就是在存在故障的情況下可靠地存儲(chǔ)數(shù)據(jù)。三個(gè)普通的故障是名字節(jié)點(diǎn)實(shí)效,數(shù)據(jù)節(jié)點(diǎn)實(shí)效,和網(wǎng)絡(luò)斷開。

磁盤故障,心跳和重新復(fù)制

一個(gè)數(shù)據(jù)節(jié)點(diǎn)周期性發(fā)送一個(gè)心跳信息到名字節(jié)點(diǎn)。網(wǎng)絡(luò)斷開會(huì)造成一個(gè)數(shù)據(jù)節(jié)點(diǎn)子集和名字節(jié)點(diǎn)失去聯(lián)系。名字節(jié)點(diǎn)發(fā)現(xiàn)這種情況是根據(jù)有沒有了心跳信息。名字節(jié)點(diǎn)標(biāo)記這些數(shù)據(jù)節(jié)點(diǎn)是死掉了,就不再將新的IO請(qǐng)求轉(zhuǎn)發(fā)到這些數(shù)據(jù)節(jié)點(diǎn)上。而這些數(shù)據(jù)節(jié)點(diǎn)上的數(shù)據(jù)將對(duì)HDFS不再可用。這將導(dǎo)致一些塊的復(fù)制因子降低到指定的值。

名字節(jié)點(diǎn)檢查所有的需要復(fù)制的塊,并開始復(fù)制他們到其他的數(shù)據(jù)節(jié)點(diǎn)上。重新復(fù)制會(huì)因?yàn)楹芏嘣蚨仨?例如:數(shù)據(jù)節(jié)點(diǎn)變得比可用,被破壞了的復(fù)制,數(shù)據(jù)節(jié)點(diǎn)上的磁盤損壞或增加了文件的復(fù)制因子。#p#

集群的重新均衡

HDFS體系結(jié)構(gòu)是兼容數(shù)據(jù)的重新平衡方案的。在數(shù)據(jù)節(jié)點(diǎn)的可用空間降低到一個(gè)極限時(shí)數(shù)據(jù)可能自動(dòng)的從一個(gè)數(shù)據(jù)節(jié)點(diǎn)移動(dòng)到另外一個(gè),而且一個(gè)突然地對(duì)一個(gè)特殊的文件發(fā)生高請(qǐng)求時(shí)也會(huì)引發(fā)額外的復(fù)制,將集群中的其他數(shù)據(jù)重新均衡。這種類型的重新均衡方案還沒有實(shí)現(xiàn)。

數(shù)據(jù)正確性

從數(shù)據(jù)節(jié)點(diǎn)上取一個(gè)文件塊有可能出現(xiàn)損壞的情況,這種情況可能會(huì)發(fā)生是因?yàn)榇鎯?chǔ)設(shè)備,差勁的網(wǎng)絡(luò),軟件的缺陷。HDFS客戶端實(shí)現(xiàn)了校驗(yàn)去檢查HDFS的文件內(nèi)容。當(dāng)一個(gè)客戶端創(chuàng)建一個(gè)HDFS文件,它為每一個(gè)文件快計(jì)算一個(gè)校驗(yàn)碼并存儲(chǔ)校驗(yàn)碼在同一個(gè)HDFS名字空間中的一個(gè)單獨(dú)的隱藏文件中。當(dāng)客戶端找回這個(gè)文件內(nèi)容時(shí),它再根據(jù)這個(gè)校驗(yàn)碼來驗(yàn)證從數(shù)據(jù)節(jié)點(diǎn)接受到的數(shù)據(jù)。如果不對(duì),客戶端可以從另外一個(gè)有該塊復(fù)制的數(shù)據(jù)節(jié)點(diǎn)取這個(gè)塊。

元數(shù)據(jù)磁盤實(shí)效

FsImage和Editlog是HDFS的中心數(shù)據(jù)結(jié)構(gòu)。這些文件的損壞會(huì)導(dǎo)致整個(gè)集群的不工作。應(yīng)為這個(gè)原因,名字節(jié)點(diǎn)可以配置成多個(gè)FsImage和EditLog的拷貝。任何的不管對(duì)FsImage和EditLog的更新都會(huì)同步地更新每一個(gè)拷貝。

這個(gè)同步的更新多個(gè)EditLog可能降低了名字節(jié)點(diǎn)的可支持名字空間的每秒交易數(shù)。但是這個(gè)降低是可接受的,因?yàn)镠DFS程序都是自然地對(duì)數(shù)據(jù)要求強(qiáng)烈,而不是對(duì)元數(shù)據(jù)的要求強(qiáng)烈。名字節(jié)點(diǎn)重新啟動(dòng)時(shí),選擇最新的一致的FsImage和EditLog。

名字節(jié)點(diǎn)隊(duì)以HDFS集群是單點(diǎn)實(shí)效的。假如名字節(jié)點(diǎn)實(shí)效,手工的干涉是必要的,當(dāng)前,自動(dòng)的重啟和切換到另外的名字節(jié)點(diǎn)目前還不支持。

快照

快照支持在一個(gè)特定時(shí)間存儲(chǔ)一個(gè)數(shù)據(jù)拷貝,快照的一個(gè)用途可以將實(shí)效的集群回滾到之前的一個(gè)正常時(shí)間點(diǎn)上。HDFS目前還不支持快照,但是將被將來的版本支持。

數(shù)據(jù)組織

數(shù)據(jù)塊

HDFS是設(shè)計(jì)成支持大文件數(shù)的。程序也是和HDFS一樣地處理大數(shù)據(jù)集。這些程序?qū)憯?shù)據(jù)僅一次,讀數(shù)據(jù)一次或多次,需要一個(gè)比較好的流讀取速度。HDFS支持文件的寫一次讀多次的。HDFS典型的塊大小是64M,一個(gè)HDFS文件可以最多被切分成128MB個(gè)塊,每一個(gè)塊分布在不同的數(shù)據(jù)節(jié)點(diǎn)上。

分段運(yùn)輸

當(dāng)一個(gè)客戶端請(qǐng)求創(chuàng)建一個(gè)文件的時(shí)候,并不是立即請(qǐng)求名字節(jié)點(diǎn),事實(shí)是,HDFS客戶端在本地的文件中緩存文件數(shù)據(jù),應(yīng)用程序的寫操作明顯地轉(zhuǎn)移到這個(gè)臨時(shí)的本地文件。當(dāng)本地文件堆積到大于HDFS塊大小的時(shí)候,客戶端聯(lián)系名字節(jié)點(diǎn)。名字節(jié)點(diǎn)插入文件名到文件系統(tǒng)層次當(dāng)中,然后構(gòu)造一個(gè)數(shù)據(jù)塊。名字節(jié)點(diǎn)回應(yīng)客戶端的請(qǐng)求包括數(shù)據(jù)節(jié)點(diǎn)(可能多個(gè))的標(biāo)識(shí)和目標(biāo)數(shù)據(jù)塊,客戶端再將本地的臨時(shí)文件刷新指定的數(shù)據(jù)節(jié)點(diǎn)數(shù)據(jù)塊中。

當(dāng)文件關(guān)閉,還有一些沒有刷新的本地臨時(shí)文件被傳遞到數(shù)據(jù)節(jié)點(diǎn)??蛻舳司屯ㄖ止?jié)點(diǎn),這個(gè)文件已經(jīng)關(guān)閉。這個(gè)時(shí)間和,名字節(jié)點(diǎn)提交文件的創(chuàng)建操作到持久化存儲(chǔ)。假如名字節(jié)點(diǎn)在文件關(guān)閉之前死掉,文件就丟掉了。

上面的方式在仔細(xì)地考慮運(yùn)行在HDFS之上的目標(biāo)程序之后被采用。應(yīng)用程序需要流式地寫文件。如果客戶端直接寫到遠(yuǎn)程文件系統(tǒng),而沒有本地的緩沖對(duì)網(wǎng)速和網(wǎng)絡(luò)吞吐量產(chǎn)生相當(dāng)?shù)挠绊?。這種方式也不是沒有前科,早期的分布是文件系統(tǒng),例如AFS也用客戶端的緩沖來提高性能,POSIX需求也不拘束高性能的數(shù)據(jù)上傳的實(shí)現(xiàn)。

流水線操作

當(dāng)客戶端寫數(shù)據(jù)到HDFS文件中,像上面所講數(shù)據(jù)首先寫道本地文件中,假設(shè)HDFS的復(fù)制因子是3,當(dāng)本地文件堆積到一塊大小的數(shù)據(jù),客戶端從名字節(jié)點(diǎn)獲得一個(gè)數(shù)據(jù)節(jié)點(diǎn)的列表。這個(gè)列表描述一些數(shù)據(jù)節(jié)點(diǎn)將接管塊的復(fù)制??蛻舳怂⑿聰?shù)據(jù)塊到第一個(gè)數(shù)據(jù)節(jié)點(diǎn)。第一個(gè)數(shù)據(jù)節(jié)點(diǎn)開始接收數(shù)據(jù)到一個(gè)很小的位置(4kb),寫每一個(gè)部分到本地的庫(kù)中,而且傳輸每一個(gè)部分到列表中的第二個(gè)數(shù)據(jù)節(jié)點(diǎn),這樣就輪到第二個(gè)數(shù)據(jù)節(jié)點(diǎn),第二個(gè)數(shù)據(jù)節(jié)點(diǎn)如同第一個(gè)數(shù)據(jù)節(jié)點(diǎn)給第三個(gè)數(shù)據(jù)節(jié)點(diǎn),第三個(gè)數(shù)據(jù)節(jié)點(diǎn)直接寫到本地的庫(kù)中。一個(gè)數(shù)據(jù)節(jié)點(diǎn)可以接受來自前一個(gè)的節(jié)點(diǎn)的數(shù)據(jù),同時(shí)還可以將數(shù)據(jù)流水式傳遞給下一個(gè)節(jié)點(diǎn),所以,數(shù)據(jù)時(shí)流水式地從一個(gè)數(shù)據(jù)節(jié)點(diǎn)傳遞到下一個(gè)。

可訪問

HDFS可以由應(yīng)用程序多種方式存取,自然地,HDFS提供為程序提供java api,為c語(yǔ)言包裝的java api也是可以的,還有一個(gè)HTTP瀏覽HDFS中的文件,通過WebDAV協(xié)議訪問HDFS內(nèi)容庫(kù)正在進(jìn)行。

DFSShell

HDFS允許用戶數(shù)據(jù)由文件和文件夾式的管理,它提供一個(gè)接口叫DFSShell,讓用戶和HDFS中的數(shù)據(jù)交互

命令集的語(yǔ)法跟其他的shells(bash,csh)相似

創(chuàng)建目錄foodir : hadoop dfs -mkdir /foodir

查看文件 /foodir/myfile.txt : hadoop dfs -cat /foodir/myfile.txt

刪除文件/foodir/myfile.txt : hadoop dfs -rm /foodir myfile.txt

DFSAdmin

DFSAdmin命令集是用于管理dfs集群的,這些命令只由HDFS管理員使用

將集群設(shè)置成安全模式 : bin/hadoop dfsadmin -safemode enter

產(chǎn)生一個(gè)數(shù)據(jù)節(jié)點(diǎn)的列表 : bin/hadoop dfsadmin -report

去掉一個(gè)數(shù)據(jù)節(jié)點(diǎn): bin/hadoop dfsadmin -decommission datanodename

瀏覽接口

典型的HDFS安裝配置了一個(gè)web 服務(wù)去暴露HDFS的命名空間,允許web瀏覽器去瀏覽HDFS的命名空間和查看

HDFS文件的內(nèi)容

空間回收

  • 文件刪除和恢復(fù)刪除

當(dāng)一個(gè)文件被用戶或程序刪除,它并不是立即從HDFS中刪除,而是HDFS將它重新命名到/trash目錄下的文件,這個(gè)文件只要還在/trash目錄下保留就可以重新快速恢復(fù)。當(dāng)這個(gè)文件在/trach里呆夠配置的時(shí)間,名字節(jié)點(diǎn)就將它從名字空間中刪除,這個(gè)刪除將導(dǎo)致這個(gè)文件的文件塊都被釋放。這個(gè)時(shí)間間隔可以被感知,從用戶刪除文件到HDFS的空閑空間的增加。

用戶可以在刪除一個(gè)文件之后,它還在/trash目錄下的情況下,恢復(fù)刪除一個(gè)文件,如果一個(gè)用戶希望恢復(fù)刪除他已經(jīng)刪除的文件,可以瀏覽/trash目錄,重新獲得這個(gè)文件。/trash目錄之保存最新版本的刪除文件。/trash目錄也像其他目錄一樣,只有一個(gè)特殊的功能,就是HDFS應(yīng)用一個(gè)特定的規(guī)則,自動(dòng)地刪除這個(gè)目錄里的文件,當(dāng)前默認(rèn)的規(guī)則是刪除在此目錄呆夠6小時(shí)的文件,將來這個(gè)規(guī)則將由一個(gè)接口來配置。

  • 減少?gòu)?fù)制因子

當(dāng)文件的復(fù)制因子減少了,名字節(jié)點(diǎn)選擇過度的復(fù)制去刪除掉,下一次的心跳的時(shí)候傳遞這個(gè)信息給數(shù)據(jù)節(jié)點(diǎn)。數(shù)據(jù)節(jié)點(diǎn)移除相應(yīng)的塊,相應(yīng)的空閑空間將顯示在集群中,這一點(diǎn)要注意的就是這個(gè)可能會(huì)有段時(shí)間過程在完成setReplication和顯示集群的空閑空間。

責(zé)任編輯:黃丹 來源: huihoo.com
相關(guān)推薦

2013-01-07 10:29:31

大數(shù)據(jù)

2012-08-31 16:04:11

HDFS分布式文件系統(tǒng)

2013-06-18 14:00:59

HDFS分布式文件系統(tǒng)

2013-06-18 14:33:13

HDFS分布式文件系統(tǒng)

2013-01-09 10:16:09

HDFS

2021-04-13 08:06:17

分布式HDFS存儲(chǔ)大型數(shù)據(jù)

2018-03-01 16:26:30

HDFSHadoop系統(tǒng)

2013-01-07 10:42:43

HDFS

2010-11-01 05:50:46

分布式文件系統(tǒng)

2013-06-18 16:58:12

HDFS分布式文件系統(tǒng)

2013-06-13 11:29:14

分布式分布式緩存

2010-06-07 14:02:13

Hadoop的分布式文

2013-05-27 14:46:06

文件系統(tǒng)分布式文件系統(tǒng)

2018-08-14 10:44:58

HadoopHDFS命令

2017-10-17 08:33:31

存儲(chǔ)系統(tǒng)分布式

2010-11-15 13:24:07

分布式文件系統(tǒng)

2010-06-04 18:45:43

Hadoop分布式文件

2012-09-19 13:43:13

OpenAFS分布式文件系統(tǒng)

2012-09-19 15:05:24

MogileFS分布式文件系統(tǒng)

2010-06-07 10:39:40

Hadoop分布式文件
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)