第3章分布式文件系統(tǒng)hdfs_第1頁
第3章分布式文件系統(tǒng)hdfs_第2頁
第3章分布式文件系統(tǒng)hdfs_第3頁
第3章分布式文件系統(tǒng)hdfs_第4頁
第3章分布式文件系統(tǒng)hdfs_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章分布式文件系統(tǒng)HDFS3.1分布式文件系統(tǒng)3.2HDFS簡介3.3HDFS相關(guān)概念3.4HDFS體系結(jié)構(gòu)3.5HDFS存儲原理3.6HDFS讀寫流程3.7HDFS操作方式實驗:HDFS操作3.1 分布式文件系統(tǒng)3.1.1 計算機集群結(jié)構(gòu)3.1.2 分布式文件系統(tǒng)的結(jié)構(gòu)3.1.1 計算機集群結(jié)構(gòu)分布式文件系統(tǒng)把文件分布存儲到多個計算機節(jié)點上,成千上萬的計算機節(jié)點構(gòu)成計算機集群與之前使用多個處理器和專用高級硬件的并行化處理裝置不同的是,目前的分布式文件系統(tǒng)所采用的計算機集群,都是由普通硬件構(gòu)成的,這就大大降低了硬件上的開銷圖3-1計算機集群的基本架構(gòu)3.1.2分布式文件系統(tǒng)的結(jié)構(gòu)分布式文件系統(tǒng)在物理結(jié)構(gòu)上是由計算機集群中的多個節(jié)點構(gòu)成的,這些節(jié)點分為兩類,一類叫“主節(jié)點”(MasterNode)或者也被稱為“名稱結(jié)點”(NameNode),另一類叫“從節(jié)點”(SlaveNode)或者也被稱為“數(shù)據(jù)節(jié)點”(DataNode)圖3-2大規(guī)模文件系統(tǒng)的整體結(jié)構(gòu)Hadoop

Distributed

File

System源自于Google的GFS論文(發(fā)表于2003年10月),是GFS的克隆版3.2HDFS簡介特點構(gòu)建在廉價的機器上數(shù)據(jù)冗余,硬件容錯適合存儲大文件,一次寫入,多次讀取,順序讀寫,不適合多用戶并發(fā)寫相同的文件。適合批量讀寫,吞吐量高,不適合交互式應用及低延遲的數(shù)據(jù)訪問。設(shè)計思想將一個文件拆分成多個Block每個Block以多副本的方式存儲在各個節(jié)點上保存元數(shù)據(jù)映射關(guān)系負載均衡分布式并行計算3.3 相關(guān)概念3.3.1塊3.3.2名稱節(jié)點和數(shù)據(jù)節(jié)點3.3.1 塊HDFS默認一個塊64MB(不同版本不同,有的是128M),一個文件被分成多個塊,以塊作為存儲單位。塊的大小遠遠大于普通文件系統(tǒng),可以最小化尋址開銷HDFS采用抽象的塊概念可以帶來以下幾個明顯的好處:●支持大規(guī)模文件存儲:文件以塊為單位進行存儲,一個大規(guī)模文件可以被分拆成若干個文件塊,不同的文件塊可以被分發(fā)到不同的節(jié)點上,因此,一個文件的大小不會受到單個節(jié)點的存儲容量的限制,可以遠遠大于網(wǎng)絡(luò)中任意節(jié)點的存儲容量●簡化系統(tǒng)設(shè)計:首先,大大簡化了存儲管理,因為文件塊大小是固定的,這樣就可以很容易計算出一個節(jié)點可以存儲多少文件塊;其次,方便了元數(shù)據(jù)的管理,元數(shù)據(jù)不需要和文件塊一起存儲,可以由其他系統(tǒng)負責管理元數(shù)據(jù)●適合數(shù)據(jù)備份:每個文件塊都可以冗余存儲到多個節(jié)點上,大大提高了系統(tǒng)的容錯性和可用性3.3.2 名稱節(jié)點和數(shù)據(jù)節(jié)點元數(shù)據(jù):元數(shù)據(jù)不是具體的文件內(nèi)容,有三類重要信息文件和目錄自身的信息,如文件名、父目錄信息、文件大小、創(chuàng)建時間、修改時間等記錄文件內(nèi)容存儲的相關(guān)信息,例如文件分塊情況、副本個數(shù)、每個副本所在DataNode信息等記錄HDFS中所有DataNode的信息,用于DataNode管理NameNode:用于存儲元數(shù)據(jù)以及處理客戶端發(fā)送的請求fsimage元數(shù)據(jù)鏡像文件,存儲某一時段NameNode內(nèi)存元數(shù)據(jù)信息edits操作日志文件VERSION存放版本信息的文件,保存了HDFS的版本號當NameNode啟動的時候,fsimage會被加載到內(nèi)存,然后對內(nèi)存里的數(shù)據(jù)執(zhí)行edits所記錄的操作,以確保內(nèi)存所保留的數(shù)據(jù)處于最新的狀態(tài)SecondaryNameNode用于備份NameNode的數(shù)據(jù),周期性將edits文件合并到fsimage文件并在本地備份,將新的fsimage文件存儲到NameNode,取代原來的fsimage,刪除edits,創(chuàng)建一個新的edits繼續(xù)存儲文件修改狀態(tài)DataNode是真正存儲數(shù)據(jù)的地方文件以數(shù)據(jù)塊的形式存儲3.4 HDFS體系結(jié)構(gòu)3.4.1 HDFS體系結(jié)構(gòu)概述3.4.2 HDFS命名空間管理3.4.3 通信協(xié)議3.4.4 客戶端3.4.5 HDFS體系結(jié)構(gòu)的局限性3.4.1 HDFS體系結(jié)構(gòu)概述HDFS采用了主從(Master/Slave)結(jié)構(gòu)模型,一個HDFS集群包括一個名稱節(jié)點(NameNode)和若干個數(shù)據(jù)節(jié)點(DataNode)(如圖3-4所示)。名稱節(jié)點作為中心服務(wù)器,負責管理文件系統(tǒng)的命名空間及客戶端對文件的訪問。集群中的數(shù)據(jù)節(jié)點一般是一個節(jié)點運行一個數(shù)據(jù)節(jié)點進程,負責處理文件系統(tǒng)客戶端的讀/寫請求,在名稱節(jié)點的統(tǒng)一調(diào)度下進行數(shù)據(jù)塊的創(chuàng)建、刪除和復制等操作。每個數(shù)據(jù)節(jié)點的數(shù)據(jù)實際上是保存在本地Linux文件系統(tǒng)中的圖3-4HDFS體系結(jié)構(gòu)3.4.2 HDFS命名空間管理HDFS的命名空間包含目錄、文件和塊在HDFS1.0體系結(jié)構(gòu)中,在整個HDFS集群中只有一個命名空間,并且只有唯一一個名稱節(jié)點,該節(jié)點負責對這個命名空間進行管理HDFS使用的是傳統(tǒng)的分級文件體系,因此,用戶可以像使用普通文件系統(tǒng)一樣,創(chuàng)建、刪除目錄和文件,在目錄間轉(zhuǎn)移文件,重命名文件等3.4.3 通信協(xié)議HDFS是一個部署在集群上的分布式文件系統(tǒng),因此,很多數(shù)據(jù)需要通過網(wǎng)絡(luò)進行傳輸所有的HDFS通信協(xié)議都是構(gòu)建在TCP/IP協(xié)議基礎(chǔ)之上的客戶端通過一個可配置的端口向名稱節(jié)點主動發(fā)起TCP連接,并使用客戶端協(xié)議與名稱節(jié)點進行交互名稱節(jié)點和數(shù)據(jù)節(jié)點之間則使用數(shù)據(jù)節(jié)點協(xié)議進行交互客戶端與數(shù)據(jù)節(jié)點的交互是通過RPC(RemoteProcedureCall)來實現(xiàn)的。在設(shè)計上,名稱節(jié)點不會主動發(fā)起RPC,而是響應來自客戶端和數(shù)據(jù)節(jié)點的RPC請求3.4.4 客戶端客戶端是用戶操作HDFS最常用的方式,HDFS在部署時都提供了客戶端HDFS客戶端是一個庫,暴露了HDFS文件系統(tǒng)接口,這些接口隱藏了HDFS實現(xiàn)中的大部分復雜性嚴格來說,客戶端并不算是HDFS的一部分客戶端可以支持打開、讀取、寫入等常見的操作,并且提供了類似Shell的命令行方式來訪問HDFS中的數(shù)據(jù)此外,HDFS也提供了JavaAPI,作為應用程序訪問文件系統(tǒng)的客戶端編程接口3.4.5 HDFS體系結(jié)構(gòu)的局限性HDFS只設(shè)置唯一一個名稱節(jié)點,這樣做雖然大大簡化了系統(tǒng)設(shè)計,但也帶來了一些明顯的局限性,具體如下:(1)命名空間的限制:名稱節(jié)點是保存在內(nèi)存中的,因此,名稱節(jié)點能夠容納的對象(文件、塊)的個數(shù)會受到內(nèi)存空間大小的限制。(2)性能的瓶頸:整個分布式文件系統(tǒng)的吞吐量,受限于單個名稱節(jié)點的吞吐量。(3)隔離問題:由于集群中只有一個名稱節(jié)點,只有一個命名空間,因此,無法對不同應用程序進行隔離。(4)集群的可用性:一旦這個唯一的名稱節(jié)點發(fā)生故障,會導致整個集群變得不可用。3.5 HDFS存儲原理3.5.1 冗余數(shù)據(jù)保存3.5.2 數(shù)據(jù)錯誤與恢復3.5.1 冗余數(shù)據(jù)保存

作為一個分布式文件系統(tǒng),為了保證系統(tǒng)的容錯性和可用性,HDFS采用了多副本方式對數(shù)據(jù)進行冗余存儲,通常一個數(shù)據(jù)塊的多個副本會被分布到不同的數(shù)據(jù)節(jié)點上,如圖3-5所示,數(shù)據(jù)塊1被分別存放到數(shù)據(jù)節(jié)點A和C上,數(shù)據(jù)塊2被存放在數(shù)據(jù)節(jié)點A和B上。這種多副本方式具有以下幾個優(yōu)點:(1)加快數(shù)據(jù)傳輸速度(2)容易檢查數(shù)據(jù)錯誤(3)保證數(shù)據(jù)可靠性圖3-5HDFS數(shù)據(jù)塊多副本存儲數(shù)據(jù)存放策略Block的副本放置策略第一個副本:放置在上傳文件的數(shù)據(jù)節(jié)點;如果是集群外提交,則隨機挑選一臺磁盤不太滿、CPU不太忙的節(jié)點第二個副本:放置在與第一個副本不同的機架的節(jié)點上第三個副本:與第一個副本相同機架的其他節(jié)點上更多副本:隨機節(jié)點3.5.2 數(shù)據(jù)錯誤與恢復HDFS具有較高的容錯性,可以兼容廉價的硬件,它把硬件出錯看作一種常態(tài),而不是異常,并設(shè)計了相應的機制檢測數(shù)據(jù)錯誤和進行自動恢復,主要包括以下幾種情形:名稱節(jié)點出錯、數(shù)據(jù)節(jié)點出錯和數(shù)據(jù)出錯。1.名稱節(jié)點出錯名稱節(jié)點保存了所有的元數(shù)據(jù)信息,其中,最核心的兩大數(shù)據(jù)結(jié)構(gòu)是FsImage和Editlog,如果這兩個文件發(fā)生損壞,那么整個HDFS實例將失效。因此,HDFS設(shè)置了備份機制,把這些核心文件同步復制到備份服務(wù)器SecondaryNameNode上。當名稱節(jié)點出錯時,就可以根據(jù)備份服務(wù)器SecondaryNameNode中的FsImage和Editlog數(shù)據(jù)進行恢復。2.數(shù)據(jù)節(jié)點出錯每個數(shù)據(jù)節(jié)點會定期向名稱節(jié)點發(fā)送“心跳”信息,向名稱節(jié)點報告自己的狀態(tài)當數(shù)據(jù)節(jié)點發(fā)生故障,或者網(wǎng)絡(luò)發(fā)生斷網(wǎng)時,名稱節(jié)點就無法收到來自一些數(shù)據(jù)節(jié)點的心跳信息,這時,這些數(shù)據(jù)節(jié)點就會被標記為“宕機”,節(jié)點上面的所有數(shù)據(jù)都會被標記為“不可讀”,名稱節(jié)點不會再給它們發(fā)送任何I/O請求這時,有可能出現(xiàn)一種情形,即由于一些數(shù)據(jù)節(jié)點的不可用,會導致一些數(shù)據(jù)塊的副本數(shù)量小于冗余因子名稱節(jié)點會定期檢查這種情況,一旦發(fā)現(xiàn)某個數(shù)據(jù)塊的副本數(shù)量小于冗余因子,就會啟動數(shù)據(jù)冗余復制,為它生成新的副本HDFS和其它分布式文件系統(tǒng)的最大區(qū)別就是可以調(diào)整冗余數(shù)據(jù)的位置3.數(shù)據(jù)出錯網(wǎng)絡(luò)傳輸和磁盤錯誤等因素,都會造成數(shù)據(jù)錯誤客戶端在讀取到數(shù)據(jù)后,會采用md5和sha1對數(shù)據(jù)塊進行校驗,以確定讀取到正確的數(shù)據(jù)在文件被創(chuàng)建時,客戶端就會對每一個文件塊進行信息摘錄,并把這些信息寫入到同一個路徑的隱藏文件里面當客戶端讀取文件的時候,會先讀取該信息文件,然后,利用該信息文件對每個讀取的數(shù)據(jù)塊進行校驗,如果校驗出錯,客戶端就會請求到另外一個數(shù)據(jù)節(jié)點讀取該文件塊,并且向名稱節(jié)點報告這個文件塊有錯誤,名稱節(jié)點會定期檢查并且重新復制這個塊3.6 HDFS數(shù)據(jù)讀寫過程3.7 HDFS操作方式3.7.1Shell方式3.7.2API方式HDFSShell操作HDFSJavaAPI操作HadoopFileSystemAPI主要類org.apache.hadoop.fs.FileSystemorg.apache.hadoop.conf.Configurationorg.apache.hadoop.fs.FSDataInputStreamorg.apache.hadoop.fs.FSDataOutputStreamorg.apache.hadoop.fs.Pathorg.apache.hadoop.fs.FileStatus使用FileSystemAPI編程步驟獲取Configuration對象獲取文件系統(tǒng)的實例FileSystem對象使用FileSystem對象操作文件第一步:獲取Configuration對象,該對象用來管理配置文件,設(shè)置參數(shù)Configurationconf=newConfiguration(); //實例化Configurationconf.addResource(“hdfs-site.xml”); //手動加載參數(shù)文件hdfs-site.xmlconf.addResource(“mapred-site.xml”); //手動加載參數(shù)文件mapred-site.xmlconf.set(“mapreduces.job.reduces”,”1”); //直接指定某個屬性默認配置文件core-default.xml(自動加載)hdfs-default.xmlmapred-default.xml自定義配置文件core-site.xml(自動加載)hdfs-site.xmlmapred-site.xmlHDFS

JavaAPI操作第二步:得到文件系統(tǒng)的實例FileSystem對象HDFS

JavaAPI操作publicstaticFileSystemget(Configurationconf)publicstaticFileSystemget(URIuri,Configurationconf)方法說明staticFileSystemget(Configurationconf)獲得FileSystem實例FSDataOutputStreamopen(Pathf)打開文件獲得輸入流FSDataOutputStreamcreate(Pathf)創(chuàng)建文件且自動創(chuàng)建目錄voidcopyFromLocalFile(PathsrcPath,PathdstPath)將文件從本地系統(tǒng)復制到HDFSbooleandelete(Pathf,booleanrecursive)刪除文件booleanrename(PathfromPath,PathtoPath)重命名文件FileStatusgetFileStatus(Pathf)獲得文件的FileStatus實例booleanexists(Pathf)查詢文件是否存在第三步:使用FileSystem對象操作文件HDFS

JavaAPI操作Configurationconf=newConfiguration();conf.set("fs.defaultFS","hdfs://localhost:9000");//獲取一個hdfs的訪問客戶端,根據(jù)參數(shù),這個實例應該是DistributedFileSystem的實例FileSystemfs=FileSystem.get(conf);//要創(chuàng)建的寫入的文件Pathpath=newPath("/data/a.txt");//獲取數(shù)據(jù)流FSDataOutputStreamoutput=

溫馨提示

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

評論

0/150

提交評論