版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第四章
HDFS分布式文件系統(tǒng)大數(shù)據(jù)理論與應用基礎4.1HDFS簡介4.2
HDFS的存儲架構和工作原理4.3
HDFS的Shell操作4.4
HDFS的JavaAPI介紹4.5
本章小結本章目錄大數(shù)據(jù)理論與應用基礎4.1HDFS簡介大數(shù)據(jù)理論與應用基礎4.1HDFS簡介HDFS是Hadoop生態(tài)系統(tǒng)中的重要組成部分,也是當前應用最廣泛的分布式文件系統(tǒng),主要目的是解決海量數(shù)據(jù)文件的存儲問題。本章從HDFS的發(fā)展入手,隨后深入講解HDFS的架構、工作原理及常見的使用方式。HDFS的產生與發(fā)展并不是一蹴而就的,是伴隨著數(shù)據(jù)量的不斷增長和對數(shù)據(jù)存儲需求的不斷擴大而產生和發(fā)展的,其發(fā)展脈絡也可歸溯為分布式文件系統(tǒng)的發(fā)展。大數(shù)據(jù)理論與應用基礎4.1.1分布式文件系統(tǒng)的發(fā)展傳統(tǒng)的文件系統(tǒng)如下圖所示,它將數(shù)據(jù)直接存放在單一的文件服務器上。這種文件系統(tǒng)在存儲數(shù)據(jù)時會遇到兩個主要問題:一是數(shù)據(jù)量增長后的存儲瓶頸問題,二是大文件的上傳和下載效率低下問題。大數(shù)據(jù)理論與應用基礎4.1.1分布式文件系統(tǒng)的發(fā)展為解決傳統(tǒng)存儲瓶頸,首先考慮的便是擴容。擴容有兩種形式:一種是直接添加存儲磁盤,稱為縱向擴容,單一服務器采用的就是這種形式;另一種是增加服務器數(shù)量,通過規(guī)模的擴充達到分布式存儲。分布式文件存儲系統(tǒng)的雛形如下圖所示。大數(shù)據(jù)理論與應用基礎4.1.1分布式文件系統(tǒng)的發(fā)展為解決文件上傳和下載效率低下問題,通常采用的方法是將一個大文件進行切片,即先將一個大文件分為多個小數(shù)據(jù)塊(Block,本章圖中簡寫為Blk),然后將多個小文件塊以并行的方式進行上傳或下載。以一個300GB的文件為例,可將其分為3個數(shù)據(jù)塊,每個數(shù)據(jù)塊的大小為100GB,將其分布式地存儲在文件系統(tǒng)中。文件分塊存儲如下圖所示。(在實際使用中,每個數(shù)據(jù)塊都比較小,約為100MB左右)。大數(shù)據(jù)理論與應用基礎4.1.1分布式文件系統(tǒng)的發(fā)展之前在一臺服務器上存儲的一個300GB的文件。被分塊存儲在了3臺服務器上,每個服務器只存儲100GB的文件,從而解決了上傳和下載效率低下問題。但同時帶來了另一個問題,即如何將3個文件塊合并(恢復)為一個完整的文件。針對此問題,通??紤]額外增加一臺服務器,用以存儲文件的元信息,即分塊后問文件塊的大小、名稱、存儲位置等信息。增加額外服務器后的架構如右圖所示。當客戶端需要下載文件時,先訪問文件服務器A,獲取要下載的文件塊信息,然后到對應的服務器中獲取文件。大數(shù)據(jù)理論與應用基礎4.1.1分布式文件系統(tǒng)的發(fā)展還有一個關鍵問題,若某臺服務器宕機,則無法正常獲取文件,此類問題被稱為單點故障。針對此類問題,可以采用如下圖所示的冗余機制解決,即每個文件服務器都存儲多個數(shù)據(jù)塊。右圖中的文件服務器A稱為NameNode,用于維護文件系統(tǒng)中所有文件和目錄的相關信息;文件服務器B、C和D稱為DataNode,用于實際存儲數(shù)據(jù)塊。大數(shù)據(jù)理論與應用基礎4.1.2HDFS的基本概念大數(shù)據(jù)理論與應用基礎HDFS是一個易于擴展的分布式文件系統(tǒng),可運行在成千上萬臺計算機上。這些計算機構成了HDFS集群。1.NameNodeNameNode是HDFS集群的主服務器,也稱為名稱節(jié)點或主節(jié)點。一旦NameNode關閉,HDFS集群便無法訪問。NameNode主要存儲文件的元信息,負責整個集群的管理,如配置存儲的副本數(shù)量等均由NameNode負責。4.1.2HDFS的基本概念大數(shù)據(jù)理論與應用基礎2.DataNodeDataNode是HDFS集群的從服務器,稱為數(shù)據(jù)節(jié)點。DataNode存儲真正的數(shù)據(jù)塊,因此DataNode需要大量的存儲空間。集群中所有的DataNode都要與NameNode保持通信,在NameNode的調度下存儲并檢索數(shù)據(jù)塊,對數(shù)據(jù)塊進行創(chuàng)建、刪除等操作,并定期向NameNode匯報自身存儲的數(shù)據(jù)塊列表。當DataNode啟動時,會將自己的數(shù)據(jù)塊列表發(fā)送給NameNode。4.1.2HDFS的基本概念大數(shù)據(jù)理論與應用基礎3.數(shù)據(jù)塊磁盤讀/寫的最小單位是數(shù)據(jù)塊,每個磁盤都有默認的數(shù)據(jù)塊大小。HDFS也有數(shù)據(jù)塊的概念,但它是抽象的,在Hadoop中,默認的數(shù)據(jù)塊大小為128MB,且有3份副本,并盡可能存儲于不同的DataNode中。4.1.2HDFS的基本概念大數(shù)據(jù)理論與應用基礎4.RackRack是用來放置Hadoop集群服務器的機架,不同機架之間通過交換機連接通信。HDFS通過機架感知策略使NameNode得到每個DataNode所在的機架ID,并將副本存儲在相應的機架上。下面以默認的3副本為例進行說明,具體策略如下:(1)第一個副本放在本地機架的一個DataNode上。(2)第二個副本放在同一個機架的另一個DataNode上(隨機選擇)。(3)第三個副本放在不同的機架節(jié)點上。如果還有更多的副本,則隨機地將其放在集群的其他節(jié)點上。這種策略減少了機架間的數(shù)據(jù)傳輸,從而提高了數(shù)據(jù)的寫操作效率。機架故障的可能性遠低于節(jié)點故障的可能性,因此也提高了數(shù)據(jù)的可靠性。為了降低整體的帶寬消耗和讀取延時,HDFS會讓程序盡量讀取離它最近的副本。例如,若讀取程序的同一個機架上有一個副本,則讀取該副本。4.1.2HDFS的基本概念大數(shù)據(jù)理論與應用基礎5.MetadataMetadata(元數(shù)據(jù))是描述數(shù)據(jù)屬性的數(shù)據(jù),涵蓋3種形式:一是保存和維護HDFS中文件與目錄的信息,如文件名、目錄名、文件大小、創(chuàng)建時間、權限等;二是記錄文件內容,如文件分塊情況、副本個數(shù),每個副本所在的DataNode信息等;三是保存HDFS集群中所有的DataNode信息。4.1.3HDFS的特點HDFS是大數(shù)據(jù)廣泛使用的分布式文件系統(tǒng),但并不代表HDFS對所有情況均適用,本節(jié)從辯證的觀點說明HDFS的優(yōu)/缺點。
1.HDFS的優(yōu)點(1)低成本。HDFS可以部署在廉價的計算機上,對硬件沒有太高的要求,成本較低。例如,普通的臺式機或筆記本電腦就可以部署HDFS集群。大數(shù)據(jù)理論與應用基礎4.1.3HDFS的特點(2)高容錯性。HDFS可以由成千上萬臺服務器組成,每臺服務器存儲文件系統(tǒng)數(shù)據(jù)的一部分。HDFS中的副本機制也會將數(shù)據(jù)保存在多個DataNode上,DataNode定期向NameNode發(fā)送心跳信號,當DataNode與NameNod失去通信時,HDFS會從其他DataNode中獲取副本,因此HDFS具有高容錯性。(3)流式數(shù)據(jù)訪問。HDFS的數(shù)據(jù)處理規(guī)模很大,應用程序一次需要訪問大量數(shù)據(jù),應用程序多數(shù)情況下是同時請求一批數(shù)據(jù)的,而不是用戶交互式處理,因此應用程序能以流的形式訪問數(shù)據(jù)集,而訪問整個數(shù)據(jù)集要比訪問單條記錄更加高效。大數(shù)據(jù)理論與應用基礎4.1.3HDFS的特點(4)高吞吐量。吞吐量是指單位時間完成的工作量。HDFS實現(xiàn)了并行處理海量數(shù)據(jù),大大縮短了處理時間,提高了數(shù)據(jù)吞吐量。(5)可移植。HDFS是用Java語言編寫的,因此,只要是支持Java語言的機器都可以運行。由于Java語言的高可移植性,HDFS也具有非常廣泛的應用范圍,可實現(xiàn)不同平臺間的移植。大數(shù)據(jù)理論與應用基礎4.1.3HDFS的特點2.HDFS的缺點(1)高延遲。HDFS是為高數(shù)據(jù)吞吐量而優(yōu)化產生的,而高吞吐量會以高延遲為代價,因此,HDFS不適合低延遲數(shù)據(jù)訪問場景,如毫秒級查詢。(2)不適合小文件的存取。對于Hadoop系統(tǒng),小文件通常指小于HDFS數(shù)據(jù)塊的文件。由于每個文件都會產生各自的元數(shù)據(jù),Hadoop通過NameNode來存儲這些信息,因此,若小文件過多,則容易導致NameNode存儲出現(xiàn)瓶頸。大數(shù)據(jù)理論與應用基礎4.1.3HDFS的特點2.HDFS的缺點(1)高延遲。HDFS是為高數(shù)據(jù)吞吐量而優(yōu)化產生的,而高吞吐量會以高延遲為代價,因此,HDFS不適合低延遲數(shù)據(jù)訪問場景,如毫秒級查詢。(2)不適合小文件的存取。對于Hadoop系統(tǒng),小文件通常指小于HDFS數(shù)據(jù)塊的文件。由于每個文件都會產生各自的元數(shù)據(jù),Hadoop通過NameNode來存儲這些信息,因此,若小文件過多,則容易導致NameNode存儲出現(xiàn)瓶頸。(3)不適合并發(fā)寫入。HDFS目前并不支持多用戶并發(fā)寫操作。HDFS采用“一次寫入,多次讀取”的策略,文件一旦寫入后關閉,只能進行追加操作,即在文件末尾追加數(shù)據(jù)。大數(shù)據(jù)理論與應用基礎4.2HDFS的存儲架構和工作原理大數(shù)據(jù)理論與應用基礎4.2HDFS的存儲架構和工作原理HDFS本身的操作并不復雜,但讀者要理解HDFS的存儲架構,以及文件的讀、寫原理,助于全面掌握HDFS的基礎知識。大數(shù)據(jù)理論與應用基礎4.2.1HDFS的存儲架構HDFS是一個分布式文件系統(tǒng),其存儲架構必定比普通的文件系統(tǒng)更復雜,一般來講,HDFS集群主要由NameNode和DataNode構成,如下圖所示。大數(shù)據(jù)理論與應用基礎4.2.1HDFS的存儲架構HDFS集群采用主/從架構(Master/Slave架構),由一個NameNode和多個DataNode組成。其中,NameNode是HDFS集群的主節(jié)點,負責管理文件系統(tǒng)的命名空間和客戶端對文件的訪問;DataNode是HDFS集群的從節(jié)點,負責管理真正數(shù)據(jù)的存儲。HDFS中的NameNode和DataNode各司其職,共同完成分布式文件的存儲服務。大數(shù)據(jù)理論與應用基礎4.2.1HDFS的存儲架構NameNode主要保存文件的元數(shù)據(jù),它的具體實現(xiàn)方式是通過FsImage鏡像文件和EditLog日志文件來完成的。其中,F(xiàn)sImage鏡像文件用來存儲整個文件系統(tǒng)命名空間的信息,EditLog日志文件用來持久化系統(tǒng)元數(shù)據(jù)發(fā)生的變化。當NameNode啟動時,F(xiàn)sImage鏡像文件就會被加載到內存中,內存中的數(shù)據(jù)執(zhí)行記錄的操作,以確保所有的數(shù)據(jù)都處于最新的狀態(tài),這樣便加快了元數(shù)據(jù)的讀取和更新操作,因此,F(xiàn)sImage鏡像文件可也看作整個文件系統(tǒng)的快照(備份)。大數(shù)據(jù)理論與應用基礎4.2.1HDFS的存儲架構隨著集群運行時間增長,NameNode中存儲的元數(shù)據(jù)信息越來越多,便會導致EditLog日志文件越來越大。當集群重啟時,NameNode需要恢復元數(shù)據(jù)信息,其過程是首先加載上一次的FsImage鏡像文件,然后重復EditLog日志文件記錄的操作,一旦EditLog日志文件變得很大,恢復記錄的過程就會花費很長時間。除此之外,若NameNode宕機,則也會丟失數(shù)據(jù)。為了解決這些問題,HDFS提供了SecondaryNameNode(輔助名稱節(jié)點),它并非要取代NameNode,也不是NameNode的備份,而是周期性地把NameNode中的EditLog日志文件合并到FsImage鏡像文件中,從而減小EditLog日志文件的大小,縮短集群重啟時間,并保證HDFS系統(tǒng)的完整性。大數(shù)據(jù)理論與應用基礎4.2.1HDFS的存儲架構NameNode只存儲元數(shù)據(jù)信息,并不是真正的數(shù)據(jù),真正的數(shù)據(jù)存儲在DataNode中。DataNode負責管理它所在節(jié)點的數(shù)據(jù)存儲。DataNode中的數(shù)據(jù)塊是以文件的形式存儲在磁盤中的,其中包括兩個文件,一是數(shù)據(jù)本身,二是每個數(shù)據(jù)塊對應的一個元數(shù)據(jù)文件,包括數(shù)據(jù)長度、塊數(shù)據(jù)校驗和、時間戳等。大數(shù)據(jù)理論與應用基礎4.2.2HDFS文件的讀取原理雖然HDFS真正的數(shù)據(jù)存儲在DataNode中,但是讀取數(shù)據(jù)需要先經過NameNode。NameNode會返回文件的元數(shù)據(jù)信息,客戶端會直接與DataNode進行通信,從DataNode節(jié)點中讀取所需的數(shù)據(jù)塊。HDFS的文件讀取相對簡單,共分為4個步驟,其讀取原理如下圖所示。大數(shù)據(jù)理論與應用基礎4.2.2HDFS文件的讀取原理步驟1:客戶端向NameNode發(fā)起RPC請求,獲取請求文件數(shù)據(jù)塊所在的位置。步驟2:NameNode檢測元數(shù)據(jù)文件,視情況返回部分數(shù)據(jù)塊或全部數(shù)據(jù)塊的信息,對于每個數(shù)據(jù)塊,NameNode都會返回該數(shù)據(jù)塊副本的DataNode地址。步驟3:客戶端會選取排序靠前的DataNode來一次性讀取Block,每個Block都會進行完整性校驗,若文件不完整,則客戶端繼續(xù)向NameNode獲取下一批數(shù)據(jù)塊列表,直至驗證讀取的文件是完整的,數(shù)據(jù)塊讀取完畢。步驟4:客戶端將所有數(shù)據(jù)塊合并成一個完整的文件。大數(shù)據(jù)理論與應用基礎4.2.3HDFS文件的寫入原理數(shù)據(jù)寫入時會被劃分為等尺寸的數(shù)據(jù)塊并寫入不同的DataNode,每個數(shù)據(jù)塊通常保存指定數(shù)量的副本。相較于HDFS文件的讀取,寫入原理相對復雜,共12個步驟,如下圖所示。大數(shù)據(jù)理論與應用基礎4.2.3HDFS文件的寫入原理步驟1:客戶端通過RPC發(fā)起文件上傳請求,與NameNode建立通信。步驟2:NameNode檢查元數(shù)據(jù)文件的系統(tǒng)目錄樹。步驟3:若系統(tǒng)目錄樹的主目錄下不存在該文件的相關信息,則返回客戶端可以上傳文件。步驟4:客戶端請求上傳第一個數(shù)據(jù)塊及數(shù)據(jù)塊的副本數(shù)量。步驟5:NameNode檢查元數(shù)據(jù)文件中的DataNode信息池,找到可用的DataNode。步驟6:NameNode將可用數(shù)據(jù)塊的IP地址返回給客戶端。大數(shù)據(jù)理論與應用基礎4.2.3HDFS文件的寫入原理步驟7:客戶端請求DataNode1進行數(shù)據(jù)傳輸[本質為一個RPC,建立管道(Pipeline)],DataNode1收到請求后會調用DataNode2,DataNode2再調用DataNode3。步驟8:DataNode之間建立Pipeline后,逐個返回建立完畢的信息。步驟9:客戶端與DataNode之間建立數(shù)據(jù)傳輸流,開始發(fā)送數(shù)據(jù)包Packet。步驟10:客戶端向DataNode1以Packet(默認64KB)形式上傳第一個數(shù)據(jù)塊。當DataNode之間收到該Packet之后,會傳遞給DataNode2,DataNode2再傳遞給DataNode3。DataNode1每傳送一個Packet,都會被放入一個應答隊列,等待應答。大數(shù)據(jù)理論與應用基礎4.2.3HDFS文件的寫入原理步驟11:數(shù)據(jù)被分割成一個個Packet在Pipeline上依次傳輸,而在Pipeline反方向上,將逐個發(fā)送ACK確認信息,最終由Pipeline中的DataNode1將Pipeline的Ack確認信息發(fā)送給客戶端。步驟12:DataNode將它存儲的數(shù)據(jù)塊返回給客戶端,第一個數(shù)據(jù)塊傳輸完成??蛻舳藭俅握埱驨ameNode上傳后續(xù)的數(shù)據(jù)塊。重復以上步驟,直到所有數(shù)據(jù)塊都上傳完成。大數(shù)據(jù)理論與應用基礎4.3HDFS的Shell操作大數(shù)據(jù)理論與應用基礎4.3HDFS的Shell操作HDFS提供了多種數(shù)據(jù)訪問和操作方式,其中Shell命令行是最簡單的,也是初學者最容易接受的方式。本節(jié)對HDFS的Shell操作進行介紹。Shell是給用戶提供界面與系統(tǒng)進行交互的軟件,系統(tǒng)通過接收用戶輸入的命令執(zhí)行相應的操作。Shell分為圖形界面Shell和命令行Shell。HDFSShell包含類似Shell的命令。例如:大數(shù)據(jù)理論與應用基礎hadoopfs<args>hadoopdfs<args>hdfsdfs<args>其中,hadoopfs的使用范圍最廣,可以操作本地系統(tǒng)、HDFS等多種文件系統(tǒng);hadoopdfs主要針對HDFS,目前已基本被hdfsdfs取代。4.3HDFS的Shell操作下表列出了HDFSShell常用的命令參數(shù)。大數(shù)據(jù)理論與應用基礎命令參數(shù)描述命令參數(shù)描述-ls查看指定目錄結構-put上傳文件-du統(tǒng)計目錄下所有文件的大小-get下載文件-cp復制文件-text將文件輸出為文本-mv移動文件-mkdir創(chuàng)建目錄-rm刪除文件或空目錄-help幫助上表中只列出了部分命令參數(shù),若需要了解全部命令參數(shù),則可通過hadoopdfs-help命令獲取幫助文檔。下面重點介紹幾個常用命令,更多命令參數(shù)請讀者自行嘗試。4.3HDFS的Shell操作1.ls命令ls命令用于查看指定路徑下的文件和目錄,類似Linux系統(tǒng)的ls命令,其語法格式如下:大數(shù)據(jù)理論與應用基礎hadoopfs-ls[-d][-h][-R]<args>其中各參數(shù)說明如下。l
-d:將目錄顯示為普通文件。l
-h:使用便于人類查閱的信息格式。l
-R:遞歸顯示所有子目錄。如:hadoopfs-ls/右圖給出了上述命令執(zhí)行后列出的HDFS根目錄下的所有文件及目錄。4.3HDFS的Shell操作3.put命令在Hadoop集群搭建的測試環(huán)節(jié)已經使用過put命令。該命令用于將本地文件或目錄復制到HDFS上,其語法格式如下:其中各參數(shù)說明如下。-f:覆蓋目標文件。-p:保留訪問和修改時間、權限。示例代碼:大數(shù)據(jù)理論與應用基礎Hadoopfs-put[-f][-p]<location><det>hdfsdfs-put-fhdfs_test.txt/hadoopfs-put-fhdfs_test.txt/運行后,會將本地的hdfs_test.txt文件上傳至HDFS根目錄。右圖給出了上傳文件后利用ls命令查看的結果。4.4HDFS的JavaAPI介紹大數(shù)據(jù)理論與應用基礎4.4HDFS的JavaAPI介紹4.4.1HDFSJavaAPI概述API(ApplicationProgramingInterface,應用程序編程接口)是一些預先定義好的函數(shù),這些函數(shù)對功能做了很好的封裝,為應用程序和開發(fā)人員提供了一種可以直接使用的能力,而無須訪問源碼或理解內部細節(jié)。Java程序通過Hadoop提供的文件操作類進行HDFS文件的讀、寫、上傳等操作。這些文件操作類都在org.apache.hadoop.fs包中。大數(shù)據(jù)理論與應用基礎4.4HDFS的JavaAPI介紹4.4.2使用JavaAPI操作HDFS1.配置開發(fā)環(huán)境(1)配置Java環(huán)境。在Windows系統(tǒng)下配置Java環(huán)境即安裝JDK。這里使用的JDK版本為1.8.0_202。(2)IntelliJIDEA配置。IntelliJIDEA是一個由JetBrains公司開發(fā)的集成開發(fā)環(huán)境(IDE),主要用于Java開發(fā)。它提供了豐富的功能和工具,包括代碼編輯、調試、測試、構建和部署等,可以大大提高Java開發(fā)的效率和代碼質量。大數(shù)據(jù)理論與應用基礎4.4HDFS的JavaAPI介紹Maven是通過項目對象模型文件pom.xml來管理項目構建、報告和文檔的工具。換言之,Maven就是一種項目管理工具,pom.xml是Maven的基本單元。Maven最強大的功能是通過pom.xml自動下載項目依賴庫。下面在Windows系統(tǒng)下安裝IntelliJIDEA并添加Maven依賴。大數(shù)據(jù)理論與應用基礎4.4HDFS的JavaAPI介紹2.新建項目新建IntelliJIDEA項目,步驟如下。(1)打開IntelliJIDEA,在下圖中選擇“File”→“New”→“Project…”選項。大數(shù)據(jù)理論與應用基礎4.4HDFS的JavaAPI介紹(2)在下圖中選擇“Maven”選項,并選擇對應的JDK版本,單擊“Next”按鈕。大數(shù)據(jù)理論與應用基礎4.4HDFS的JavaAPI介紹(3)在下圖的“Name”文本框中輸入項目名,在“Location”文本框中輸入項目位置,“GroupId”、“ArtifactId”和“Version”文本框中暫時保持默認設置即可,單擊“Finish”按鈕。大數(shù)據(jù)理論與應用基礎4.4HDFS的JavaAPI介紹打開如下圖所示的新建項目后的pom.xml文件。大數(shù)據(jù)理論與應用基礎4.4HDFS的JavaAPI介紹(4)將pom.xml修改為如下內容并保存(重點在于<dependencies>中的內容):大數(shù)據(jù)理論與應用基礎<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="/POM/4.0.0"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/POM/4.0.0http:///xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>testHadoop</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<piler.source>8</piler.source>
<piler.target>8</piler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>3.3.4</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies></project>4.4HDFS的JavaAPI介紹(5)在新建類界面的左側目錄樹中依次點開“src”和“main”目錄,并右擊“java”目錄,在右鍵菜單中選擇“New”→“JavaClass”選項,如右上圖所示。在右下圖的文本框中輸入“com.hdfs.TestHDFS”后Enter鍵,系統(tǒng)自動切換到如圖4-18所示的程序編寫界面。大數(shù)據(jù)理論與應用基礎4.4HDFS的JavaAPI介紹3.編寫代碼(1)初始化HDFS。在右上圖中編寫代碼(此段代碼首先定義了一個私有的FileSystem實例,所有HDFS的相關操作均是通過該實例進行的;隨后定義了一個初始化方法init()和一個關閉資源的方法close()):大數(shù)據(jù)理論與應用基礎publicclassTestHDFS{privateFileSystemfileSystem;@Beforepublicvoidinit()throwsURISyntaxException,IOException,InterruptedException{//連接集群地址URIuri=newURI("hdfs://00:8020");//創(chuàng)建一個配置文件Configurationconfiguration=newConfiguration();//用戶名Stringuser="root";//獲取客戶端對象fileSystem=FileSystem.get(uri,configuration,user);}@Afterpublicvoidclose()throwsIOException{//關閉資源fileSystem.close();}}4.4HDFS的JavaAPI介紹3.編寫代碼(2)創(chuàng)建目錄。在TestHDFS類中加入右側代碼(利用filesystem中的mkdirs()方法)。運行上述代碼,便可在HDFS根目錄下創(chuàng)建目錄test_parent_dir和test_parent_dir2,并且,在test_parent_dir目錄下還會創(chuàng)建test_child_dir子目錄,可通過3.4.5節(jié)驗證部分介紹的內容,在瀏覽器窗口中查看創(chuàng)建目錄后的效果,如有圖所示。大數(shù)據(jù)理論與應用基礎@Testpublicvoidtestmkdir()throwsURISyntaxException,IOException,InterruptedException{//創(chuàng)建一個目錄fileSystem.mkdirs(newPath("/test_parent_dir/test_child_dir"));fileSystem.mkdirs(newPath("/test_parent_dir2"));}4.4HDFS的JavaAPI介紹3.編寫代碼(3)上傳文件。在TestHDFS類中繼續(xù)加入右側代碼(使用filesystem中的copyFromLocalFile()方法)運行代碼,即可將Windows系統(tǒng)的D盤根目錄下的windowsUpLoadtest.txt文件上傳至HDFS的/test_parent_dir目錄中。文件上傳效果如右圖所示。大數(shù)據(jù)理論與應用基礎@TestpublicvoidtestPut()throwsIOException{//參數(shù)1:刪除原數(shù)據(jù),參數(shù)2:是否允許覆蓋,參數(shù)3:原數(shù)據(jù)路徑,參數(shù)4:目的地路徑fileSystem.copyFromLocalFile(false,true,newPath("D:\\windowsUploadTest.txt"),newPath("/test_parent_dir/windowsUploadTest"));}4.4HDFS的JavaAPI介紹3.編寫代碼(4)文件下載。繼續(xù)在TestHDFS類中加入如下代碼(使用filesystem類中的copyToLocalFile()方法)。運行后便可將剛上傳的windowsUploadTest文件下載至本地系統(tǒng)E盤根目錄下。大數(shù)據(jù)理論與應用基礎@TestpublicvoidtestGet()throwsIOException{//參數(shù)1:刪除原數(shù)據(jù);參數(shù)2:原文件路徑HDFS;參數(shù)3:目標地址路徑;參數(shù)4:目的地路徑
fileSystem.copyToLocalFile(false,
newPath("/test_parent_dir/windowsUploadTest"),
newPath("E\\"),false);}4.4HDFS的JavaAPI介紹3.編寫代碼(5)獲取文件詳情。在TestHDFS類中添加右側代碼并運行,可在控制臺看到HDFS根目錄下所有文件及目錄的相關信息。大數(shù)據(jù)理論與應用基礎@TestpublicvoidfileDetail()throwsIOException{
//獲取所有文件信息
RemoteIterator<LocatedFileStatus>listFiles=fileSystem.listFiles(newPath("/"),true);
//遍歷文件
while(listFiles.hasNext()){
LocatedFileStatusfileStatus=listFiles.next();
System.out.println("========"+fileStatus.getPath()+"=========");
System.out.println(fileStatus.getPermission());
System.out.println(fileStatus.getOwner())
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025單位基本建設合同簡易范文
- 2025年度公司經理內部審計與合規(guī)聘用合同3篇
- 二零二五年度環(huán)保建材工廠設備轉讓合同3篇
- 2025年度量子信息內部股東股權轉讓協(xié)議書范文3篇
- 二零二五年度企業(yè)年會場地布置用品采購協(xié)議3篇
- 二零二五年度股權代持風險管理與合作協(xié)議2篇
- 2025年度員工宿舍租賃及智能化安防系統(tǒng)合同3篇
- 2025年度綠色養(yǎng)殖場養(yǎng)殖工人勞動合同3篇
- 2025年度農業(yè)機械出租與農機具維修服務合同3篇
- 二零二五年度智能交通系統(tǒng)合作項目協(xié)議書模板3篇
- 《業(yè)務員銷售技巧》課件
- 水廠安全管理培訓
- 江西省贛州市2023-2024學年高一上學期期末考試化學試題 附答案
- 注塑操作員作業(yè)指導書
- 四年級心理健康 12.我也能當家 課件(7張ppt)
- 10kV架空線路工程初步設計說明書模板
- 鍋爐汽包水位控制系統(tǒng)設計[1]
- 政務禮儀培訓課件(PPT66頁)rar
- 水土保持常用監(jiān)測手段及方法
- 片石擋土墻砌筑施工方案及工藝方法
- 分析刑法中認識因素和意志因素的關系
評論
0/150
提交評論