HDFS技術(shù)原理深入理解_第1頁
HDFS技術(shù)原理深入理解_第2頁
HDFS技術(shù)原理深入理解_第3頁
HDFS技術(shù)原理深入理解_第4頁
HDFS技術(shù)原理深入理解_第5頁
已閱讀5頁,還剩17頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、HDFS技術(shù)原理深入理解技術(shù)創(chuàng)新,變革未來智慧IT課程目錄hdfs 概述hdfs 體系結(jié)構(gòu)hdfs java調(diào)用RPC和HDFS調(diào)用hdfs文件讀寫流程分析數(shù)據(jù)回收站HA和FederationHDFS常見問題HDFS概述數(shù)據(jù)量越來越多,在一個操作系統(tǒng)管轄的范圍存不下了,那么就分配到更多的操作系統(tǒng)管理的磁盤中,但是不方便管理和維護,因此迫切需要一種系統(tǒng)來管理多臺機器上的文件,這就是分布式文件管理系統(tǒng) 。是一種允許文件通過網(wǎng)絡(luò)在多臺主機上分享的文件系統(tǒng),可讓多機器上的多用戶分享文件和存儲空間。通透性。讓實際上是通過網(wǎng)絡(luò)來訪問文件的動作,由程序與用戶看來,就像是訪問本地的磁盤一般。容錯。即使系統(tǒng)中有

2、某些節(jié)點宕機,整體來說系統(tǒng)仍然可以持續(xù)運作而不會有數(shù)據(jù)損失【通過副本機制實現(xiàn)】。分布式文件管理系統(tǒng)很多,hdfs只是其中一種,不合適小文件。hdfs架構(gòu)NameNodeNameNode是整個文件系統(tǒng)的管理節(jié)點。它維護著整個文件系統(tǒng)的文件目錄樹,文件/目錄的元信息和每個文件對應(yīng)的數(shù)據(jù)塊列表。接收用戶的操作請求。文件包括:fsimage:元數(shù)據(jù)鏡像文件。存儲某一時段NameNode內(nèi)存元數(shù)據(jù)信息。edits:操作日志文件,namenode啟動后一些新增元信息日志。fstime:保存最近一次checkpoint的時間以上這些文件是保存在linux的文件系統(tǒng)中。hdfs-site.xml的dfs.na

3、.dir屬性DataNode提供真實文件數(shù)據(jù)的存儲服務(wù)。文件塊(block):最基本的存儲單位。對于文件內(nèi)容而言,一個文件的長度大小是size,那么從文件的偏移開始,按照固定的大小,順序?qū)ξ募M行劃分并編號,劃分好的每一個塊稱一個Block。2.0以后HDFS默認Block大小是128MB,以一個256MB文件,共有256/128=2個Block.hdfs-site.xml中dfs.blocksize屬性不同于普通文件系統(tǒng)的是,HDFS中,如果一個文件小于一個數(shù)據(jù)塊的大小,并不占用整個數(shù)據(jù)塊存儲空間Replication。多復(fù)本。默認是三個。hdfs-site.xml的d

4、fs.replication屬性通過ui頁面觀察文件被block劃分Client讀取多副本文件過程 HDFS 的Trash回收站和Linux系統(tǒng)(桌面環(huán)境)的回收站設(shè)計一樣,HDFS會為每一個用戶創(chuàng)建一個回收站目錄:/user/用戶名/.Trash/,每一個被用戶通過Shell刪除的文件/目錄,erval是在指在這個回收周期之內(nèi),文件實際上是被移動到trash的這個目錄下面,而不是馬上把數(shù)據(jù)刪除掉。等到回收周期真正到了以后,hdfs才會將數(shù)據(jù)真正刪除。默認的單位是分鐘,1440分鐘=60*24,剛好是一天。 配置:在每個節(jié)點(不僅僅是主節(jié)點)上添加配置 core-sit

5、e.xml,增加如下內(nèi)容 erval 1440注意:如果刪除的文件過大,超過回收站大小的話會提示刪除失敗需要指定參數(shù) -skipTrash FileSystermfileSysterm是使用java代碼操作hdfs的api接口文件操作create 寫文件open 讀取文件delete 刪除文件目錄操作mkdirs 創(chuàng)建目錄delete 刪除文件或目錄listStatus 列出目錄的內(nèi)容getFileStatus 顯示文件系統(tǒng)的目錄和文件的元數(shù)據(jù)信息getFileBlockLocations 顯示文件存儲位置數(shù)據(jù)存儲-讀文件讀文件流程分析1.首先調(diào)用FileSystem對

6、象的open方法,其實是一個DistributedFileSystem的實例2.DistributedFileSystem通過rpc獲得文件的第一個block的locations,同一block按照副本數(shù)會返回多個locations,這些locations按照hadoop拓撲結(jié)構(gòu)排序,距離客戶端近的排在前面.3.前兩步會返回一個FSDataInputStream對象,該對象會被封裝成DFSInputStream對象,DFSInputStream可以方便的管理datanode和namenode數(shù)據(jù)流。客戶端調(diào)用read方法,DFSInputStream最會找出離客戶端最近的datanode并連接

7、。4.數(shù)據(jù)從datanode源源不斷的流向客戶端。5.如果第一塊的數(shù)據(jù)讀完了,就會關(guān)閉指向第一塊的datanode連接,接著讀取下一塊。這些操作對客戶端來說是透明的,客戶端的角度看來只是讀一個持續(xù)不斷的流。6.如果第一批block都讀完了,DFSInputStream就會去namenode拿下一批blocks的location,然后繼續(xù)讀,如果所有的塊都讀完,這時就會關(guān)閉掉所有的流。如果在讀數(shù)據(jù)的時候,DFSInputStream和datanode的通訊發(fā)生異常,就會嘗試正在讀的block的排第二近的datanode,并且會記錄哪個datanode發(fā)生錯誤,剩余的blocks讀的時候就會直接跳

8、過該datanode。DFSInputStream也會檢查block數(shù)據(jù)校驗和,如果發(fā)現(xiàn)一個壞的block,就會先報告到namenode節(jié)點,然后DFSInputStream在其他的datanode上讀該block的鏡像該設(shè)計的方向就是客戶端直接連接datanode來檢索數(shù)據(jù)并且namenode來負責(zé)為每一個block提供最優(yōu)的datanode,namenode僅僅處理block location的請求,這些信息都加載在namenode的內(nèi)存中,hdfs通過datanode集群可以承受大量客戶端的并發(fā)訪問。數(shù)據(jù)存儲:寫文件寫文件流程分析1.客戶端通過調(diào)用DistributedFileSyste

9、m的create方法創(chuàng)建新文件2.DistributedFileSystem通過RPC調(diào)用namenode去創(chuàng)建一個沒有blocks關(guān)聯(lián)的新文件,創(chuàng)建前,namenode會做各種校驗,比如文件是否存在,客戶端有無權(quán)限去創(chuàng)建等。如果校驗通過,namenode就會記錄下新文件,否則就會拋出IO異常.3.前兩步結(jié)束后會返回FSDataOutputStream的對象,象讀文件的時候相似,F(xiàn)SDataOutputStream被封裝成DFSOutputStream.DFSOutputStream可以協(xié)調(diào)namenode和datanode??蛻舳碎_始寫數(shù)據(jù)到DFSOutputStream,DFSOutput

10、Stream會把數(shù)據(jù)切成一個個小packet,然后排成隊列data quene。4.DataStreamer會去處理接受data queue,他先問詢namenode這個新的block最適合存儲的在哪幾個datanode里,比如副本數(shù)是3,那么就找到3個最適合的datanode,把他們排成一個pipeline.DataStreamer把packet按隊列輸出到管道的第一個datanode中,第一個datanode又把packet輸出到第二個datanode中,以此類推。5.DFSOutputStream還有一個對列叫ack queue,也是有packet組成,等待datanode的收到響應(yīng),當(dāng)

11、pipeline中的所有datanode都表示已經(jīng)收到的時候,這時akc queue才會把對應(yīng)的packet包移除掉。如果在寫的過程中某個datanode發(fā)生錯誤,會采取以下幾步:1) pipeline被關(guān)閉掉;2)為了防止丟包ack queue里的packet會同步到data queue里;3)把產(chǎn)生錯誤的datanode上當(dāng)前在寫但未完成的block刪掉;4)block剩下的部分被寫到剩下的兩個正常的datanode中;5)namenode找到另外的datanode去創(chuàng)建這個塊的復(fù)制。當(dāng)然,這些操作對客戶端來說是無感知的。6.客戶端完成寫數(shù)據(jù)后調(diào)用close方法關(guān)閉寫入流7.DataStr

12、eamer把剩余得包都刷到pipeline里然后等待ack信息,收到最后一個ack后,通知datanode把文件標(biāo)示為已完成。hdfs2的HAzk:指zookeeper,負責(zé)協(xié)調(diào),監(jiān)控HA的failover原理HDFS的HA,指的是在一個集群中存在兩個NameNode,分別運行在獨立的物理節(jié)點上。在任何時間點,只有一個NameNodes是處于Active狀態(tài),另一種是在Standby狀態(tài)。 Active NameNode負責(zé)所有的客戶端的操作,而Standby NameNode用來同步Active NameNode的狀態(tài)信息,以提供快速的故障恢復(fù)能力。為了保證Active NN與Standby

13、 NN節(jié)點狀態(tài)同步,即元數(shù)據(jù)保持一致。除了DataNode需要向兩個NN發(fā)送block位置信息外,還構(gòu)建了一組獨立的守護進程”JournalNodes”,用來同步Edits信息。當(dāng)Active NN執(zhí)行任何有關(guān)命名空間的修改,它需要持久化到一半以上的JournalNodes上。而Standby NN負責(zé)觀察JNs的變化,讀取從Active NN發(fā)送過來的Edits信息,并更新自己內(nèi)部的命名空間。一旦ActiveNN遇到錯誤,Standby NN需要保證從JNs中讀出了全部的Edits,然后切換成Active狀態(tài)。使用HA的時候,不能啟動SecondaryNameNode,會出錯。HDFS2的federationHDFS Federation設(shè)計可解決單一命名空間存在的以下幾個問題:(1)HDFS集群擴展性。多個NameNode分管一部分目錄,使得一個集群可以擴展到更多節(jié)點,不再像1.0中那樣由于內(nèi)存的限制制約文件存儲數(shù)目。(2)性能更高效。多個NameNode管理不同的數(shù)據(jù),且同時對外提供服務(wù),將為用戶提供更高的讀寫吞吐率。(3)良好的隔離性。用戶可根據(jù)需要將不同業(yè)務(wù)數(shù)據(jù)交由不同N

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論