第三章h分布式文件系統(tǒng)new_第1頁
第三章h分布式文件系統(tǒng)new_第2頁
第三章h分布式文件系統(tǒng)new_第3頁
第三章h分布式文件系統(tǒng)new_第4頁
第三章h分布式文件系統(tǒng)new_第5頁
已閱讀5頁,還剩49頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第3章 Hadoop分布式文件系統(tǒng)目錄HDFS的概念12HDFS的體系結(jié)構(gòu)HDFS的可靠性34HDFS的常用操作5HDFS API編程3.1 HDFS的概念HDFS是Hadoop Distributed File System的縮寫,是Apache Hadoop項(xiàng)目的一個子項(xiàng)目,的GFS分布式文件系統(tǒng)開源實(shí)現(xiàn)。也是HDFS的主要特點(diǎn)是:“一次寫入,多次”。這個模型可以降低并發(fā)要。求,化簡數(shù)據(jù)集合,能支持高吞吐量的HDFS的概念結(jié)構(gòu)1. 數(shù)據(jù)塊(block)每個磁盤都有默認(rèn)的數(shù)據(jù)塊大小,這是磁盤進(jìn)行數(shù)據(jù)讀/寫的最小。HDFS默認(rèn)最基本的數(shù)據(jù)塊大小為64MB。在HDFS中,如果一個文件小于一個數(shù)據(jù)

2、塊的大小,該文件不占用整個數(shù)據(jù)塊空間。2.元數(shù)據(jù)節(jié)點(diǎn)(NameNode)和數(shù)據(jù)節(jié)點(diǎn)(DataNode)HDFS集群以管理者-工作者模式運(yùn)行,即一個NameNode和多個DataNode。NameNode管理文件系統(tǒng)名空間。它維護(hù)著文件系統(tǒng)樹及整棵樹內(nèi)所有的文件和目錄,這些信息會保存在命名空間鏡像文件和編輯日志文件中(位于Linux本地系統(tǒng)目錄中,如/dfs/name/current)。數(shù)據(jù)節(jié)點(diǎn)文件夾結(jié)構(gòu):VERSION文件是javaproperties文件,保存了HDFS的版本號。namespaceID是文件系統(tǒng)的唯一標(biāo)識符,是在文件系統(tǒng)初次格式化時生成的。對象創(chuàng)建的時間,在cTime表示Na

3、menode初始化時它的值為0。layoutVersion是一個負(fù)整數(shù),保存了HDFS的持續(xù)化在硬盤上的數(shù)據(jù)結(jié)構(gòu)的格式版本號。storageType表示此文件夾中保存的是元數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)。元數(shù)據(jù)(Metadata)元數(shù)據(jù)就是指數(shù)據(jù)的數(shù)據(jù)。 HDFS的元數(shù)據(jù)就是指維護(hù)HDFS文件系統(tǒng)中的文件和目錄所需要的信息。從形式上講,元數(shù)據(jù)可分為內(nèi)存元數(shù)據(jù)和元數(shù)據(jù)文件兩種。其中NameNode在內(nèi)存中維護(hù)整個文件系統(tǒng)的元數(shù)據(jù)鏡像,用于HDFS的管理;元數(shù)據(jù)文件則用于持久化。元數(shù)據(jù)(Metadata)從類型上講,元數(shù)據(jù)有三類重要信息: 文件和目錄自身的屬性信息,例如文件名、目錄名、父目錄信息、文件大小、創(chuàng)

4、建時間、修改時間等。文件內(nèi)容相關(guān)信息,例如文件分塊情況、副本個數(shù)、每個副本所在的DataNode信息等。HDFS中所有DataNode的信息,用于DataNode管理。NameNode也著每個文件中各個塊所在的數(shù)據(jù)節(jié)點(diǎn)信息。但是這些信息不在硬盤上,而是在系統(tǒng)啟動時從DataNode收集而成。DataNode是文件系統(tǒng)的工作節(jié)點(diǎn),也就是數(shù)據(jù)的地方??蛻舳嘶蛘逳ameNode真正向DataNode請求寫入或者數(shù)據(jù)塊。DataNode周期性地向NameNode數(shù)據(jù)塊的信息。其的3.從元數(shù)據(jù)節(jié)點(diǎn)(SecondaryNameNode)Secondary NameNode并不是NameNode出現(xiàn)問題時的

5、備用節(jié)點(diǎn),它負(fù)責(zé)周期性地將NameNode名空間鏡像文件和修改日志合并,以防日志文件過大。它會保存合并后的文件以防NameNode失效時進(jìn)行恢復(fù)。4. HDFS的設(shè)計前提與目標(biāo)(1)超大文件HDFS一個典型的文件可能是幾百M(fèi)B、幾百GB甚至幾百TB。目前已經(jīng)有PB級數(shù)據(jù)的Hadoop集群。因此,HDFS必須支持大文件。(2)流式數(shù)據(jù)HDFS的構(gòu)建思路:一次寫入、多次是最高效的模式。流式數(shù)據(jù)利于批量處理。的高吞吐量要求。因此設(shè)計目標(biāo)必須達(dá)到數(shù)據(jù)HDFS的設(shè)計前提與目標(biāo)硬件(3)Hadoop集群可以運(yùn)行在大量的普用計算機(jī)上,因此節(jié)點(diǎn)故障率高。檢測錯誤并快速自動恢復(fù)成為最的設(shè)計目標(biāo)。(4)不支持低時

6、間延遲的數(shù)據(jù)。HDFS的設(shè)計前提與目標(biāo)文件的數(shù)量受NameNode內(nèi)存影響。(5)(6)不支持多用戶寫入和任意修改文件。2015年5月21日四2 HDFS的體系結(jié)構(gòu)HDFS集群包含一個NameNode,它是服務(wù)器,管理文件系統(tǒng)名稱空間并規(guī);多個DataNode,數(shù)戶端對文件的點(diǎn)將數(shù)據(jù)以塊為進(jìn)行,一般一點(diǎn)上部署一個數(shù)據(jù)節(jié)點(diǎn)。主 范客據(jù)節(jié)個3.一個HDFS的體系結(jié)構(gòu)NameNode管理一些文件系統(tǒng)名稱空間操作,如打開、關(guān)閉以及重命名文件和目錄。到數(shù)據(jù)節(jié)點(diǎn)DataNode,它還將數(shù)據(jù)塊并處理來自客戶端的讀/寫請求。DataNode根據(jù)NameNode的指令創(chuàng)建、刪除和數(shù)據(jù)塊。HDFS的體系結(jié)構(gòu)HDF

7、S的體系結(jié)構(gòu)HDFS是使用Java語言構(gòu)建,任何支持Java編程的都能運(yùn)行HDFS。NameNode使用事務(wù)日志來HDFS元數(shù)據(jù)的變化,使用鏡像文件(FsImage)文件系統(tǒng)名空間,包含文件的、文件的屬性信息等。事務(wù)日志和鏡像文件都在NameNode的本地文件系統(tǒng)中。HDFS的體系結(jié)構(gòu)NameNode啟動時,從磁盤中文件和事務(wù)日志,把事務(wù)日志的事務(wù)鏡像用到內(nèi)存中的文件上,然后將新的元數(shù)據(jù)刷新到本地磁盤的新的映像文件中。HDFS還設(shè)有Secondary NameNode,用以輔助NameNode處理鏡像文件和事務(wù)日志。HDFS的體系結(jié)構(gòu)HDFS的通信協(xié)議都構(gòu)建于TCP/IP之上。NameNode

8、與DataNode之間的通信使用RPC(Remote Procedure Call)協(xié)議。NameNode不能直接連接到DataNode,它只是獲得從DataNode調(diào)用的函數(shù)返回值。每個DataNode都維護(hù)一個開放的服務(wù)器套接字,以便客戶端代碼或其他DataNode能夠讀/寫數(shù)據(jù)。3.3 HDFS的可靠性1.機(jī)柜意識大型HDFS集群跨多個安裝點(diǎn)(機(jī)柜)排列。一個機(jī)柜中的不同節(jié)點(diǎn)之間的網(wǎng)絡(luò)流量通常比跨機(jī)柜的網(wǎng)絡(luò)流量更高效。每個節(jié)點(diǎn)都知道它的機(jī)柜ID,NameNode通過DataNode的機(jī)柜ID來識別它們的位置。HDFS的可靠性2. 冗余備份每個文件成一系列的數(shù)據(jù)塊,每個來保證容錯。每個文件

9、數(shù)據(jù)塊都通過的數(shù)據(jù)塊的大?。J(rèn)為64MB)和因子(默認(rèn)為3)都是可以配置的。當(dāng)DataNode啟動時,它會遍歷本地文件系統(tǒng),產(chǎn)生一份HDFS數(shù)據(jù)塊和本地文件對應(yīng)關(guān)系的列表,給NameNode。并HDFS的可靠性3. 副本存放HDFS采用機(jī)架感知策略來改進(jìn)數(shù)據(jù)的可靠性。一般情況下,當(dāng)因子是3時,將一個副本放在本地機(jī)架節(jié)點(diǎn)上,一個副本放在同一機(jī)架的另一個節(jié)點(diǎn)上,最后一個副本放在不同機(jī)架的節(jié)點(diǎn)。HDFS的可靠性4. 心跳檢測每個DataNode都會向NameNode定期心跳消息。如果NameNode不能接收心跳,就表明連通性喪失,NameNode不再向它們請求。5. 安全模式HDFS啟動時,Nam

10、eNode會進(jìn)入安全模式,登記數(shù)據(jù)達(dá)到最小數(shù)目后該模式。若達(dá)不到,則該塊會被到其他數(shù)據(jù)節(jié)點(diǎn)。HDFS的可靠性6. 數(shù)據(jù)完整性檢測在HDFS文件創(chuàng)建時,會計算每個數(shù)據(jù)塊的檢驗(yàn)和,并將其作為一個單獨(dú)的隱藏文件保存在命名空間下。當(dāng)獲取文件后,會檢查各個DataNode取出的數(shù)據(jù)與相應(yīng)的校驗(yàn)和相匹配。如果不匹配則認(rèn)為該節(jié)點(diǎn)的數(shù)據(jù)塊有損壞同時選擇其他數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)。HDFS的可靠性7. 空間回收文件被用戶刪除時,并不是立即從HDFS中移走,而是先把它移動到/trash目錄里。該目錄保存的是被刪除文件的最后副本,用戶可以取消刪除操作。默認(rèn)是文件超過6小時后自動刪除。HDFS的可靠性8. 元數(shù)據(jù)磁盤失效映像

11、文件和事務(wù)日志是HDFS的數(shù)據(jù)結(jié)構(gòu),如果它們損壞,則會導(dǎo)致HDFS不可用。NameNode可以為映像文件和事務(wù)日志配置多個副本,對映像文件和事務(wù)日志的任何修改都可以同步到副本上。當(dāng)NameNode重新啟動時,總是選擇最新的一致的映像文件和事務(wù)日志。2015年5月21日四3.4 HDFS的常用操作(1)創(chuàng)建目錄$ hadoop fs -mkdir /user/chen(2)上傳文件$ hadoop fs -put README.txt.命令最后一個參數(shù)是句點(diǎn)(.),這意味著把本地文件放入到默認(rèn)的工作目錄,該命令等價于:$ hadoop fs -put README.txt/user/jcxyHD

12、FS的常用操作(3)列出HDFS上的文件$ hadoop fs -ls /user/chenHDFS中沒有當(dāng)前工作目錄的概念,若無文件 夾名,則返回HDFS的“home”目錄下的內(nèi)容。(4)查看文件$ hadoop fs -cat /user/chen/*查看/user/chen目錄下所有的文件內(nèi)容。HDFS的常用操作(5)將HDFS中的文件到本地$ hadoop fs -get /user/chen IN1將HDFS中/user/chen目錄下的文件到本地并重命名為IN1。(6)刪除文件$ hadoop fs -rmr /user/chen/out.txt(7)其他$ hadoop fs -

13、help commandNameHDFS的其他操作(1)chgrp$ hadoop fs -chgrp -R root /user/hadoop/input更改文件或目錄所屬的組,使用者必須是文件的所有者或超級用戶。(2)chmod$ hadoop fs -chmod -R 755 /user/chen/out.txt更改文件或目錄的權(quán)限,使用者必須是文件的所有者或超級用戶。HDFS的其他操作(3)chown$ hadoop fs -chown -R hadoop /user/hadoop/input更改文件或目錄的擁有者,使用者必須是超級用戶。(4)cp$ hadoop fs -cp /us

14、er/chen/out.txt /user/chen/out1.txt將文件從源路徑到目標(biāo)路徑。HDFS的其他操作(5)du$ hadoop fs -du/user/hadoop顯示目錄中所有文件的大小。當(dāng)只指定一個文件時,顯示此文件大小。(6)expunge$ hadoop fs -expunge清空回收站。HDFS的其他操作(7) mv$ hadoop fs -mv /user/chen/out.txt /user/chen/out1.txt將文件從源路徑移動到目標(biāo)路徑。(8) setrep$ hadoop fs setrep 3 -R /user/hadoop修改一個文件的副本系數(shù)。(9

15、) text$ hadoop fs -text /user/chen/out.txt將源文件輸出為文本格式。HDFS的其他操作(10)test$ hadoop fs -test -ezd /user/hadoop/out.txt-e:檢查文件是否存在,如果存在返回0.-z:檢查文件是否是0字節(jié),如果是返回0.-d:如果路徑是一個目錄,返回1,否則返回0.HDFS的管理與更新(1)report$ hadoop dfsadmin -report查看HDFS的基本統(tǒng)計信息。(2)safemode$ hadoop dfsadmin -safemode enter$ hadoop dfsadmin -s

16、afemeave進(jìn)入與安全模式。HDFS的管理與更新(3)負(fù)載均衡$ cd /hadoop/bin$ ./start-balancer.sh3.5 HDFS API編程 1. 配置Hadoop的開發(fā)環(huán)境 2. HDFS API簡介 3. HDFS文件操作編程示例2015年5月21日四1. 配置Hadoop的開發(fā)環(huán)境(1)eclipse和hadoop插件地址:此zip文件包含了源碼,我們使用編譯好的jar即可,解壓后,release文件夾中的hadoop.eclipse-kepler-plugin- 2.2.0.jar就是編譯好的插件。(2)把插件放到eclipse/plugins目錄下2015

17、年5月21日四(3)重啟eclipse,配置Hadoopinstallation directory。 打開WindowsPreferences后2015年5月21日四(4)配置Map/Reduce Locations 打開WindowsOpen PerspectiveOther 選擇Map/Reduce,點(diǎn)擊OK2015年5月21日四(5)點(diǎn)擊Map/Reduce Location選項(xiàng)卡,點(diǎn)擊右邊小象圖標(biāo),打開Hadoop Location配置窗口。2015年5月21日四(6) 安裝 安裝時,出現(xiàn):2015年5月21日四2015年5月21日四2. HDFS API簡介位于org.apache

18、.hadoop.fsBlockLocationFileContextFileStatus FileSystem FSDataInputStreaFSDataOutputStre mFsStatusPathRepresents the network location of a block, information about about the hosts that contain block replicas, and other block block metadata.The FileContext class provides an interface to the applicati

19、on application writer for using the Hadoop file system.Interface that represents the client side information for a file. for a file.An abstract base class for a fairly generic filesystem.Utility that wraps a FSInputStream in a DataInputStream and a DataInputStream and buffers input through aBuffered

20、InputStream.Utility that wraps a OutputStream in a DataOutputStream. a DataOutputStream.This class is used to represent the capacity, free and used used space on a FileSystem.Names a file or directory in a FileSystem.FileSystem的常用方法get(Configuration)checkPath(Path)getFileBlockLocations(FileStatus, l

21、ong, long)create(Path)exists(Path) isDirectory(Path) isFile(Path) getLength(Path) listStatus(Path) mkdirs(Path)getFileStatus(Path)append(Path)rename(Path, Path)delete(Path)hadoop/FileSystem.html2015年5月21日四3. HDFS文件操作編程示例(1) 上傳本地文件到HDFS(2)創(chuàng)建HDFS文件(3)重命名HDFS文件(4)刪除HDFS文件(5)查看HDFS文件是否存在(6)查看HDFS文件在集群的位

22、置2015年5月21日四(1) 上傳本地文件到HDFSimport org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;public class CopyFile public static void main(String args) throws Exception /見下頁2015年5月21日四上傳本地文件到HDFSConfiguration

23、conf =new Configuration();FileSystem hdfs= FileSystem.get(conf);Path src = new Path("c:xx.txt");Path dst = new Path("/");hdfs.copyFromLocalFile(src, dst);System.out.println("Upload to " +conf.get("");FileStatus files=hdfs.listStatus(dst);for(Fil

24、eStatus file:files)System.out.println(file.getPath();2015年5月21日四(2)創(chuàng)建HDFS文件import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;public class CreateFile public static void main(String args)

25、 throws Exception Configuration conf =new Configuration(); FileSystem hdfs= FileSystem.get(conf); byte buff = "hello word".getBytes();Path dfs = new Path("/test");FSDataOutputStream dos = hdfs.create(dfs);dos.write(buff,0,buff.length); dos.flush();dos.close();2015年5月21日四(3)重命名HDF

26、S文件public static void main(String args) throws Exception / TODO Auto-generated method stubConfiguration conf =new Configuration();FileSystem hdfs= FileSystem.get(conf);Path src = new Path("/xx.txt");Path dst = new Path("/.txt");boolean isRename = hdfs.rename(src, dst);2015年5月21日四(4)刪除HDFS文件public static void main(String args) throws ExceptionConfiguration conf =new Configuration();FileSystem hdfs= FileSystem.get(conf);Path dst = new Path("/.txt");boolean isDeleted =

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論