版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、一、文件的打開1.1、客戶端HDFS打開一個(gè)文件,需要在客戶端調(diào)用分布式文件系統(tǒng)。打開(路徑f,內(nèi)部緩沖區(qū)大小),其實(shí)現(xiàn)為:公共FSDataInputStream打開(路徑f,int bufferSize)引發(fā)io異常返回新的客戶.DFSDataInputStream(dfs.open(getPathName(f),bufferSize,verifyChecksum,statistics);其中深度優(yōu)先搜索為分布式文件系統(tǒng)的成員變量DFSClient,其打開函數(shù)被調(diào)用,其中創(chuàng)建一個(gè)DFSInputStream(src,buffersize,verifyChecksum)并返回。在DFSInpu
2、tStream的構(gòu)造函數(shù)中,openInfo函數(shù)被調(diào)用,其主要從名稱節(jié)點(diǎn)中得到要打開的文件所對(duì)應(yīng)的阻礙的信息,實(shí)現(xiàn)如下:同步的void openInfo()引發(fā)io異常LocatedBlockNewInfo=callGetBlockLocations(名稱節(jié)點(diǎn),src,0,預(yù)取大小);this.locatedBlocks=newInfothis.currentNode=null私有靜態(tài)定位塊調(diào)用GetBlockLocations(客戶端協(xié)議名稱節(jié)點(diǎn),字符串src,長開始,長長度)拋出異常返回namenode.getBlockLocations(src,開始,長度);定位塊主要包含一個(gè)鏈表的列表
3、塊,其中每個(gè)LocatedBlock包含如下信息:b區(qū):此街區(qū)的信息長偏移:此街區(qū)在文件中的偏移量數(shù)據(jù)節(jié)點(diǎn)信息loca:此街區(qū)位于哪些數(shù)據(jù)節(jié)點(diǎn)上上面namenode.getBlockLocations是一個(gè)RPC調(diào)用,最終調(diào)用名稱節(jié)點(diǎn)類的獲取塊位置函數(shù)。1.2、名稱節(jié)點(diǎn)NameNode.getBlockLocations實(shí)現(xiàn)如下:公共locatedblockgetblocklocations(字符串src,長偏移,長)拋出異常返回命名系統(tǒng)。GetBlockLocations(GetClientMachine(),src,偏移量,長度);命名系統(tǒng)是名稱節(jié)點(diǎn)一個(gè)成員變量,其類型為FSNamesys
4、tem,保存的是名稱節(jié)點(diǎn)的名稱空間樹,其中一個(gè)重要的成員變量為目錄目錄。FSDirectory和Lucene中的FSDirectory沒有任何關(guān)系,其主要包括FSImage fsImage,用于讀寫硬盤上的fsimage文件,F(xiàn)SImage類有成員變量編輯日志編輯日志,用于讀寫硬盤上的編輯文件,這兩個(gè)文件的關(guān)系在上一篇文章中已經(jīng)解釋過。FSDirectory還有一個(gè)重要的成員變量索引節(jié)點(diǎn)目錄帶配額根目錄,索引節(jié)點(diǎn)目錄帶配額的父類為索引節(jié)點(diǎn)目錄,實(shí)現(xiàn)如下:公共類索引節(jié)點(diǎn)目錄擴(kuò)展了INode 私人名單兒童;由此可見索引節(jié)點(diǎn)目錄本身是一個(gè)INode,其中包含一個(gè)鏈表的INode,此鏈表中,如果仍為文
5、件夾,則是類型索引節(jié)點(diǎn)目錄,如果是文件,則是類型索引節(jié)點(diǎn)文件,索引節(jié)點(diǎn)文件中有成員變量塊信息塊,是此文件包含的街區(qū)的信息。顯然這是一棵樹形的結(jié)構(gòu)。FSNamesystem.getBlockLocations函數(shù)如下:公共locatedblockgetblocklocations(字符串src,長偏移量,長長度,布爾doAccessTime)引發(fā)io異常final LocatedBlocks ret=GetBlockLocationSinternal(src,dir.getFileINode(src),偏移量,長度,整數(shù)。最大值,時(shí)間);返回浸水使柔軟dir.getFileINode(src)通
6、過路徑名從文件系統(tǒng)樹中找到信息節(jié)點(diǎn)文件,其中保存的是要打開的文件的INode的信息。getBlockLocationsInternal的實(shí)現(xiàn)如下:私有同步locatedblockgetblocklocationsinternal(字符串src,索引節(jié)點(diǎn)文件索引節(jié)點(diǎn),長偏移,長的長度,int nrBlocksToReturn,布爾doAccessTime)引發(fā)io異常/得到此文件的街區(qū)信息塊塊=inode。GetBlocks();列表結(jié)果=新數(shù)組列表(塊長度);/計(jì)算從抵消開始,長度為長度所涉及的阻礙int CurbiLk=0;long curPos=0,BLKSize=0;int nrBloc
7、ks=(塊0.getNumBytes()=0)?0 :塊,長度;for(Curblk=0;路緣石;路緣)blkSize=塊路緣石.getNumBytes();if (curPos blkSize偏移量)/當(dāng)?shù)窒赾urPos和curPos blkSize之間的時(shí)候,路緣指向抵消所在的街區(qū)休息;curPos=blkSize .長結(jié)束=偏移長度;/循環(huán),依次遍歷從路邊人行道開始的每個(gè)街區(qū),直到當(dāng)前位置curPos越過結(jié)束做int numNodes=blocksmap。numNodes(塊Curblk);int numCorruptNodes=countNodes(塊路緣).損壞副本();int N
8、umCorruptReplicans=CorruptReplicans。NumCorruptReplicans(塊抑制鏈接);布爾塊損壞=(numCorruptNodes=numNodes);int numMachineSet=塊損壞?編號(hào):(numNodes-numCorruptNodes);/依次找到此街區(qū)所對(duì)應(yīng)的datanode,將其中沒有損壞的放入機(jī)器設(shè)置中數(shù)據(jù)節(jié)點(diǎn)描述符機(jī)器集=新數(shù)據(jù)節(jié)點(diǎn)描述符Nummachineset;if (numMachineSet 0) numNodes=0;對(duì)于(迭代器它=blocksmap。節(jié)點(diǎn)迭代器(塊Curblk);它。HasNext();)數(shù)據(jù)節(jié)點(diǎn)描
9、述符dn=it。next();布爾復(fù)制損壞=損壞復(fù)制損壞。isReplicaCorrupt(阻止抑制鏈接,dn);if (blockCorrupt |(!封鎖腐??!復(fù)制腐敗)機(jī)器集NumNodes=dn;/使用此機(jī)器設(shè)置和當(dāng)前的街區(qū)構(gòu)造一個(gè)LocatedBlock結(jié)果。添加(新定位塊(塊路緣,機(jī)器設(shè)置,庫位,塊損壞);curPos=blockscurBlk.getNumBytes();路緣;同時(shí)(結(jié)束關(guān)閉)路緣長度結(jié)果。大小()NRblockStoreTurn);/使用此LocatedBlock鏈表構(gòu)造一個(gè)定位塊對(duì)象返回返回inode.createLocatedBlocks(結(jié)果);1.3、客
10、戶端通過RPC調(diào)用,在名稱節(jié)點(diǎn)得到的定位塊對(duì)象,作為成員變量構(gòu)造DFSInputStream對(duì)象,最后包裝為FSDataInputStream返回給用戶。二、文件的讀取2.1、客戶端文件讀取的時(shí)候,客戶端利用文件打開的時(shí)候得到的FSDataInputStream.read(長位置,字節(jié)緩沖區(qū),int偏移量,int長度)函數(shù)進(jìn)行文件讀操作。FSDataInputStream會(huì)調(diào)用其封裝的DFSInputStream的讀取(長位置,字節(jié)緩沖區(qū),int偏移量,int長度)函數(shù),實(shí)現(xiàn)如下:公共int讀?。ㄩL位置,字節(jié)緩沖區(qū),int偏移量,int長度)引發(fā)io異常long filelen=GetFile
11、Length();int realLen=長度;如果(位置長度)filelen) 實(shí)數(shù)=(整數(shù))(filelen -位置);/首先得到包含從抵消到偏移長度內(nèi)容的街區(qū)列表/比如對(duì)于64M一個(gè)街區(qū)的文件系統(tǒng)來說,欲讀取從100米開始,長度為128米的數(shù)據(jù),則街區(qū)列表包括第2,3,4塊街區(qū)列表塊范圍=getBlockRange(位置,實(shí)際值);int剩余=realLen/對(duì)每一個(gè)街區(qū),從中讀取內(nèi)容/對(duì)于上面的例子,對(duì)于第2塊街區(qū),讀取從36M開始,讀取長度28M,對(duì)于第3塊,讀取整一塊64M,對(duì)于第4塊,讀取從0開始,長度為36M,共128米數(shù)據(jù)用于(LocatedBlock blk : BlockRange)長目標(biāo)開始=位置-黑色。GetStartOffset();長字節(jié)讀取=數(shù)學(xué)分鐘(剩余,blk.getBlockSize() -目標(biāo)開始);fetchBlockByteRange(blk,targetStart,目標(biāo)開始字節(jié)讀取- 1,緩沖區(qū),偏移量);剩余-=字節(jié)讀取;位置=字節(jié)讀取
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030消費(fèi)電子微型步進(jìn)電機(jī)降噪技術(shù)專利布局與頭部企業(yè)戰(zhàn)略對(duì)標(biāo)
- 2025-2030消毒服務(wù)行業(yè)市場(chǎng)現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 2025-2030浙江省跨境電商市場(chǎng)供需發(fā)展態(tài)勢(shì)分析及投資擴(kuò)展布局評(píng)估報(bào)告
- 2025-2030洗衣機(jī)智能除菌功能標(biāo)準(zhǔn)制定及家電行業(yè)技術(shù)壁壘打破研析
- 2025-2030汽車零部件行業(yè)市場(chǎng)需求分析及投資前景規(guī)劃研究報(bào)告
- 2025年懷化市國企考試真題
- 超聲醫(yī)學(xué)技師實(shí)踐操作測(cè)試內(nèi)容試題及答案
- 法務(wù)訴訟代理實(shí)務(wù)測(cè)試試題及答案
- 2025年眼鏡驗(yàn)光師行業(yè)技能培訓(xùn)報(bào)名通知試卷及答案
- 2025年MPAcc會(huì)計(jì)專碩稅法高頻考點(diǎn)突破試卷及答案
- 交通運(yùn)輸企業(yè)人力資源管理中存在的問題及對(duì)策
- 蒂森電梯安全質(zhì)量培訓(xùn)
- 設(shè)備供貨進(jìn)度計(jì)劃及保證措施
- 純化水取樣課件
- 2025年四川單招護(hù)理試題及答案
- 鋼梁現(xiàn)場(chǎng)安裝施工質(zhì)量通病、原因分析及應(yīng)對(duì)措施
- 山東省青島市市南區(qū)2024-2025學(xué)年六年級(jí)上學(xué)期期末考試數(shù)學(xué)試卷
- 安全生產(chǎn)責(zé)任追究細(xì)則
- 兒童肱骨髁上骨折術(shù)
- 寄遞物流禁毒培訓(xùn)
- 長沙渣土車管理辦法
評(píng)論
0/150
提交評(píng)論