![第10章 分布式文件系統(tǒng)HDFS_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-12/1/e9b56c47-abae-4fbb-857d-af8ab3021d11/e9b56c47-abae-4fbb-857d-af8ab3021d111.gif)
![第10章 分布式文件系統(tǒng)HDFS_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-12/1/e9b56c47-abae-4fbb-857d-af8ab3021d11/e9b56c47-abae-4fbb-857d-af8ab3021d112.gif)
![第10章 分布式文件系統(tǒng)HDFS_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-12/1/e9b56c47-abae-4fbb-857d-af8ab3021d11/e9b56c47-abae-4fbb-857d-af8ab3021d113.gif)
![第10章 分布式文件系統(tǒng)HDFS_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-12/1/e9b56c47-abae-4fbb-857d-af8ab3021d11/e9b56c47-abae-4fbb-857d-af8ab3021d114.gif)
![第10章 分布式文件系統(tǒng)HDFS_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-12/1/e9b56c47-abae-4fbb-857d-af8ab3021d11/e9b56c47-abae-4fbb-857d-af8ab3021d115.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第第10章章 分布式文件系統(tǒng)分布式文件系統(tǒng)HDFS云計算與大規(guī)模數(shù)據(jù)處理云計算與大規(guī)模數(shù)據(jù)處理提綱10.1 分布式文件系統(tǒng)分布式文件系統(tǒng)10.2 HDFS簡介簡介10.3 HDFS相關(guān)概念相關(guān)概念10.4 HDFS體系結(jié)構(gòu)體系結(jié)構(gòu)10.5 HDFS存儲原理存儲原理10.6 HDFS數(shù)據(jù)讀寫過程數(shù)據(jù)讀寫過程10.7 HDFS編程實踐編程實踐10.1分布式文件系統(tǒng) 10.1.1計算機集群結(jié)構(gòu)計算機集群結(jié)構(gòu) 10.1.2分布式文件系統(tǒng)的結(jié)構(gòu)分布式文件系統(tǒng)的結(jié)構(gòu)10.1.1計算機集群結(jié)構(gòu)分布式文件系統(tǒng)把文件分布存儲到多個計算機節(jié)點上,成千上萬的計算機節(jié)點構(gòu)成計算機集群。與之前使用多個處理器和專用高級硬
2、件的并行化處理裝置不同的是,目前的分布式文件系統(tǒng)所采用的計算機集群,都是由普通硬件構(gòu)成的,這就大大降低了硬件上的開銷。圖10-1 計算機集群的基本架構(gòu) 10.1.2分布式文件系統(tǒng)的結(jié)構(gòu)分布式文件系統(tǒng)在物理結(jié)構(gòu)上是由計算機集群中的多個節(jié)點構(gòu)成的,這些節(jié)點分為兩類,一類叫“主節(jié)點”(Master Node)或者也被稱為“名稱結(jié)點”(NameNode),另一類叫“從節(jié)點”(Slave Node)或者也被稱為“數(shù)據(jù)節(jié)點”(DataNode)圖10-2 大規(guī)模文件系統(tǒng)的整體結(jié)構(gòu)10.2 HDFS簡介簡介總體而言,HDFS要實現(xiàn)以下目標(biāo):兼容廉價的硬件設(shè)備兼容廉價的硬件設(shè)備流數(shù)據(jù)讀寫流數(shù)據(jù)讀寫大數(shù)據(jù)集大數(shù)
3、據(jù)集簡單的文件模型簡單的文件模型強大的跨平臺兼容性強大的跨平臺兼容性HDFS特殊的設(shè)計,在實現(xiàn)上述優(yōu)良特性的同時,也使得自身具有一些應(yīng)用局限性,主要包括以下幾個方面:不適合低延遲數(shù)據(jù)訪問不適合低延遲數(shù)據(jù)訪問無法高效存儲大量小文件無法高效存儲大量小文件不支持多用戶寫入及任意修改文件不支持多用戶寫入及任意修改文件10.3.1塊塊HDFS默認(rèn)一個塊64MB,一個文件被分成多個塊,以塊作為存儲單位塊的大小遠(yuǎn)遠(yuǎn)大于普通文件系統(tǒng),可以最小化尋址開銷HDFS采用抽象的塊概念可以帶來以下幾個明顯的好處: 支持大規(guī)模文件存儲支持大規(guī)模文件存儲:文件以塊為單位進(jìn)行存儲,一個大規(guī)模文件可以被分拆成若干個文件塊,不同
4、的文件塊可以被分發(fā)到不同的節(jié)點上,因此,一個文件的大小不會受到單個節(jié)點的存儲容量的限制,可以遠(yuǎn)遠(yuǎn)大于網(wǎng)絡(luò)中任意節(jié)點的存儲容量 簡化系統(tǒng)設(shè)計簡化系統(tǒng)設(shè)計:首先,大大簡化了存儲管理,因為文件塊大小是固定的,這樣就可以很容易計算出一個節(jié)點可以存儲多少文件塊;其次,方便了元數(shù)據(jù)的管理,元數(shù)據(jù)不需要和文件塊一起存儲,可以由其他系統(tǒng)負(fù)責(zé)管理元數(shù)據(jù) 適合數(shù)據(jù)備份適合數(shù)據(jù)備份:每個文件塊都可以冗余存儲到多個節(jié)點上,大大提高了系統(tǒng)的容錯性和可用性10.3.2名稱節(jié)點和數(shù)據(jù)節(jié)點名稱節(jié)點和數(shù)據(jù)節(jié)點10.3.2名稱節(jié)點和數(shù)據(jù)節(jié)點名稱節(jié)點和數(shù)據(jù)節(jié)點在HDFS中,名稱節(jié)點(NameNode)負(fù)責(zé)管理分布式文件系統(tǒng)的命名空
5、間(Namespace),保存了兩個核心的數(shù)據(jù)結(jié)構(gòu),即FsImage和EditLogFsImage用于維護(hù)文件系統(tǒng)樹以及文件樹中所有的文件和文件夾的元數(shù)據(jù)操作日志文件EditLog中記錄了所有針對文件的創(chuàng)建、刪除、重命名等操作名稱節(jié)點記錄了每個文件中各個塊所在的數(shù)據(jù)節(jié)點的位置信息圖10-3 名稱節(jié)點的數(shù)據(jù)結(jié)構(gòu) 名稱節(jié)點的數(shù)據(jù)結(jié)構(gòu)名稱節(jié)點的數(shù)據(jù)結(jié)構(gòu)10.3.2名稱節(jié)點和數(shù)據(jù)節(jié)點名稱節(jié)點和數(shù)據(jù)節(jié)點FsImage文件包含文件系統(tǒng)中所有目錄和文件inode的序列化形式。每個inode是一個文件或目錄的元數(shù)據(jù)的內(nèi)部表示,并包含此類信息:文件的復(fù)制等級、修改和訪問時間、訪問權(quán)限、塊大小以及組成文件的塊。對
6、于目錄,則存儲修改時間、權(quán)限和配額元數(shù)據(jù)FsImage文件沒有記錄塊存儲在哪個數(shù)據(jù)節(jié)點。而是由名稱節(jié)點把這些映射保留在內(nèi)存中,當(dāng)數(shù)據(jù)節(jié)點加入HDFS集群時,數(shù)據(jù)節(jié)點會把自己所包含的塊列表告知給名稱節(jié)點,此后會定期執(zhí)行這種告知操作,以確保名稱節(jié)點的塊映射是最新的。FsImage文件文件10.3.2名稱節(jié)點和數(shù)據(jù)節(jié)點名稱節(jié)點和數(shù)據(jù)節(jié)點在名稱節(jié)點啟動的時候,它會將FsImage文件中的內(nèi)容加載到內(nèi)存中,之后再執(zhí)行EditLog文件中的各項操作,使得內(nèi)存中的元數(shù)據(jù)和實際的同步,存在內(nèi)存中的元數(shù)據(jù)支持客戶端的讀操作。一旦在內(nèi)存中成功建立文件系統(tǒng)元數(shù)據(jù)的映射,則創(chuàng)建一個新的FsImage文件和一個空的Ed
7、itLog文件名稱節(jié)點起來之后,HDFS中的更新操作會重新寫到EditLog文件中,因為FsImage文件一般都很大(GB級別的很常見),如果所有的更新操作都往FsImage文件中添加,這樣會導(dǎo)致系統(tǒng)運行的十分緩慢,但是,如果往EditLog文件里面寫就不會這樣,因為EditLog 要小很多。每次執(zhí)行寫操作之后,且在向客戶端發(fā)送成功代碼之前,edits文件都需要同步更新名稱節(jié)點的啟動名稱節(jié)點的啟動10.3.2名稱節(jié)點和數(shù)據(jù)節(jié)點名稱節(jié)點和數(shù)據(jù)節(jié)點在名稱節(jié)點運行期間,HDFS的所有更新操作都是直接寫到EditLog中,久而久之, EditLog文件將會變得很大雖然這對名稱節(jié)點運行時候是沒有什么明顯
8、影響的,但是,當(dāng)名稱節(jié)點重啟的時候,名稱節(jié)點需要先將FsImage里面的所有內(nèi)容映像到內(nèi)存中,然后再一條一條地執(zhí)行EditLog中的記錄,當(dāng)EditLog文件非常大的時候,會導(dǎo)致名稱節(jié)點啟動操作非常慢,而在這段時間內(nèi)HDFS系統(tǒng)處于安全模式,一直無法對外提供寫操作,影響了用戶的使用名稱節(jié)點運行期間名稱節(jié)點運行期間EditLog不斷變大的問題不斷變大的問題如何解決?答案是:SecondaryNameNode第二名稱節(jié)點第二名稱節(jié)點第二名稱節(jié)點是HDFS架構(gòu)中的一個組成部分,它是用來保存名稱節(jié)點中對HDFS 元數(shù)據(jù)信息的備份,并減少名稱節(jié)點重啟的時間。SecondaryNameNode一般是單獨運
9、行在一臺機器上。10.3.2名稱節(jié)點和數(shù)據(jù)節(jié)點名稱節(jié)點和數(shù)據(jù)節(jié)點SecondaryNameNode的工作情況:(1)SecondaryNameNode會定期和NameNode通信,請求其停止使用EditLog文件,暫時將新的寫操作寫到一個新的文件edit.new上來,這個操作是瞬間完成,上層寫日志的函數(shù)完全感覺不到差別;(2)SecondaryNameNode通過HTTP GET方式從NameNode上獲取到FsImage和EditLog文件,并下載到本地的相應(yīng)目錄下;(3)SecondaryNameNode將下載下來的FsImage載入到內(nèi)存,然后一條一條地執(zhí)行EditLog文件中的各項更新
10、操作,使得內(nèi)存中的FsImage保持最新;這個過程就是EditLog和FsImage文件合并;(4)SecondaryNameNode執(zhí)行完(3)操作之后,會通過post方式將新的FsImage文件發(fā)送到NameNode節(jié)點上(5)NameNode將從SecondaryNameNode接收到的新的FsImage替換舊的FsImage文件,同時將edit.new替換EditLog文件,通過這個過程EditLog就變小了10.3.2名稱節(jié)點和數(shù)據(jù)節(jié)點名稱節(jié)點和數(shù)據(jù)節(jié)點數(shù)據(jù)節(jié)點是分布式文件系統(tǒng)HDFS的工作節(jié)點,負(fù)責(zé)數(shù)據(jù)的存儲和讀取,會根據(jù)客戶端或者是名稱節(jié)點的調(diào)度來進(jìn)行數(shù)據(jù)的存儲和檢索,并且向名稱
11、節(jié)點定期發(fā)送自己所存儲的塊的列表每個數(shù)據(jù)節(jié)點中的數(shù)據(jù)會被保存在各自節(jié)點的本地Linux文件系統(tǒng)中數(shù)據(jù)節(jié)點數(shù)據(jù)節(jié)點(DataNode)10.4 HDFS體系結(jié)構(gòu) 10.4.1HDFS體系結(jié)構(gòu)概述 10.4.2HDFS命名空間管理 10.4.3通信協(xié)議 10.4.4客戶端 10.4.5HDFS體系結(jié)構(gòu)的局限性10.4.1HDFS體系結(jié)構(gòu)概述體系結(jié)構(gòu)概述 HDFS采用了主從(Master/Slave)結(jié)構(gòu)模型,一個HDFS集群包括一個名稱節(jié)點(NameNode)和若干個數(shù)據(jù)節(jié)點(DataNode)(如圖3-4所示)。名稱節(jié)點作為中心服務(wù)器,負(fù)責(zé)管理文件系統(tǒng)的命名空間及客戶端對文件的訪問。集群中的數(shù)據(jù)
12、節(jié)點一般是一個節(jié)點運行一個數(shù)據(jù)節(jié)點進(jìn)程,負(fù)責(zé)處理文件系統(tǒng)客戶端的讀/寫請求,在名稱節(jié)點的統(tǒng)一調(diào)度下進(jìn)行數(shù)據(jù)塊的創(chuàng)建、刪除和復(fù)制等操作。每個數(shù)據(jù)節(jié)點的數(shù)據(jù)實際上是保存在本地Linux文件系統(tǒng)中。圖10-4 HDFS體系結(jié)構(gòu) 10.4.2HDFS命名空間管理命名空間管理 HDFS的命名空間包含目錄、文件和塊 在HDFS1.0體系結(jié)構(gòu)中,在整個HDFS集群中只有一個命名空間,并且只有唯一一個名稱節(jié)點,該節(jié)點負(fù)責(zé)對這個命名空間進(jìn)行管理 HDFS使用的是傳統(tǒng)的分級文件體系,因此,用戶可以像使用普通文件系統(tǒng)一樣,創(chuàng)建、刪除目錄和文件,在目錄間轉(zhuǎn)移文件,重命名文件等10.4.3通信協(xié)議通信協(xié)議 HDFS是一
13、個部署在集群上的分布式文件系統(tǒng),因此,很多數(shù)據(jù)需要通過網(wǎng)絡(luò)進(jìn)行傳輸 所有的HDFS通信協(xié)議都是構(gòu)建在TCP/IP協(xié)議基礎(chǔ)之上的 客戶端通過一個可配置的端口向名稱節(jié)點主動發(fā)起TCP連接,并使用客戶端協(xié)議與名稱節(jié)點進(jìn)行交互 名稱節(jié)點和數(shù)據(jù)節(jié)點之間則使用數(shù)據(jù)節(jié)點協(xié)議進(jìn)行交互 客戶端與數(shù)據(jù)節(jié)點的交互是通過RPC(Remote Procedure Call)來實現(xiàn)的。在設(shè)計上,名稱節(jié)點不會主動發(fā)起RPC,而是響應(yīng)來自客戶端和數(shù)據(jù)節(jié)點的RPC請求10.4.4客戶端客戶端 客戶端是用戶操作HDFS最常用的方式,HDFS在部署時都提供了客戶端 HDFS客戶端是一個庫,暴露了HDFS文件系統(tǒng)接口,這些接口隱藏了
14、HDFS實現(xiàn)中的大部分復(fù)雜性 嚴(yán)格來說,客戶端并不算是HDFS的一部分 客戶端可以支持打開、讀取、寫入等常見的操作,并且提供了類似Shell的命令行方式來訪問HDFS中的數(shù)據(jù) 此外,HDFS也提供了Java API,作為應(yīng)用程序訪問文件系統(tǒng)的客戶端編程接口10.4.5HDFS體系結(jié)構(gòu)的局限性體系結(jié)構(gòu)的局限性HDFS只設(shè)置唯一一個名稱節(jié)點,這樣做雖然大大簡化了系統(tǒng)設(shè)計,但也帶來了一些明顯的局限性,具體如下: (1)命名空間的限制命名空間的限制:名稱節(jié)點是保存在內(nèi)存中的,因此,名稱節(jié)點能夠容納的對象(文件、塊)的個數(shù)會受到內(nèi)存空間大小的限制。 (2)性能的瓶頸性能的瓶頸:整個分布式文件系統(tǒng)的吞吐量
15、,受限于單個名稱節(jié)點的吞吐量。 (3)隔離問題隔離問題:由于集群中只有一個名稱節(jié)點,只有一個命名空間,因此,無法對不同應(yīng)用程序進(jìn)行隔離。 (4)集群的可用性集群的可用性:一旦這個唯一的名稱節(jié)點發(fā)生故障,會導(dǎo)致整個集群變得不可用。10.5 HDFS存儲原理 10.5.1冗余數(shù)據(jù)保存冗余數(shù)據(jù)保存 10.5.2數(shù)據(jù)存取策略數(shù)據(jù)存取策略 10.5.3數(shù)據(jù)錯誤與恢復(fù)數(shù)據(jù)錯誤與恢復(fù)10.5.1冗余數(shù)據(jù)保存冗余數(shù)據(jù)保存 作為一個分布式文件系統(tǒng),為了保證系統(tǒng)的容錯性和可用性,HDFS采用了多副本方式對數(shù)據(jù)進(jìn)行冗余存儲,通常一個數(shù)據(jù)塊的多個副本會被分布到不同的數(shù)據(jù)節(jié)點上,如圖3-5所示,數(shù)據(jù)塊1被分別存放到數(shù)據(jù)
16、節(jié)點A和C上,數(shù)據(jù)塊2被存放在數(shù)據(jù)節(jié)點A和B上。這種多副本方式具有以下幾個優(yōu)點: (1)加快數(shù)據(jù)傳輸速度加快數(shù)據(jù)傳輸速度 (2)容易檢查數(shù)據(jù)錯誤容易檢查數(shù)據(jù)錯誤 (3)保證數(shù)據(jù)可靠性保證數(shù)據(jù)可靠性圖10-5 HDFS數(shù)據(jù)塊多副本存儲 10.5.2數(shù)據(jù)存取策略數(shù)據(jù)存取策略1.數(shù)據(jù)存放數(shù)據(jù)存放Block的副本放置策略第一個副本:放置在上傳文件的數(shù)據(jù)節(jié)點;如果是集群外提交,則隨機挑選一臺磁盤不太滿、CPU不太忙的節(jié)點第二個副本:放置在與第一個副本不同的機架的節(jié)點上第三個副本:與第一個副本相同機架的其他節(jié)點上更多副本:隨機節(jié)點3.5.2數(shù)據(jù)存取策略數(shù)據(jù)存取策略2. 數(shù)據(jù)讀取數(shù)據(jù)讀取HDFS提供了一個A
17、PI可以確定一個數(shù)據(jù)節(jié)點所屬的機架ID,客戶端也可以調(diào)用API獲取自己所屬的機架ID當(dāng)客戶端讀取數(shù)據(jù)時,從名稱節(jié)點獲得數(shù)據(jù)塊不同副本的存放位置列表,列表中包含了副本所在的數(shù)據(jù)節(jié)點,可以調(diào)用API來確定客戶端和這些數(shù)據(jù)節(jié)點所屬的機架ID,當(dāng)發(fā)現(xiàn)某個數(shù)據(jù)塊副本對應(yīng)的機架ID和客戶端對應(yīng)的機架ID相同時,就優(yōu)先選擇該副本讀取數(shù)據(jù),如果沒有發(fā)現(xiàn),就隨機選擇一個副本讀取數(shù)據(jù)10.5.3數(shù)據(jù)錯誤與恢復(fù)數(shù)據(jù)錯誤與恢復(fù) HDFS具有較高的容錯性,可以兼容廉價的硬件,它把硬件出錯看作一種常態(tài),而不是異常,并設(shè)計了相應(yīng)的機制檢測數(shù)據(jù)錯誤和進(jìn)行自動恢復(fù),主要包括以下幾種情形:名稱節(jié)點出錯、數(shù)據(jù)節(jié)點出錯和數(shù)據(jù)出錯。1
18、. 名稱節(jié)點出錯名稱節(jié)點出錯 名稱節(jié)點保存了所有的元數(shù)據(jù)信息,其中,最核心的兩大數(shù)據(jù)結(jié)構(gòu)是FsImage和Editlog,如果這兩個文件發(fā)生損壞,那么整個HDFS實例將失效。因此,HDFS設(shè)置了備份機制,把這些核心文件同步復(fù)制到備份服務(wù)器SecondaryNameNode上。當(dāng)名稱節(jié)點出錯時,就可以根據(jù)備份服務(wù)器SecondaryNameNode中的FsImage和Editlog數(shù)據(jù)進(jìn)行恢復(fù)。3.5.3數(shù)據(jù)錯誤與恢復(fù)數(shù)據(jù)錯誤與恢復(fù)2. 數(shù)據(jù)節(jié)點出錯數(shù)據(jù)節(jié)點出錯每個數(shù)據(jù)節(jié)點會定期向名稱節(jié)點發(fā)送“心跳”信息,向名稱節(jié)點報告自己的狀態(tài)當(dāng)數(shù)據(jù)節(jié)點發(fā)生故障,或者網(wǎng)絡(luò)發(fā)生斷網(wǎng)時,名稱節(jié)點就無法收到來自一些
19、數(shù)據(jù)節(jié)點的心跳信息,這時,這些數(shù)據(jù)節(jié)點就會被標(biāo)記為“宕機”,節(jié)點上面的所有數(shù)據(jù)都會被標(biāo)記為“不可讀”,名稱節(jié)點不會再給它們發(fā)送任何I/O請求這時,有可能出現(xiàn)一種情形,即由于一些數(shù)據(jù)節(jié)點的不可用,會導(dǎo)致一些數(shù)據(jù)塊的副本數(shù)量小于冗余因子名稱節(jié)點會定期檢查這種情況,一旦發(fā)現(xiàn)某個數(shù)據(jù)塊的副本數(shù)量小于冗余因子,就會啟動數(shù)據(jù)冗余復(fù)制,為它生成新的副本HDFS和其它分布式文件系統(tǒng)的最大區(qū)別就是可以調(diào)整冗余數(shù)據(jù)的位置3.5.3數(shù)據(jù)錯誤與恢復(fù)數(shù)據(jù)錯誤與恢復(fù)3. 數(shù)據(jù)出錯數(shù)據(jù)出錯網(wǎng)絡(luò)傳輸和磁盤錯誤等因素,都會造成數(shù)據(jù)錯誤客戶端在讀取到數(shù)據(jù)后,會采用md5和sha1對數(shù)據(jù)塊進(jìn)行校驗,以確定讀取到正確的數(shù)據(jù)在文件被創(chuàng)
20、建時,客戶端就會對每一個文件塊進(jìn)行信息摘錄,并把這些信息寫入到同一個路徑的隱藏文件里面當(dāng)客戶端讀取文件的時候,會先讀取該信息文件,然后,利用該信息文件對每個讀取的數(shù)據(jù)塊進(jìn)行校驗,如果校驗出錯,客戶端就會請求到另外一個數(shù)據(jù)節(jié)點讀取該文件塊,并且向名稱節(jié)點報告這個文件塊有錯誤,名稱節(jié)點會定期檢查并且重新復(fù)制這個塊10.6 HDFS數(shù)據(jù)讀寫過程 10.6.1讀數(shù)據(jù)的過程讀數(shù)據(jù)的過程 10.6.2寫數(shù)據(jù)的過程寫數(shù)據(jù)的過程10.6 HDFS數(shù)據(jù)讀寫過程讀取文件importjava.io.BufferedReader;importjava.io.InputStreamReader;importorg.ap
21、ache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.fs.FSDataInputStream;publicclassChapter3publicstaticvoidmain(Stringargs)tryConfigurationconf=newConfiguration();FileSystemfs=FileSystem.get(conf);Pathfilename=newPath(“hdfs:/l
22、ocalhost:9000/user/hadoop/test.txt);FSDataInputStreamis=fs.open(filename);BufferedReaderd=newBufferedReader(newInputStreamReader(is);Stringcontent=d.readLine();/讀取文件一行System.out.println(content);d.close();/關(guān)閉文件fs.close();/關(guān)閉hdfscatch(Exceptione)e.printStackTrace();10.6 HDFS數(shù)據(jù)讀寫過程寫入文件import org.apach
23、e.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.FSDataOutputStream;import org.apache.hadoop.fs.Path; public class Chapter3 public static void main(String args) try Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(conf); byte buf
24、f = Hello world.getBytes(); / 要寫入的內(nèi)容 String filename = hdfs:/localhost:9000/user/hadoop/test.txt; /要寫入的文件名 FSDataOutputStream os = fs.create(new Path(filename); os.write(buff,0,buff.length); System.out.println(Create:+ filename); catch (Exception e) e.printStackTrace(); 10.6 HDFS數(shù)據(jù)讀寫過程FileSystem是一個通
25、用文件系統(tǒng)的抽象基類,可以被分布式文件系統(tǒng)繼承,所有可能使用Hadoop文件系統(tǒng)的代碼,都要使用這個類Hadoop為FileSystem這個抽象類提供了多種具體實現(xiàn)DistributedFileSystem就是FileSystem在HDFS文件系統(tǒng)中的具體實現(xiàn)FileSystem的open()方法返回的是一個輸入流FSDataInputStream對象,在HDFS文件系統(tǒng)中,具體的輸入流就是DFSInputStream;FileSystem中的create()方法返回的是一個輸出流FSDataOutputStream對象,在HDFS文件系統(tǒng)中,具體的輸出流就是DFSOutputStream。C
26、onfiguration conf = new Configuration();FileSystem fs = FileSystem.get(conf);FSDataInputStream in = fs.open(new Path(uri);FSDataOutputStream out = fs.create(new Path(uri);備注:創(chuàng)建一個Configuration對象時,其構(gòu)造方法會默認(rèn)加載工程項目下兩個配置文件,分別是hdfs-site.xml以及core-site.xml,這兩個文件中會有訪問HDFS所需的參數(shù)值,主要是fs.defaultFS,指定了HDFS的地址(比如hdfs:/localhost:9000),有了這個地址客戶端就可以通過這個地址訪問HDFS了 10.6.1讀數(shù)據(jù)的過程讀數(shù)據(jù)的過程FSDataInputStream封裝了DFSInputStreamFileSystem fs = FileSystem.get(conf);FSDataInputStream in = fs.open(new Path(uri);Configuration conf = new Configuration();import org.apache.hadoop.fs.
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年傾斜離心式光飾機項目投資可行性研究分析報告
- 2025年國際市場調(diào)研與分析服務(wù)合同樣本
- 2020-2025年中國酸奶冰淇淋行業(yè)發(fā)展趨勢預(yù)測及投資戰(zhàn)略咨詢報告
- 2025年中國智慧餐廳行業(yè)市場深度分析及投資戰(zhàn)略研究報告
- 2025年度大宗商品交易貨物運輸電子合同標(biāo)準(zhǔn)
- 2025年度建筑施工工程設(shè)備專業(yè)保險服務(wù)協(xié)議
- 2025年度核桃加工企業(yè)知識產(chǎn)權(quán)保護(hù)合同
- 2025年度互聯(lián)網(wǎng)數(shù)據(jù)中心(IDC)合作協(xié)議范本
- 2025年度跨境電商平臺股權(quán)激勵方案合同
- 2025年度家政服務(wù)中介家政保險代理合同范本
- 綜合實踐活動《感恩父母,擁抱親情》PPT
- GB/T 21295-2014服裝理化性能的技術(shù)要求
- 2022年行業(yè)報告我國FEVE氟樹脂涂料發(fā)展現(xiàn)狀及展望
- 焊口外觀檢查記錄
- Y2系列電機樣本
- 市域社會治理現(xiàn)代化解決方案
- 許慎《說文解字》(全文)
- 我國應(yīng)急通信保障能力評估體系探究(金)
- 井控-井口套管頭裝置⑥課件
- 施工質(zhì)量管理體系與保證措施方案
- 變配電室受電方案
評論
0/150
提交評論