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

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

運(yùn)維 系統(tǒng)運(yùn)維 分布式
HDFS是HadoopDistributedFileSystem的簡(jiǎn)稱(chēng),既然是分布式文件系統(tǒng),首先它必須是一個(gè)文件系統(tǒng),那么在Hadoop上面的文件系統(tǒng)會(huì)不會(huì)也像一般的文件系統(tǒng)一樣由目錄結(jié)構(gòu)和一組文件構(gòu)成呢?分布式是不是就是將文件分成幾部分分別存儲(chǔ)在不同的機(jī)器上呢?看完本文的HDFS解讀,你就會(huì)明白的。

【前言】是蠻久木有寫(xiě)過(guò)關(guān)于hadoop的博客了額,雖然最近也看了一些關(guān)于linux的基礎(chǔ)知識(shí),但似乎把這個(gè)東西忘記了,其實(shí)時(shí)不時(shí)回顧一下以前的知識(shí)還是蠻有意思的,且行且憶!我們Hadoop主要由HDFS和MapReduce引擎兩部分組成。***部是HDFS,它存儲(chǔ)Hadoop集群中所有存儲(chǔ)節(jié)點(diǎn)上的文件。HDFS的上一層是MapReduce引擎,該引擎由JobTrackers和TaskTrackers組成。這篇博客就主要來(lái)講講HDFS吧~~~

HDFS是HadoopDistributedFileSystem的簡(jiǎn)稱(chēng),既然是分布式文件系統(tǒng),首先它必須是一個(gè)文件系統(tǒng),那么在Hadoop上面的文件系統(tǒng)會(huì)不會(huì)也像一般的文件系統(tǒng)一樣由目錄結(jié)構(gòu)和一組文件構(gòu)成呢?分布式是不是就是將文件分成幾部分分別存儲(chǔ)在不同的機(jī)器上呢?HDFS到底有什么優(yōu)點(diǎn)值得這么小題大作呢?

好吧,讓我們帶著疑問(wèn)一個(gè)個(gè)去探索吧!

一、HDFS基本概念

1、數(shù)據(jù)塊

HDFS默認(rèn)的最基本的存儲(chǔ)單位是64M的數(shù)據(jù)塊,這個(gè)數(shù)據(jù)塊可以理解和一般的文件里面的分塊是一樣的

2、元數(shù)據(jù)節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)

元數(shù)據(jù)節(jié)點(diǎn)(namenode)用來(lái)管理文件系統(tǒng)的命名空間,它將所有的文件和文件夾的元數(shù)據(jù)保存在一個(gè)文件系統(tǒng)樹(shù)中。

數(shù)據(jù)節(jié)點(diǎn)(datanode)就是用來(lái)存儲(chǔ)數(shù)據(jù)文件的。

從元數(shù)據(jù)節(jié)點(diǎn)(secondarynamenode)不是我們所想象的元數(shù)據(jù)節(jié)點(diǎn)的備用節(jié)點(diǎn),其實(shí)它主要的功能是主要功能就是周期性將元數(shù)據(jù)節(jié)點(diǎn)的命名空間鏡像文件和修改日志合并,以防日志文件過(guò)大。

這里先來(lái)弄清楚這個(gè)三種節(jié)點(diǎn)的關(guān)系吧!其實(shí)元數(shù)據(jù)節(jié)點(diǎn)上存儲(chǔ)的東西就相當(dāng)于一般文件系統(tǒng)中的目錄,也是有命名空間的映射文件以及修改的日志,只是分布式文件系統(tǒng)就將數(shù)據(jù)分布在各個(gè)機(jī)器上進(jìn)行存儲(chǔ)罷了,下面你看看這幾張說(shuō)明圖應(yīng)該就能明白了!

Namenode與secondarynamenode之間的進(jìn)行checkpoint的過(guò)程。

3、HDFS中的數(shù)據(jù)流

讀文件

客戶端(client)用FileSystem的open()函數(shù)打開(kāi)文件,DistributedFileSystem用RPC調(diào)用元數(shù)據(jù)節(jié)點(diǎn),得到文件的數(shù)據(jù)塊信息。對(duì)于每一個(gè)數(shù)據(jù)塊,元數(shù)據(jù)節(jié)點(diǎn)返回保存數(shù)據(jù)塊的數(shù)據(jù)節(jié)點(diǎn)的地址。DistributedFileSystem返回FSDataInputStream給客戶端,用來(lái)讀取數(shù)據(jù)??蛻舳苏{(diào)用stream的read()函數(shù)開(kāi)始讀取數(shù)據(jù)。DFSInputStream連接保存此文件***個(gè)數(shù)據(jù)塊的最近的數(shù)據(jù)節(jié)點(diǎn)。Data從數(shù)據(jù)節(jié)點(diǎn)讀到客戶端(client),當(dāng)此數(shù)據(jù)塊讀取完畢時(shí),DFSInputStream關(guān)閉和此數(shù)據(jù)節(jié)點(diǎn)的連接,然后連接此文件下一個(gè)數(shù)據(jù)塊的最近的數(shù)據(jù)節(jié)點(diǎn)。當(dāng)客戶端讀取完畢數(shù)據(jù)的時(shí)候,調(diào)用FSDataInputStream的close函數(shù)。

整個(gè)過(guò)程就是如圖所示:

寫(xiě)文件

客戶端調(diào)用create()來(lái)創(chuàng)建文件,DistributedFileSystem用RPC調(diào)用元數(shù)據(jù)節(jié)點(diǎn),在文件系統(tǒng)的命名空間中創(chuàng)建一個(gè)新的文件。元數(shù)據(jù)節(jié)點(diǎn)首先確定文件原來(lái)不存在,并且客戶端有創(chuàng)建文件的權(quán)限,然后創(chuàng)建新文件。DistributedFileSystem返回DFSOutputStream,客戶端用于寫(xiě)數(shù)據(jù)??蛻舳碎_(kāi)始寫(xiě)入數(shù)據(jù),DFSOutputStream將數(shù)據(jù)分成塊,寫(xiě)入dataqueue。Dataqueue由DataStreamer讀取,并通知元數(shù)據(jù)節(jié)點(diǎn)分配數(shù)據(jù)節(jié)點(diǎn),用來(lái)存儲(chǔ)數(shù)據(jù)塊(每塊默認(rèn)復(fù)制3塊)。分配的數(shù)據(jù)節(jié)點(diǎn)放在一個(gè)pipeline里。DataStreamer將數(shù)據(jù)塊寫(xiě)入pipeline中的***個(gè)數(shù)據(jù)節(jié)點(diǎn)。***個(gè)數(shù)據(jù)節(jié)點(diǎn)將數(shù)據(jù)塊發(fā)送給第二個(gè)數(shù)據(jù)節(jié)點(diǎn)。第二個(gè)數(shù)據(jù)節(jié)點(diǎn)將數(shù)據(jù)發(fā)送給第三個(gè)數(shù)據(jù)節(jié)點(diǎn)。DFSOutputStream為發(fā)出去的數(shù)據(jù)塊保存了ackqueue,等待pipeline中的數(shù)據(jù)節(jié)點(diǎn)告知數(shù)據(jù)已經(jīng)寫(xiě)入成功。如果數(shù)據(jù)節(jié)點(diǎn)在寫(xiě)入的過(guò)程中失敗:關(guān)閉pipeline,將ackqueue中的數(shù)據(jù)塊放入dataqueue的開(kāi)始。

整個(gè)過(guò)程如圖所示:

二、HDFS構(gòu)架與設(shè)計(jì)

Hadoop也是一個(gè)能夠分布式處理大規(guī)模海量數(shù)據(jù)的軟件框架,這一切都是在可靠、高效、可擴(kuò)展的基礎(chǔ)上。Hadoop的可靠性——因?yàn)镠adoop假設(shè)計(jì)算元素和存儲(chǔ)會(huì)出現(xiàn)故障,因?yàn)樗S護(hù)多個(gè)工作數(shù)據(jù)副本,在出現(xiàn)故障時(shí)可以對(duì)失敗的節(jié)點(diǎn)重新分布處理。Hadoop的高效性——在MapReduce的思想下,Hadoop是并行工作的,以加快任務(wù)處理速度。Hadoop的可擴(kuò)展——依賴于部署Hadoop軟件框架計(jì)算集群的規(guī)模,Hadoop的運(yùn)算是可擴(kuò)展的,具有處理PB級(jí)數(shù)據(jù)的能力。

Hadoop主要由HDFS(HadoopDistributedFileSystem)和MapReduce引擎兩部分組成。***部是HDFS,它存儲(chǔ)Hadoop集群中所有存儲(chǔ)節(jié)點(diǎn)上的文件。HDFS的上一層是MapReduce引擎,該引擎由JobTrackers和TaskTrackers組成。

HDFS可以執(zhí)行的操作有創(chuàng)建、刪除、移動(dòng)或重命名文件等,架構(gòu)類(lèi)似于傳統(tǒng)的分級(jí)文件系統(tǒng)。需要注意的是,HDFS的架構(gòu)基于一組特定的節(jié)點(diǎn)而構(gòu)建(參見(jiàn)圖2),這是它自身的特點(diǎn)。HDFS包括唯一的NameNode,它在HDFS內(nèi)部提供元數(shù)據(jù)服務(wù);DataNode為HDFS提供存儲(chǔ)塊。由于NameNode是唯一的,這也是HDFS的一個(gè)弱點(diǎn)(單點(diǎn)失敗)。一旦NameNode故障,后果可想而知。

1、HDFS構(gòu)架(如圖所示)

2、HDFS的設(shè)計(jì)

1)錯(cuò)誤檢測(cè)和快速、自動(dòng)的恢復(fù)是HDFS的核心架構(gòu)目標(biāo)。

2)比之關(guān)注數(shù)據(jù)訪問(wèn)的低延遲問(wèn)題,更關(guān)鍵的在于數(shù)據(jù)訪問(wèn)的高吞吐量。

3)HDFS應(yīng)用對(duì)文件要求的是write-one-read-many訪問(wèn)模型。

4)移動(dòng)計(jì)算的代價(jià)比之移動(dòng)數(shù)據(jù)的代價(jià)低。

3、文件系統(tǒng)的namespace

Namenode維護(hù)文件系統(tǒng)的namespace,一切對(duì)namespace和文件屬性進(jìn)行修改的都會(huì)被namenode記錄下來(lái),連文件副本的數(shù)目稱(chēng)為replication因子,這個(gè)也是由namenode記錄的。

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

Namenode全權(quán)管理block的復(fù)制,它周期性地從集群中的每個(gè)Datanode接收心跳包和一個(gè)Blockreport。心跳包的接收表示該Datanode節(jié)點(diǎn)正常工作,而B(niǎo)lockreport包括了該Datanode上所有的block組成的列表。HDFS采用一種稱(chēng)為rack-aware的策略來(lái)改進(jìn)數(shù)據(jù)的可靠性、有效性和網(wǎng)絡(luò)帶寬的利用。完成對(duì)副本的存放。

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

Namenode在內(nèi)存中保存著整個(gè)文件系統(tǒng)namespace和文件Blockmap的映像。這個(gè)關(guān)鍵的元數(shù)據(jù)設(shè)計(jì)得很緊湊,因而一個(gè)帶有4G內(nèi)存的Namenode足夠支撐海量的文件和目錄。當(dāng)Namenode啟動(dòng)時(shí),它從硬盤(pán)中讀取Editlog和FsImage,將所有Editlog中的事務(wù)作用(apply)在內(nèi)存中的FsImage,并將這個(gè)新版本的FsImage從內(nèi)存中flush到硬盤(pán)上,然后再truncate這個(gè)舊的Editlog,因?yàn)檫@個(gè)舊的Editlog的事務(wù)都已經(jīng)作用在FsImage上了。這個(gè)過(guò)程稱(chēng)為checkpoint。在當(dāng)前實(shí)現(xiàn)中,checkpoint只發(fā)生在Namenode啟動(dòng)時(shí),在不久的將來(lái)我們將實(shí)現(xiàn)支持周期性的checkpoint。

6、通信協(xié)議

所有的HDFS通訊協(xié)議都是構(gòu)建在TCP/IP協(xié)議上??蛻舳送ㄟ^(guò)一個(gè)可配置的端口連接到Namenode,通過(guò)ClientProtocol與Namenode交互。而Datanode是使用DatanodeProtocol與Namenode交互。從ClientProtocol和Datanodeprotocol抽象出一個(gè)遠(yuǎn)程調(diào)用(RPC),在設(shè)計(jì)上,Namenode不會(huì)主動(dòng)發(fā)起RPC,而是是響應(yīng)來(lái)自客戶端和Datanode的RPC請(qǐng)求。

HDFS不是這么簡(jiǎn)單就能說(shuō)清楚的,在以后的博客中我還會(huì)繼續(xù)研究hadoop的分布式文件系統(tǒng),包括HDFS的源碼分析等,現(xiàn)由于時(shí)間有限,暫時(shí)只做了以上一些簡(jiǎn)單的介紹吧,希望對(duì)大家由此對(duì)HDFS有一定的了解!

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

2013-01-07 10:29:31

大數(shù)據(jù)

2012-08-31 16:04:11

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

2012-07-20 14:40:22

2018-10-11 10:55:44

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

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)

2018-08-14 10:44:58

HadoopHDFS命令

2013-06-18 14:13:43

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

2013-06-18 14:33:13

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

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)

2013-05-27 14:46:06

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

2011-07-15 17:48:27

Platform
點(diǎn)贊
收藏

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