真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

NameNode對(duì)命名空間的管理

最近繼續(xù)在看《Hadoop 2.X HDFS源碼剖析》,現(xiàn)在看到了第三章NameNode部分。NameNode在hdfs這種文件系統(tǒng)中充當(dāng)著master的角色,負(fù)責(zé)的功能有很多比如文件系統(tǒng)目錄管理(命名空間管理)、數(shù)據(jù)塊管理、數(shù)據(jù)節(jié)點(diǎn)管理、租約管理、緩存管理等等。這次主要寫(xiě)關(guān)于命名空間管理的筆記。

創(chuàng)新互聯(lián)專(zhuān)注于孟津企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),商城開(kāi)發(fā)。孟津網(wǎng)站建設(shè)公司,為孟津等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站制作,專(zhuān)業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專(zhuān)業(yè)和態(tài)度為您提供的服務(wù)

  1. 基本類(lèi)型

hdfs中最基本的類(lèi)應(yīng)該就是INode了,無(wú)論是最后的目錄、具體文件、軟連接還是添加快照功能之后的引用都是這個(gè)類(lèi)的子類(lèi),繼承關(guān)系如下圖所示

NameNode對(duì)命名空間的管理

圖表一

INode:包括parent這個(gè)字段表明父INode,還提供了isFile()、isDirectory()、isRoot()這些接口;

INodeWithAddtionalFields:包括id、name、permission、features這些字段,進(jìn)一步拓展基本信息;

INodeFile:在父類(lèi)的基礎(chǔ)上定義了header以及bolcks(BlockInfo[]類(lèi)型),對(duì)應(yīng)的feature可以表示是否在構(gòu)建中(underconstruction),是否有快照(snapshot);

INodeDirectory:在父類(lèi)的基礎(chǔ)上增加了childern字段,表明所有的子INode,對(duì)應(yīng)的feature可以有是否有快照(snapshot),是否有限額(quota);

INodeReference:這個(gè)類(lèi)以及子類(lèi)主要是在開(kāi)啟快照功能的時(shí)候使用,在介紹之前首先介紹一下快照,所謂快照就是保存這個(gè)目錄當(dāng)前狀態(tài),這樣不論以后對(duì)這個(gè)目錄里面的文件做了刪除、增加還是重命名,都可以通過(guò)快照獲取這個(gè)時(shí)間下目錄的所有文件;

就像下面的圖表二所示

NameNode對(duì)命名空間的管理

圖表二

 

在t0時(shí),存在文件/A/TXT,并且建立了對(duì)應(yīng)時(shí)間/A目錄的快照snapshot:t0,那么當(dāng)t0之后將TXT移動(dòng)到/B目錄的時(shí)候,直接訪問(wèn)A是找不到文件的,但是可以通過(guò)訪問(wèn)/A這個(gè)INodeWithAdditionalFields對(duì)象的feature數(shù)組,訪問(wèn)到t0時(shí)刻的快照,接著就可以根據(jù)相應(yīng)的INodeReference對(duì)象,找到TXT文件現(xiàn)在對(duì)應(yīng)的位置。

這里WithName可以理解為文件修改之前的位置,DSTReference可以理解為文件修改之后的位置,他們都會(huì)指向一個(gè)WithCount,但是WithName跟前者可以使多對(duì)一的關(guān)系,因?yàn)榭梢源嬖诙鄠€(gè)保存了TXT這個(gè)文件的快照,而只能有一個(gè)DstReference表示這個(gè)文件當(dāng)前的路徑(WithCount的parent對(duì)象就是DstReference),最后WithCount指向了真正的文件/B/TXT。

 

  1. 關(guān)于日志

關(guān)于日志的細(xì)節(jié)很多,但是印象最深的地方只有如下兩點(diǎn)(或許是我看的不夠深入吧、[捂臉]):

1) 日志采用雙緩沖的方式,同時(shí)進(jìn)行邏輯以及物理IO:
    這個(gè)緩沖區(qū)是由Ready(磁盤(pán)IO)以及Current(內(nèi)存IO)兩個(gè)部分組成的,寫(xiě)日志的線程,負(fù)責(zé)將日志寫(xiě)入Current中,而當(dāng)Current寫(xiě)滿(mǎn)了,需要保存到硬盤(pán)上的時(shí)候,將兩塊區(qū)域調(diào)換名字即可,這樣日志持久化的操作不會(huì)影響當(dāng)前日志的寫(xiě)入操作;

2) 由于可以存在多個(gè)寫(xiě)入日志的地方,調(diào)用寫(xiě)日志的時(shí)候使用一個(gè)保存所有輸出流的集合journalSet進(jìn)行調(diào)用,很方便:

journalSet對(duì)象有一個(gè)selectInputStreams的方法,用于選擇需要輸出的日志輸出流,這樣就把journalSet與需要輸出的流綁定到一起了,接著直接調(diào)用journalSet.startLogSegment方法開(kāi)始寫(xiě)入日志。

 

  1. 關(guān)于FSImage

這個(gè)類(lèi)負(fù)責(zé)保存命名空間到磁盤(pán)、啟動(dòng)時(shí)加載fsImage文件以及加載editlog文件:

1) 保存命名空間:

保存的命名空間按照以下格式將內(nèi)存中的內(nèi)容,保存到磁盤(pán)中,如圖表三所示

NameNode對(duì)命名空間的管理

圖表三

MagicNumber:魔數(shù)已經(jīng)在很多技術(shù)中被采用了,相當(dāng)于標(biāo)識(shí)這個(gè)文件是哪種類(lèi)型的文件,例如class文件的'CAFEBABE';

Sections:這是真正記錄內(nèi)存中數(shù)據(jù)的部分,例如INode信息、cache信息、快照信息等等;

FileSummary:這部分相當(dāng)于sections的元數(shù)據(jù),描述著每個(gè)section的長(zhǎng)度以及起始位置;

FileSummaryLength:這部分描述FileSummary的長(zhǎng)度。

啟動(dòng)的時(shí)候NameNode重后往前,先看FileSummaryLength,然后讀取FileSummary,然后在根據(jù)各個(gè)section的元數(shù)據(jù)將Section加載到內(nèi)存中,MagicNumber對(duì)應(yīng)'HDFSIMG1'。

 

2) 關(guān)于檢查點(diǎn)

為了防止加載過(guò)大的editlog文件而導(dǎo)致的namenode啟動(dòng)太慢,向數(shù)據(jù)庫(kù)里面一樣,hdfs也有自己的檢查點(diǎn)機(jī)制(當(dāng)然沒(méi)了數(shù)據(jù)庫(kù)之中的回滾段什么的,所以還比較簡(jiǎn)單)。

在非HA的情況下,檢查點(diǎn)操作都是由SecondaryNamenode進(jìn)程操作的,然而在HA的情況下,都是由standbynamenode進(jìn)行檢查點(diǎn)操作,操作完成之后再傳遞給active namenode。

 

以上情況都是hadoop2.6.0中namenode的實(shí)現(xiàn),版本不同具體實(shí)現(xiàn)也會(huì)不一樣。相關(guān)截圖已經(jīng)打包上傳。

                                                                                             2017.2.19


網(wǎng)站標(biāo)題:NameNode對(duì)命名空間的管理
網(wǎng)站地址:http://weahome.cn/article/jjgcgd.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部