![大數(shù)據(jù)技術(shù)及應(yīng)用_第1頁](http://file4.renrendoc.com/view12/M07/2D/22/wKhkGWYmWCWAc2wCAACzf3yfxn0369.jpg)
![大數(shù)據(jù)技術(shù)及應(yīng)用_第2頁](http://file4.renrendoc.com/view12/M07/2D/22/wKhkGWYmWCWAc2wCAACzf3yfxn03692.jpg)
![大數(shù)據(jù)技術(shù)及應(yīng)用_第3頁](http://file4.renrendoc.com/view12/M07/2D/22/wKhkGWYmWCWAc2wCAACzf3yfxn03693.jpg)
![大數(shù)據(jù)技術(shù)及應(yīng)用_第4頁](http://file4.renrendoc.com/view12/M07/2D/22/wKhkGWYmWCWAc2wCAACzf3yfxn03694.jpg)
![大數(shù)據(jù)技術(shù)及應(yīng)用_第5頁](http://file4.renrendoc.com/view12/M07/2D/22/wKhkGWYmWCWAc2wCAACzf3yfxn03695.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
大數(shù)據(jù)技術(shù)及應(yīng)用BigDataTechnology&Applications本章配套教學(xué)視頻/post/bigdata-online-course/#lesson3《大數(shù)據(jù)技術(shù)原理與應(yīng)用(第2版)》
《第3章分布式文件系統(tǒng)HDFS》在線視頻觀看地址提綱3.1分布式文件系統(tǒng)3.2HDFS簡介3.3HDFS相關(guān)概念3.4HDFS體系結(jié)構(gòu)3.5HDFS存儲原理3.6HDFS數(shù)據(jù)讀寫過程3.7 HDFS編程實(shí)踐3.1 分布式文件系統(tǒng)3.1.1 計(jì)算機(jī)集群結(jié)構(gòu)3.1.2 分布式文件系統(tǒng)的結(jié)構(gòu)3.1.3分布式文件系統(tǒng)的設(shè)計(jì)需求3.1 分布式文件系統(tǒng)文件系統(tǒng)是操作系統(tǒng)用于明確存儲設(shè)備(常見的是磁盤,也有基于NANDFlash的固態(tài)硬盤)或分區(qū)上的文件的方法和數(shù)據(jù)結(jié)構(gòu);即在存儲設(shè)備上組織文件的方法分布式文件系統(tǒng)(DistributedFileSystem)是一種通過網(wǎng)絡(luò)實(shí)現(xiàn)文件在多臺主機(jī)上進(jìn)行分布式存儲的文件系統(tǒng),一般采用客戶機(jī)/服務(wù)器(Client/Server)模式廣泛應(yīng)用的分布式文件系統(tǒng)主要包括GFS和HDFS等3.1.1 計(jì)算機(jī)集群結(jié)構(gòu)分布式文件系統(tǒng)把文件分布存儲到多個(gè)計(jì)算機(jī)節(jié)點(diǎn)上,成千上萬的計(jì)算機(jī)節(jié)點(diǎn)構(gòu)成計(jì)算機(jī)集群與之前使用多個(gè)處理器和專用高級硬件的并行化處理裝置不同的是,目前的分布式文件系統(tǒng)所采用的計(jì)算機(jī)集群,都是由普通硬件構(gòu)成的,這就大大降低了硬件上的開銷3.1.1 計(jì)算機(jī)集群結(jié)構(gòu)集群中的計(jì)算機(jī)節(jié)點(diǎn)存放在機(jī)架(Rack)上,每個(gè)機(jī)架可以存放8-64個(gè)節(jié)點(diǎn),同一機(jī)架上的不同節(jié)點(diǎn)之間通過網(wǎng)絡(luò)互連(常常用吉比特以太網(wǎng)),多個(gè)不同機(jī)架之間采用另一級網(wǎng)絡(luò)或交換機(jī)互連圖3-1計(jì)算機(jī)集群的基本架構(gòu)3.1.2 分布式文件系統(tǒng)的結(jié)構(gòu)Windows、Linux等操作系統(tǒng)中,文件系統(tǒng)一般會把磁盤空間劃分為每512字節(jié)一組,稱為“磁盤塊”,它是文件系統(tǒng)讀寫操作的最小單位,文件系統(tǒng)的塊(Block)通常是磁盤塊的整數(shù)倍,即每次讀寫的數(shù)據(jù)量必須是磁盤塊大小的整數(shù)倍與普通文件系統(tǒng)類似,分布式系統(tǒng)也采用塊的概念,不過分布式文件系統(tǒng)的塊要比操作系統(tǒng)中的塊大很多。同時(shí),與普通文件不同的是,在分布式文件系統(tǒng)中,如果一個(gè)文件小于一個(gè)數(shù)據(jù)塊的大小,它并不占用整個(gè)數(shù)據(jù)塊的存儲空間3.1.2 分布式文件系統(tǒng)的結(jié)構(gòu)分布式文件系統(tǒng)在物理結(jié)構(gòu)上是由計(jì)算機(jī)集群中的多個(gè)節(jié)點(diǎn)構(gòu)成的,這些節(jié)點(diǎn)分為兩類,一類叫“主節(jié)點(diǎn)”(MasterNode)或者也被稱為“名稱結(jié)點(diǎn)”(NameNode),另一類叫“從節(jié)點(diǎn)”(SlaveNode)或者也被稱為“數(shù)據(jù)節(jié)點(diǎn)”(DataNode)圖3-2大規(guī)模文件系統(tǒng)的整體結(jié)構(gòu)3.1.2 分布式文件系統(tǒng)的結(jié)構(gòu)名稱結(jié)點(diǎn)負(fù)責(zé)文件和目錄的創(chuàng)建、刪除和重命名等,同時(shí)管理著數(shù)據(jù)節(jié)點(diǎn)和文件塊的映射關(guān)系數(shù)據(jù)節(jié)點(diǎn)負(fù)責(zé)數(shù)據(jù)的存儲和讀取,在存儲時(shí),由名稱節(jié)點(diǎn)分配存儲位置,然后由客戶端把數(shù)據(jù)直接寫入相應(yīng)數(shù)據(jù)節(jié)點(diǎn);在讀取時(shí),客戶端從名稱節(jié)點(diǎn)獲得數(shù)據(jù)節(jié)點(diǎn)和文件塊的映射關(guān)系,然后就可以到相應(yīng)位置訪問文件塊。數(shù)據(jù)節(jié)點(diǎn)也要根據(jù)名稱節(jié)點(diǎn)的命令創(chuàng)建、刪除數(shù)據(jù)塊和冗余復(fù)制
整個(gè)訪問過程中,名稱節(jié)點(diǎn)不參與數(shù)據(jù)的傳輸3.1.2 分布式文件系統(tǒng)的結(jié)構(gòu)計(jì)算機(jī)集群中的節(jié)點(diǎn)可能發(fā)生故障,因此為了保證數(shù)據(jù)的完整性,分布式文件系統(tǒng)通常采用多副本存儲,存放在不同節(jié)點(diǎn)不同機(jī)架上,這樣單個(gè)節(jié)點(diǎn)出現(xiàn)故障時(shí),就可以快速調(diào)用副本重啟單個(gè)節(jié)點(diǎn)上的計(jì)算過程,而不用重啟整個(gè)計(jì)算過程,整個(gè)機(jī)架出現(xiàn)故障時(shí)也不會丟失所有文件塊文件塊的大小和副本個(gè)數(shù)通??梢杂捎脩糁付ǚ植际轿募到y(tǒng)是針對大規(guī)模數(shù)據(jù)存儲而設(shè)計(jì)的,主要用于處理大規(guī)模文件,如TB級文件。處理過小的文件不僅無法充分發(fā)揮其優(yōu)勢,而且會嚴(yán)重影響到系統(tǒng)的擴(kuò)展和性能3.1.3分布式文件系統(tǒng)的設(shè)計(jì)需求分布式文件系統(tǒng)的設(shè)計(jì)目標(biāo)主要包括透明性、并發(fā)控制、可伸縮性、容錯(cuò)以及安全需求等設(shè)計(jì)需求含義透明性具備訪問、位置、性能和伸縮透明性并發(fā)控制客服端對于文件的讀寫不應(yīng)該影響其他客服端對統(tǒng)一文件的讀寫文件復(fù)制一個(gè)文件可以擁有在不同位置的多個(gè)副本硬件和操作系統(tǒng)的異構(gòu)性可以在不同的操作系統(tǒng)和計(jì)算機(jī)上實(shí)現(xiàn)同樣的客戶端和服務(wù)器端程序可伸縮性支持節(jié)點(diǎn)的動(dòng)態(tài)加入或退出容錯(cuò)保證文件服務(wù)在客戶端或者服務(wù)端出現(xiàn)問題的時(shí)候能正常使用安全保障系統(tǒng)的安全性表3-1分布式系統(tǒng)的設(shè)計(jì)需求3.2 HDFS簡介HDFS開源實(shí)現(xiàn)了GFS的基本思想。原來是ApacheNutch搜索引擎的一部分,后來獨(dú)立出來作為一個(gè)獨(dú)立Apache子項(xiàng)目,并和MapReduce一起成為Hadoop的核心組成部分HDFS支持流數(shù)據(jù)讀取和處理超大規(guī)模文件,并能夠運(yùn)行在由廉價(jià)的普通計(jì)算機(jī)器組成的集群上,這主要得益于HDFS在設(shè)計(jì)指之初就充分考慮了實(shí)際應(yīng)用環(huán)境的特點(diǎn)3.2 HDFS簡介總體而言,HDFS要實(shí)現(xiàn)以下目標(biāo):●兼容廉價(jià)的硬件設(shè)備
可以實(shí)現(xiàn)持續(xù)監(jiān)視、錯(cuò)誤檢查、容錯(cuò)處理和自動(dòng)恢復(fù)●流數(shù)據(jù)讀寫
滿足批量數(shù)據(jù)處理要求,具有很高的吞吐率●大數(shù)據(jù)集
文件通常可以達(dá)到GB甚至TB級別●簡單的文件模型
一次寫入、多次讀?。阂坏┩瓿蓪懭?,關(guān)閉后只能被讀取●強(qiáng)大的跨平臺兼容性
支持JVM(JavaVirtualMachine)的機(jī)器都可以運(yùn)行HDFS3.2 HDFS簡介HDFS特殊的設(shè)計(jì),在實(shí)現(xiàn)上述優(yōu)良特性的同時(shí),也使得自身具有一些應(yīng)用局限性,主要包括以下幾個(gè)方面:●不適合低延遲數(shù)據(jù)訪問
大規(guī)模批處理意味著較高的延遲,不適合用在需要較低延遲(如數(shù)十毫秒)的應(yīng)用場合●無法高效存儲大量小文件
小文件是指文件大小小于一個(gè)塊的文件●不支持多用戶寫入及任意修改文件
HDFS只允許一個(gè)文件一個(gè)寫入者,不允許多個(gè)用戶對同一個(gè)文件執(zhí)行寫操作,而且只允許對文件執(zhí)行追加操作,不能執(zhí)行隨機(jī)寫操作3.3.1 塊傳統(tǒng)文件系統(tǒng)中,為了提高磁盤讀寫效率,一般以數(shù)據(jù)塊為單位,而不是以字節(jié)為單位。比如,機(jī)械式硬盤(磁盤的一種)包含磁頭和轉(zhuǎn)動(dòng)部件,在讀取數(shù)據(jù)時(shí)有一個(gè)尋道的過程,通過轉(zhuǎn)動(dòng)盤片和移動(dòng)磁頭的位置,來找到數(shù)據(jù)在機(jī)械式硬盤中的存儲位置,然后進(jìn)行讀寫機(jī)械式硬盤尋址時(shí)間是最耗時(shí)的部分,一旦找到第一條記錄,剩下的順序讀取效率是非常高的以塊為單位讀寫數(shù)據(jù),可以把磁盤尋道時(shí)間分?jǐn)偟酱罅繑?shù)據(jù)中3.3.1 塊
HDFS默認(rèn)一個(gè)塊64MB,一個(gè)文件被分成多個(gè)塊,以塊作為存儲單位。塊的大小遠(yuǎn)遠(yuǎn)大于普通文件系統(tǒng),可以最小化尋址開銷HDFS采用抽象的塊概念可以帶來以下幾個(gè)明顯的好處:●支持大規(guī)模文件存儲:文件以塊為單位進(jìn)行存儲,一個(gè)大規(guī)模文件可以被分拆成若干個(gè)文件塊,不同的文件塊可以被分發(fā)到不同的節(jié)點(diǎn)上,因此,一個(gè)文件的大小不會受到單個(gè)節(jié)點(diǎn)的存儲容量的限制,可以遠(yuǎn)遠(yuǎn)大于網(wǎng)絡(luò)中任意節(jié)點(diǎn)的存儲容量3.3.1 塊●簡化系統(tǒng)設(shè)計(jì):首先,大大簡化了存儲管理,因?yàn)槲募K大小是固定的,這樣就可以很容易計(jì)算出一個(gè)節(jié)點(diǎn)可以存儲多少文件塊;其次,方便了元數(shù)據(jù)的管理,元數(shù)據(jù)不需要和文件塊一起存儲,可以由其他系統(tǒng)負(fù)責(zé)管理元數(shù)據(jù)●適合數(shù)據(jù)備份:每個(gè)文件塊都可以冗余存儲到多個(gè)節(jié)點(diǎn)上,大大提高了系統(tǒng)的容錯(cuò)性和可用性3.3.2 名稱節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)3.3.2 名稱節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)3.3.2 名稱節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)在HDFS中,名稱節(jié)點(diǎn)(NameNode)負(fù)責(zé)管理分布式文件系統(tǒng)的命名空間(Namespace),保存了兩個(gè)核心的數(shù)據(jù)結(jié)構(gòu),即FsImage和EditLog名稱節(jié)點(diǎn)記錄了每個(gè)文件中各個(gè)塊所在的數(shù)據(jù)節(jié)點(diǎn)的位置信息名稱節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)3.3.2 名稱節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)圖3-3名稱節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)3.3.2 名稱節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)FsImage文件包含文件系統(tǒng)中所有目錄和文件inode的序列化形式。每個(gè)inode是一個(gè)文件或目錄的元數(shù)據(jù)的內(nèi)部表示,并包含此類信息:文件的復(fù)制等級、修改和訪問時(shí)間、訪問權(quán)限、塊大小以及組成文件的塊。對于目錄,則存儲修改時(shí)間、權(quán)限和配額元數(shù)據(jù)FsImage文件3.3.2 名稱節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)FsImage文件沒有記錄文件包含哪些塊以及每個(gè)塊存儲在哪個(gè)數(shù)據(jù)節(jié)點(diǎn)。而是由名稱節(jié)點(diǎn)把這些映射信息保留在內(nèi)存中,當(dāng)數(shù)據(jù)節(jié)點(diǎn)加入HDFS集群時(shí),數(shù)據(jù)節(jié)點(diǎn)會把自己所包含的塊列表告知給名稱節(jié)點(diǎn),此后會定期執(zhí)行這種告知操作,以確保名稱節(jié)點(diǎn)的塊映射是最新的FsImage文件3.3.2 名稱節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)在名稱節(jié)點(diǎn)啟動(dòng)的時(shí)候,它會將FsImage文件中的內(nèi)容加載到內(nèi)存中,之后再執(zhí)行EditLog文件中的各項(xiàng)操作,使得內(nèi)存中的元數(shù)據(jù)和實(shí)際的同步,存在內(nèi)存中的元數(shù)據(jù)支持客戶端的讀操作一旦在內(nèi)存中成功建立文件系統(tǒng)元數(shù)據(jù)的映射,則創(chuàng)建一個(gè)新的FsImage文件和一個(gè)空的EditLog文件名稱節(jié)點(diǎn)的啟動(dòng)3.3.2 名稱節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)名稱節(jié)點(diǎn)起來之后,HDFS中的更新操作會重新寫到EditLog文件中,因?yàn)镕sImage文件一般都很大(GB級別的很常見),如果所有的更新操作都往FsImage文件中添加,這樣會導(dǎo)致系統(tǒng)運(yùn)行的十分緩慢,但是,如果往EditLog文件里面寫就不會這樣,因?yàn)镋ditLog要小很多。每次執(zhí)行寫操作之后,且在向客戶端發(fā)送成功代碼之前,edits文件都需要同步更新名稱節(jié)點(diǎn)的啟動(dòng)3.3.2 名稱節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)在名稱節(jié)點(diǎn)運(yùn)行期間,HDFS的所有更新操作都是直接寫到EditLog中,久而久之,EditLog文件將會變得很大雖然這對名稱節(jié)點(diǎn)運(yùn)行時(shí)候是沒有什么明顯影響的,但是,當(dāng)名稱節(jié)點(diǎn)重啟的時(shí)候,名稱節(jié)點(diǎn)需要先將FsImage里面的所有內(nèi)容映像到內(nèi)存中,然后再一條一條地執(zhí)行EditLog中的記錄,當(dāng)EditLog文件非常大的時(shí)候,會導(dǎo)致名稱節(jié)點(diǎn)啟動(dòng)操作非常慢,而在這段時(shí)間內(nèi)HDFS系統(tǒng)處于安全模式,一直無法對外提供寫操作,影響了用戶的使用名稱節(jié)點(diǎn)運(yùn)行期間EditLog不斷變大的問題3.3.2 名稱節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)如何解決?答案是:SecondaryNameNode第二名稱節(jié)點(diǎn)第二名稱節(jié)點(diǎn)是HDFS架構(gòu)中的一個(gè)組成部分,它是用來保存名稱節(jié)點(diǎn)中對HDFS元數(shù)據(jù)信息的備份,并減少名稱節(jié)點(diǎn)重啟的時(shí)間。SecondaryNameNode一般是單獨(dú)運(yùn)行在一臺機(jī)器上3.3.2 名稱節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)SecondaryNameNode的工作情況:(1)SecondaryNameNode會定期和NameNode通信,請求其停止使用EditLog文件,暫時(shí)將新的寫操作寫到一個(gè)新的文件edit.new上來,這個(gè)操作是瞬間完成,上層寫日志的函數(shù)完全感覺不到差別(2)SecondaryNameNode通過HTTPGET方式從NameNode上獲取到FsImage和EditLog文件,并下載到本地的相應(yīng)目錄下(3)SecondaryNameNode將下載下來的FsImage載入到內(nèi)存,然后一條一條地執(zhí)行EditLog文件中的各項(xiàng)更新操作,使得內(nèi)存中的FsImage保持最新;這個(gè)過程就是EditLog和FsImage文件合并;(4)SecondaryNameNode執(zhí)行完(3)操作之后,會通過post方式將新的FsImage文件發(fā)送到NameNode節(jié)點(diǎn)上(5)NameNode將從SecondaryNameNode接收到的新的FsImage替換舊的FsImage文件,同時(shí)將edit.new替換EditLog文件,通過這個(gè)過程EditLog就變小了3.3.2 名稱節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)SecondaryNameNode的工作情況:3.3.2 名稱節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)SecondaryNameNode的工作情況:(1)SecondaryNameNode會定期和NameNode通信,請求其停止使用EditLog文件,暫時(shí)將新的寫操作寫到一個(gè)新的文件edit.new上來,這個(gè)操作是瞬間完成,上層寫日志的函數(shù)完全感覺不到差別(2)SecondaryNameNode通過HTTPGET方式從NameNode上獲取到FsImage和EditLog文件,并下載到本地的相應(yīng)目錄下3.3.2 名稱節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)(3)SecondaryNameNode將下載下來的FsImage載入到內(nèi)存,然后一條一條地執(zhí)行EditLog文件中的各項(xiàng)更新操作,使得內(nèi)存中的FsImage保持最新;這個(gè)過程就是EditLog和FsImage文件合并(4)SecondaryNameNode執(zhí)行完(3)操作之后,會通過post方式將新的FsImage文件發(fā)送到NameNode節(jié)點(diǎn)上(5)NameNode將從SecondaryNameNode接收到的新的FsImage替換舊的FsImage文件,同時(shí)將edit.new替換EditLog文件,通過這個(gè)過程EditLog就變小了3.3.2 名稱節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)SecondaryNameNodeEditLog與Fsimage的合并操作作為名稱節(jié)點(diǎn)的“檢查點(diǎn)”如果合并期間發(fā)生故障,系統(tǒng)會丟失部分元數(shù)據(jù)信息,在HDFS的設(shè)計(jì)中,并不支持把系統(tǒng)直接切換到第二名稱節(jié)點(diǎn),因此第二名稱節(jié)點(diǎn)并不能起到“熱備份”作用3.3.2 名稱節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)數(shù)據(jù)節(jié)點(diǎn)是分布式文件系統(tǒng)HDFS的工作節(jié)點(diǎn),負(fù)責(zé)數(shù)據(jù)的存儲和讀取,會根據(jù)客戶端或者是名稱節(jié)點(diǎn)的調(diào)度來進(jìn)行數(shù)據(jù)的存儲和檢索,并且向名稱節(jié)點(diǎn)定期發(fā)送自己所存儲的塊的列表每個(gè)數(shù)據(jù)節(jié)點(diǎn)中的數(shù)據(jù)會被保存在各自節(jié)點(diǎn)的本地Linux文件系統(tǒng)中數(shù)據(jù)節(jié)點(diǎn)(DataNode)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)模型,一個(gè)HDFS集群包括一個(gè)名稱節(jié)點(diǎn)(NameNode)和若干個(gè)數(shù)據(jù)節(jié)點(diǎn)(DataNode)名稱節(jié)點(diǎn)作為中心服務(wù)器,負(fù)責(zé)管理文件系統(tǒng)的命名空間及客戶端對文件的訪問。集群中的數(shù)據(jù)節(jié)點(diǎn)一般是一個(gè)節(jié)點(diǎn)運(yùn)行一個(gè)數(shù)據(jù)節(jié)點(diǎn)進(jìn)程,負(fù)責(zé)處理文件系統(tǒng)客戶端的讀/寫請求,在名稱節(jié)點(diǎn)的統(tǒng)一調(diào)度下進(jìn)行數(shù)據(jù)塊的創(chuàng)建、刪除和復(fù)制等操作每個(gè)數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)實(shí)際上是保存在本地Linux文件系統(tǒng)中3.4.1 HDFS體系結(jié)構(gòu)概述每個(gè)數(shù)據(jù)節(jié)點(diǎn)會定期向名稱節(jié)點(diǎn)發(fā)送“心跳”信息,向名稱節(jié)點(diǎn)報(bào)告自己的狀態(tài),沒有按時(shí)發(fā)送心跳信息的數(shù)據(jù)節(jié)點(diǎn)被標(biāo)記為“宕機(jī)”,不會再給它分配任何I/O請求整個(gè)訪問過程中,名稱節(jié)點(diǎn)并不參與數(shù)據(jù)的傳輸,使得一個(gè)文件的數(shù)據(jù)能夠在不同的數(shù)據(jù)節(jié)點(diǎn)上實(shí)現(xiàn)并發(fā)訪問,大大提高了數(shù)據(jù)訪問速度,也大大減輕了中心服務(wù)器的負(fù)擔(dān),方便了數(shù)據(jù)管理3.4.1 HDFS體系結(jié)構(gòu)概述圖3-4HDFS體系結(jié)構(gòu)3.4.2 HDFS命名空間管理HDFS的命名空間包含目錄、文件和塊在HDFS1.0體系結(jié)構(gòu)中,在整個(gè)HDFS集群中只有一個(gè)命名空間,并且只有唯一一個(gè)名稱節(jié)點(diǎn),該節(jié)點(diǎn)負(fù)責(zé)對這個(gè)命名空間進(jìn)行管理HDFS使用的是傳統(tǒng)的分級文件體系,因此,用戶可以像使用普通文件系統(tǒng)一樣,創(chuàng)建、刪除目錄和文件,在目錄間轉(zhuǎn)移文件,重命名文件等HDFS還沒有實(shí)現(xiàn)磁盤配額和文件訪問權(quán)限等功能,也不支持文件的硬鏈接和軟連接(快捷方式)3.4.3 通信協(xié)議HDFS是一個(gè)部署在集群上的分布式文件系統(tǒng),因此,很多數(shù)據(jù)需要通過網(wǎng)絡(luò)進(jìn)行傳輸所有的HDFS通信協(xié)議都是構(gòu)建在TCP/IP協(xié)議基礎(chǔ)之上的客戶端通過一個(gè)可配置的端口向名稱節(jié)點(diǎn)主動(dòng)發(fā)起TCP連接,并使用客戶端協(xié)議與名稱節(jié)點(diǎn)進(jìn)行交互名稱節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)之間則使用數(shù)據(jù)節(jié)點(diǎn)協(xié)議進(jìn)行交互客戶端與數(shù)據(jù)節(jié)點(diǎn)的交互是通過RPC(RemoteProcedureCall)來實(shí)現(xiàn)的。在設(shè)計(jì)上,名稱節(jié)點(diǎn)不會主動(dòng)發(fā)起RPC,而是響應(yīng)來自客戶端和數(shù)據(jù)節(jié)點(diǎn)的RPC請求3.4.4 客戶端客戶端是用戶操作HDFS最常用的方式,HDFS在部署時(shí)都提供了客戶端HDFS客戶端是一個(gè)庫,暴露了HDFS文件系統(tǒng)接口,這些接口隱藏了HDFS實(shí)現(xiàn)中的大部分復(fù)雜性嚴(yán)格來說,客戶端并不算是HDFS的一部分客戶端可以支持打開、讀取、寫入等常見的操作,并且提供了類似Shell的命令行方式來訪問HDFS中的數(shù)據(jù)此外,HDFS也提供了JavaAPI,作為應(yīng)用程序訪問文件系統(tǒng)的客戶端編程接口3.4.5 HDFS體系結(jié)構(gòu)的局限性HDFS1.0只設(shè)置唯一一個(gè)名稱節(jié)點(diǎn),這樣做雖然大大簡化了系統(tǒng)設(shè)計(jì),但也帶來了一些明顯的局限性,具體如下:(1)命名空間的限制:名稱節(jié)點(diǎn)是保存在內(nèi)存中的,因此,名稱節(jié)點(diǎn)能夠容納的對象(文件、塊)的個(gè)數(shù)會受到內(nèi)存空間大小的限制(2)性能的瓶頸:整個(gè)分布式文件系統(tǒng)的吞吐量,受限于單個(gè)名稱節(jié)點(diǎn)的吞吐量
3.4.5 HDFS體系結(jié)構(gòu)的局限性(3)隔離問題:由于集群中只有一個(gè)名稱節(jié)點(diǎn),只有一個(gè)命名空間,因此,無法對不同應(yīng)用程序進(jìn)行隔離(4)集群的可用性:一旦這個(gè)唯一的名稱節(jié)點(diǎn)發(fā)生故障,會導(dǎo)致整個(gè)集群變得不可用3.4.5 HDFS體系結(jié)構(gòu)的局限性3.5 HDFS存儲原理3.5.1 冗余數(shù)據(jù)保存3.5.2 數(shù)據(jù)存取策略3.5.3 數(shù)據(jù)錯(cuò)誤與恢復(fù)3.5.1 冗余數(shù)據(jù)保存作為一個(gè)分布式文件系統(tǒng),為了保證系統(tǒng)的容錯(cuò)性和可用性,HDFS采用了多副本方式對數(shù)據(jù)進(jìn)行冗余存儲,通常一個(gè)數(shù)據(jù)塊的多個(gè)副本會被分布到不同的數(shù)據(jù)節(jié)點(diǎn)上,如圖3-5所示,數(shù)據(jù)塊1被分別存放到數(shù)據(jù)節(jié)點(diǎn)A和C上,數(shù)據(jù)塊2被存放在數(shù)據(jù)節(jié)點(diǎn)A和B上圖3-5HDFS數(shù)據(jù)塊多副本存儲3.5.1 冗余數(shù)據(jù)保存這種多副本方式具有以下幾個(gè)優(yōu)點(diǎn):(1)加快數(shù)據(jù)傳輸速度當(dāng)多個(gè)客戶端需要同時(shí)訪問同一個(gè)文件時(shí),可以讓各個(gè)客戶端分別從不同的數(shù)據(jù)塊副本中讀取數(shù)據(jù),這就大大加快了數(shù)據(jù)傳輸速度(2)容易檢查數(shù)據(jù)錯(cuò)誤采用多個(gè)副本可以很容易判斷數(shù)據(jù)傳輸是否出錯(cuò)(3)保證數(shù)據(jù)可靠性即使某個(gè)節(jié)點(diǎn)出現(xiàn)故障失效,也不會造成數(shù)據(jù)丟失3.5.2 數(shù)據(jù)存取策略1.數(shù)據(jù)存放為了提高數(shù)據(jù)的可靠性與系統(tǒng)的可用性,以及充分利用網(wǎng)絡(luò)帶寬,HDFS采用了機(jī)架(Rack)為基礎(chǔ)的數(shù)據(jù)存放策略HDFS默認(rèn)每個(gè)數(shù)據(jù)都是在不同機(jī)架上HDFS默認(rèn)的冗余復(fù)制因子是3,每一個(gè)文件塊會被同時(shí)保存在3個(gè)地方,其中,有兩份副本放在從一個(gè)機(jī)架的不同機(jī)器上面,第三個(gè)副本放在不同機(jī)架的機(jī)器上面。這樣既可以保證機(jī)架發(fā)生異常時(shí)的數(shù)據(jù)恢復(fù),也可以提高數(shù)據(jù)讀寫性能3.5.2 數(shù)據(jù)存取策略1.數(shù)據(jù)存放第一個(gè)副本:如果是在集群內(nèi)發(fā)起的寫操作請求,放置在上傳文件的數(shù)據(jù)節(jié)點(diǎn);如果是集群外的寫操作請求,則隨機(jī)挑選一臺磁盤不太滿、CPU不太忙的節(jié)點(diǎn)第二個(gè)副本:放置在與第一個(gè)副本不同的機(jī)架的節(jié)點(diǎn)上第三個(gè)副本:與第一個(gè)副本相同機(jī)架的其他節(jié)點(diǎn)上更多副本:隨機(jī)節(jié)點(diǎn)3.5.2 數(shù)據(jù)存取策略1.數(shù)據(jù)存放圖3-7Block的副本放置策略3.5.2 數(shù)據(jù)存取策略2.數(shù)據(jù)讀取HDFS提供了一個(gè)API可以確定一個(gè)數(shù)據(jù)節(jié)點(diǎn)所屬的機(jī)架ID,客戶端也可以調(diào)用API獲取自己所屬的機(jī)架ID當(dāng)客戶端讀取數(shù)據(jù)時(shí),從名稱節(jié)點(diǎn)獲得數(shù)據(jù)塊不同副本的存放位置列表,列表中包含了副本所在的數(shù)據(jù)節(jié)點(diǎn),可以調(diào)用API來確定客戶端和這些數(shù)據(jù)節(jié)點(diǎn)所屬的機(jī)架ID,當(dāng)發(fā)現(xiàn)某個(gè)數(shù)據(jù)塊副本對應(yīng)的機(jī)架ID和客戶端對應(yīng)的機(jī)架ID相同時(shí),就優(yōu)先選擇該副本讀取數(shù)據(jù),如果沒有發(fā)現(xiàn),就隨機(jī)選擇一個(gè)副本讀取數(shù)據(jù)3.5.2 數(shù)據(jù)存取策略3.數(shù)據(jù)復(fù)制HDFS的數(shù)據(jù)復(fù)制采用了流水線復(fù)制的策略,大大提高了數(shù)據(jù)復(fù)制過程的效率每個(gè)塊都向HDFS集群中的名稱節(jié)點(diǎn)發(fā)起寫請求,名稱節(jié)點(diǎn)會根據(jù)系統(tǒng)中各個(gè)數(shù)據(jù)節(jié)點(diǎn)的使用情況,選擇一個(gè)數(shù)據(jù)節(jié)點(diǎn)列表返回給客戶端,然后客戶端把數(shù)據(jù)首先寫入列表中的第一個(gè)數(shù)據(jù)節(jié)點(diǎn),同時(shí)把列表傳給第一個(gè)數(shù)據(jù)節(jié)點(diǎn),但第一個(gè)數(shù)據(jù)節(jié)點(diǎn)接收到數(shù)據(jù)的時(shí)候,寫入本地,同時(shí)向列表第二個(gè)數(shù)據(jù)節(jié)點(diǎn)發(fā)起連接請求,把自己接收到的數(shù)據(jù)和列表傳給第二個(gè)數(shù)據(jù)節(jié)點(diǎn),以此類推3.5.3 數(shù)據(jù)錯(cuò)誤與恢復(fù)HDFS具有較高的容錯(cuò)性,可以兼容廉價(jià)的硬件,它把硬件出錯(cuò)看作一種常態(tài),而不是異常,并設(shè)計(jì)了相應(yīng)的機(jī)制檢測數(shù)據(jù)錯(cuò)誤和進(jìn)行自動(dòng)恢復(fù),主要包括以下幾種情形:名稱節(jié)點(diǎn)出錯(cuò)、數(shù)據(jù)節(jié)點(diǎn)出錯(cuò)和數(shù)據(jù)出錯(cuò)3.5.3 數(shù)據(jù)錯(cuò)誤與恢復(fù)1.名稱節(jié)點(diǎn)出錯(cuò)名稱節(jié)點(diǎn)保存了所有的元數(shù)據(jù)信息,其中,最核心的兩大數(shù)據(jù)結(jié)構(gòu)是FsImage和Editlog,如果這兩個(gè)文件發(fā)生損壞,那么整個(gè)HDFS實(shí)例將失效。因此,HDFS設(shè)置了備份機(jī)制,把這些核心文件同步復(fù)制到備份服務(wù)器SecondaryNameNode上。當(dāng)名稱節(jié)點(diǎn)出錯(cuò)時(shí),就可以根據(jù)備份服務(wù)器SecondaryNameNode中的FsImage和Editlog數(shù)據(jù)進(jìn)行恢復(fù)3.5.3 數(shù)據(jù)錯(cuò)誤與恢復(fù)2.數(shù)據(jù)節(jié)點(diǎn)出錯(cuò)每個(gè)數(shù)據(jù)節(jié)點(diǎn)會定期向名稱節(jié)點(diǎn)發(fā)送“心跳”信息,向名稱節(jié)點(diǎn)報(bào)告自己的狀態(tài)當(dāng)數(shù)據(jù)節(jié)點(diǎn)發(fā)生故障,或者網(wǎng)絡(luò)發(fā)生斷網(wǎng)時(shí),名稱節(jié)點(diǎn)就無法收到來自一些數(shù)據(jù)節(jié)點(diǎn)的心跳信息,這時(shí),這些數(shù)據(jù)節(jié)點(diǎn)就會被標(biāo)記為“宕機(jī)”,節(jié)點(diǎn)上面的所有數(shù)據(jù)都會被標(biāo)記為“不可讀”,名稱節(jié)點(diǎn)不會再給它們發(fā)送任何I/O請求3.5.3 數(shù)據(jù)錯(cuò)誤與恢復(fù)2.數(shù)據(jù)節(jié)點(diǎn)出錯(cuò)這時(shí),有可能出現(xiàn)一種情形,即由于一些數(shù)據(jù)節(jié)點(diǎn)的不可用,會導(dǎo)致一些數(shù)據(jù)塊的副本數(shù)量小于冗余因子名稱節(jié)點(diǎn)會定期檢查這種情況,一旦發(fā)現(xiàn)某個(gè)數(shù)據(jù)塊的副本數(shù)量小于冗余因子,就會啟動(dòng)數(shù)據(jù)冗余復(fù)制,為它生成新的副本HDFS和其它分布式文件系統(tǒng)的最大區(qū)別就是可以調(diào)整冗余數(shù)據(jù)的位置3.5.3 數(shù)據(jù)錯(cuò)誤與恢復(fù)3.數(shù)據(jù)出錯(cuò)網(wǎng)絡(luò)傳輸和磁盤錯(cuò)誤等因素,都會造成數(shù)據(jù)錯(cuò)誤客戶端在讀取到數(shù)據(jù)后,會采用md5和sha1對數(shù)據(jù)塊進(jìn)行校驗(yàn),以確定讀取到正確的數(shù)據(jù)在文件被創(chuàng)建時(shí),客戶端就會對每一個(gè)文件塊進(jìn)行信息摘錄,并把這些信息寫入到同一個(gè)路徑的隱藏文件里面3.5.3 數(shù)據(jù)錯(cuò)誤與恢復(fù)3.數(shù)據(jù)出錯(cuò)當(dāng)客戶端讀取文件的時(shí)候,會先讀取該信息文件,然后,利用該信息文件對每個(gè)讀取的數(shù)據(jù)塊進(jìn)行校驗(yàn),如果校驗(yàn)出錯(cuò),客戶端就會請求到另外一個(gè)數(shù)據(jù)節(jié)點(diǎn)讀取該文件塊,并且向名稱節(jié)點(diǎn)報(bào)告這個(gè)文件塊有錯(cuò)誤,名稱節(jié)點(diǎn)會定期檢查并且重新復(fù)制這個(gè)塊3.6 HDFS數(shù)據(jù)讀寫過程3.6.1 讀數(shù)據(jù)的過程3.6.2 寫數(shù)據(jù)的過程3.6 HDFS數(shù)據(jù)讀寫過程讀取文件importjava.io.BufferedReader;importjava.io.InputStreamReader;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.fs.FSDataInputStream;
publicclassChapter3{publicstaticvoidmain(String[]args){try{Configurationconf=newConfiguration();conf.set("fs.defaultFS","hdfs://localhost:9000");
conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");FileSystemfs=FileSystem.get(conf);Pathfile=newPath("test");FSDataInputStreamgetIt=fs.open(file);BufferedReaderd=newBufferedReader(newInputStreamReader(getIt));Stringcontent=d.readLine();//讀取文件一行
System.out.println(content);d.close();//關(guān)閉文件
fs.close();//關(guān)閉hdfs}catch(Exceptione){e.printStackTrace();}}}
}3.6 HDFS數(shù)據(jù)讀寫過程寫入文件importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.FSDataOutputStream;importorg.apache.hadoop.fs.Path;publicclassChapter3{publicstaticvoidmain(String[]args){try{Configurationconf=newConfiguration();conf.set("fs.defaultFS","hdfs://localhost:9000");conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");FileSystemfs=FileSystem.get(conf);byte[]buff="Helloworld".getBytes();//要寫入的內(nèi)容
Stringfilename="test";//要寫入的文件名
FSDataOutputStreamos=fs.create(newPath(filename));os.write(buff,0,buff.length);System.out.println("Create:"+filename);os.close();fs.close();}catch(Exceptione){e.printStackTrace();}}}3.6 HDFS數(shù)據(jù)讀寫過程FileSystem是一個(gè)通用文件系統(tǒng)的抽象基類,可以被分布式文件系統(tǒng)繼承,所有可能使用Hadoop文件系統(tǒng)的代碼,都要使用這個(gè)類Hadoop為FileSystem這個(gè)抽象類提供了多種具體實(shí)現(xiàn)DistributedFileSystem就是FileSystem在HDFS文件系統(tǒng)中的具體實(shí)現(xiàn)3.6 HDFS數(shù)據(jù)讀寫過程FileSystem的open()方法返回的是一個(gè)輸入流FSDataInputStream對象,在HDFS文件系統(tǒng)中,具體的輸入流就是DFSInputStream;FileSystem中的create()方法返回的是一個(gè)輸出流FSDataOutputStream對象,在HDFS文件系統(tǒng)中,具體的輸出流就是DFSOutputStream3.6 HDFS數(shù)據(jù)讀寫過程Configurationconf=newConfiguration();conf.set("fs.defaultFS","hdfs://localhost:9000");conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");FileSystemfs=FileSystem.get(conf);FSDataInputStreamin=fs.open(newPath(uri));FSDataOutputStreamout=fs.create(newPath(uri));3.6.1 讀數(shù)據(jù)的過程FSDataInputStream封裝了DFSInputStreamFileSystemfs=FileSystem.get(conf);FSDataInputStreamin=fs.open(newPath(uri));Configurationconf=newConfiguration();importorg.apache.hadoop.fs.FileSystem通過ClientProtocal.getBlockLocations()遠(yuǎn)程調(diào)用名稱節(jié)點(diǎn),獲得文件開始部分?jǐn)?shù)據(jù)塊的位置對于該數(shù)據(jù)塊,名稱節(jié)點(diǎn)返回保存該數(shù)據(jù)塊的所有數(shù)據(jù)節(jié)點(diǎn)的地址并根據(jù)距離客戶端遠(yuǎn)近進(jìn)行排序客戶端獲得輸入流FSDataInputStream以后調(diào)用read()函數(shù)開始讀取數(shù)據(jù)輸入流根據(jù)前面的排序結(jié)果選擇距離客戶端最近的數(shù)據(jù)節(jié)點(diǎn)建立連接并讀取數(shù)據(jù)數(shù)據(jù)從數(shù)據(jù)節(jié)點(diǎn)讀到客戶端,當(dāng)該數(shù)據(jù)塊讀取完畢時(shí)FSDataInputStream關(guān)閉和該數(shù)據(jù)節(jié)點(diǎn)的連接通過ClientProtocal.getBlockLocations()查找下一個(gè)數(shù)據(jù)塊3.6.2 寫數(shù)據(jù)的過程FileSystemfs=FileSystem.get(conf);FSDataOutputStreamout=fs.create(newPath(uri));Configurationconf=newConfiguration();importorg.apache.hadoop.fs.FileSystemRPC遠(yuǎn)程調(diào)用名稱節(jié)點(diǎn)在文件系統(tǒng)的命名空間中新建一個(gè)文件名稱節(jié)點(diǎn)會執(zhí)行一些檢查(文件是否存在,客戶端權(quán)限)FSDataOutputStream封裝了DFSOutputStream數(shù)據(jù)被分成一個(gè)個(gè)分包分包被放入DFSOutputStream對象的內(nèi)部隊(duì)列DFSOutputStream向名稱節(jié)點(diǎn)申請保存數(shù)據(jù)塊的若干數(shù)據(jù)節(jié)點(diǎn)這些數(shù)據(jù)節(jié)點(diǎn)形成一個(gè)數(shù)據(jù)流管道隊(duì)列中的分包最后被打包成數(shù)據(jù)包發(fā)往數(shù)據(jù)流管道中的第一個(gè)數(shù)據(jù)節(jié)點(diǎn)第一個(gè)數(shù)據(jù)節(jié)點(diǎn)將數(shù)據(jù)包發(fā)送到第二個(gè)節(jié)點(diǎn)依此類推,形成“流水線復(fù)制”為了保證節(jié)點(diǎn)數(shù)據(jù)準(zhǔn)確,接收到數(shù)據(jù)的數(shù)據(jù)節(jié)點(diǎn)要向發(fā)送者發(fā)送“確認(rèn)包”確認(rèn)包沿著數(shù)據(jù)流管道逆流而上,經(jīng)過各個(gè)節(jié)點(diǎn)最終到達(dá)客戶端客戶端收到應(yīng)答時(shí),它將對應(yīng)的分包從內(nèi)部隊(duì)列移除DFSOutputStream調(diào)用ClientPplete()方法通知名稱節(jié)點(diǎn)關(guān)閉文件3.7HDFS編程實(shí)踐學(xué)習(xí)HDFS編程實(shí)踐,具體請參見廈門大學(xué)數(shù)據(jù)實(shí)驗(yàn)室建設(shè)的中國高校大數(shù)據(jù)課程公共服務(wù)平臺上的技術(shù)文章:《大數(shù)據(jù)技術(shù)原理與應(yīng)用第三章Hadoop分布式文件系統(tǒng)學(xué)習(xí)指南》訪問地址:/blog/290-2/3.7HDFS編程實(shí)踐Hadoop提供了關(guān)于HDFS在Linux操作系統(tǒng)上進(jìn)行文件操作的常用Shell命令以及JavaAPI。同時(shí)還可以利用Web界面查看和管理Hadoop文件系統(tǒng)備注:Hadoop安裝成功后,已經(jīng)包含HDFS和MapReduce,不需要額外安裝。而HBase等其他組件,則需要另外下載安裝。在學(xué)習(xí)HDFS編程實(shí)踐前,我們需要啟動(dòng)Hadoop。執(zhí)行如下命令:3.7.1 HDFS常用命令HDFS有很多shell命令,其中,fs命令可以說是HDFS最常用的命令利用該命令可以查看HDFS文件系統(tǒng)的目錄結(jié)構(gòu)、上傳和下載數(shù)據(jù)、創(chuàng)建文件等。該命令的用法為:hadoopfs[genericOptions][commandOptions]備注:Hadoop中有三種Shell命令方式:hadoopfs適用于任何不同的文件系統(tǒng),比如本地文件系統(tǒng)和HDFS文件系統(tǒng)
hadoopdfs只能適用于HDFS文件系統(tǒng)
hdfsdfs跟hadoopdfs的命令作用一樣,也只能適用于HDFS文件系統(tǒng)3.7.1 HDFS常用命令實(shí)例:hadoopfs-ls<path>:顯示<path>指定的文件的詳細(xì)信息hadoopfs-mkdir<path>:創(chuàng)建<path>指定的文件夾3.7.1 HDFS常用命令實(shí)例:hadoopfs-cat<path>:將<path>指定的文件的內(nèi)容輸出到標(biāo)準(zhǔn)輸出(stdout)hadoopfs-copyFromLocal<localsrc><dst>:將本地源文件<localsrc>復(fù)制到路徑<dst>指定的文件或文件夾中3.7.2 HDFS的Web界面在配置好Hadoop集群之后,可以通過瀏覽器登錄“http://[NameNodeIP]:50070”訪問HDFS文件系統(tǒng)通過Web界面的“Browsethefilesystem”查看文件“hdfs://localhost/home/administrator/tempfile/file1.txt”3.7.3 HDFS常用JavaAPI及應(yīng)用實(shí)例利用JavaAPI與HDFS進(jìn)行交互實(shí)例:利用hadoop的javaapi檢測偽分布式文件系統(tǒng)HDFS上是否存在某個(gè)文件?準(zhǔn)備工作:在Ubuntu系統(tǒng)中安裝和配置Eclipse第一步:放置配置文件到當(dāng)前工程下面(eclipse工作目錄的bin文件夾下面)第二步:編寫實(shí)現(xiàn)代碼具體請參見:《大數(shù)據(jù)技術(shù)原理與應(yīng)用第三章Hadoop分布式文件系統(tǒng)學(xué)習(xí)指南》訪問地址:/blog/290-2/3.7.3 HDFS常用JavaAPI及應(yīng)用實(shí)例利用JavaAPI進(jìn)行交互,可以使用軟件Eclipse編寫Java程序。(1)在Ubuntu中安裝Eclipse利用Ubuntu左側(cè)邊欄自帶的軟件中心安裝軟件,在Ubuntu左側(cè)邊欄打開軟件中心3.7.3 HDFS常用JavaAPI及應(yīng)用實(shí)例打開軟件中心后,呈現(xiàn)如下界面3.7.3 HDFS常用JavaAPI及應(yīng)用實(shí)例在軟件中心搜索欄輸入“ec”,軟件中心會自動(dòng)搜索相關(guān)的軟件3.7.3 HDFS常用JavaAPI及應(yīng)用實(shí)例點(diǎn)擊如下圖中Eclipse,進(jìn)行安裝3.7.3 HDFS常用JavaAPI及應(yīng)用實(shí)例安裝需要管理員權(quán)限,Ubuntu系統(tǒng)需要用戶認(rèn)證,彈出“認(rèn)證”窗口,請輸入當(dāng)前用戶的登錄密碼3.7.3 HDFS常用JavaAPI及應(yīng)用實(shí)例ubuntu便會進(jìn)入如下圖的安裝過程中,安裝結(jié)束后安裝進(jìn)度條便會消失。3.7.3 HDFS常用JavaAPI及應(yīng)用實(shí)例點(diǎn)擊Ubuntu左側(cè)邊欄的搜索工具,輸入“ec”,自動(dòng)搜索已經(jīng)安裝好的相關(guān)軟件,打開Eclipse3.7.3 HDFS常用JavaAPI及應(yīng)用實(shí)例(2)在Eclipse創(chuàng)建項(xiàng)目第一次打開Eclipse,需要填寫workspace(工作空間),用來保存程序所在的位置,這里按照默認(rèn),不需要改動(dòng),如下圖3.7.3 HDFS常用JavaAPI及應(yīng)用實(shí)例點(diǎn)擊“OK”按鈕,進(jìn)入Eclipse軟件。開始創(chuàng)建項(xiàng)目,選擇頂部菜單File—>New—>JavaProject,如下圖3.7.3 HDFS常用JavaAPI及應(yīng)用實(shí)例輸入項(xiàng)目名稱,本教程輸入的項(xiàng)目名稱是“Dblab”,其他不用改動(dòng),點(diǎn)擊“Finish”按鈕即可。3.7.3 HDFS常用JavaAPI及應(yīng)用實(shí)例為項(xiàng)目加載所需要用到的jar包如何獲取jar包JavaAPI所在的jar包都在已經(jīng)安裝好的hadoop文件夾里,路
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年聲學(xué)懸浮物監(jiān)測儀合作協(xié)議書
- 2025年基礎(chǔ)機(jī)械:液壓件合作協(xié)議書
- 2025年沼氣集中供氣系統(tǒng)合作協(xié)議書
- 2025年產(chǎn)品特許經(jīng)營合同常用版(4篇)
- 2025年二手房東房屋租賃合同標(biāo)準(zhǔn)版本(4篇)
- 2025年九年級音樂教師工作總結(jié)第二學(xué)期(二篇)
- 2025年買賣房產(chǎn)合同標(biāo)準(zhǔn)版本(2篇)
- 2025年個(gè)人房屋租賃合同協(xié)議參考樣本(三篇)
- 2025年臨時(shí)勞動(dòng)協(xié)議標(biāo)準(zhǔn)范文(2篇)
- 2025年企業(yè)勞動(dòng)員工勞動(dòng)合同模板(2篇)
- 高中學(xué)生宿舍樓建設(shè)項(xiàng)目可行性研究報(bào)告
- 2024-2025學(xué)年物理人教版八年級上冊-6.4-密度的應(yīng)用-課件
- 礦山應(yīng)急管理培訓(xùn)
- 維吾爾醫(yī)優(yōu)勢病種
- DB41T 2486-2023 叉車維護(hù)保養(yǎng)與自行檢查規(guī)范
- 全國教學(xué)設(shè)計(jì)大賽一等獎(jiǎng)英語七年級上冊(人教2024年新編)《Unit 2 Were Family!》單元教學(xué)設(shè)計(jì)
- 三相四線及三相三線錯(cuò)誤接線向量圖分析及更正
- 白酒業(yè)務(wù)員考勤管理制度
- 【獨(dú)家揭秘】2024年企業(yè)微信年費(fèi)全解析:9大行業(yè)收費(fèi)標(biāo)準(zhǔn)一覽
- 家庭法律服務(wù)行業(yè)市場突圍建議書
- 高一數(shù)學(xué)同步優(yōu)品講練課件(人教A版2019必修第一冊)3.2 函數(shù)的基本性質(zhì)(課時(shí)3 函數(shù)的奇偶性)(課件)
評論
0/150
提交評論