版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
項(xiàng)目三Hadoop分布式文件系統(tǒng)操作CONTENTS目錄01
項(xiàng)目導(dǎo)讀02
知識(shí)目標(biāo)03
技能目標(biāo)04
素質(zhì)(思政)目標(biāo)05
任務(wù)一HDFS命令行操作CONTENTS目錄06
任務(wù)二配置HDFSJava開發(fā)環(huán)境07
任務(wù)三HDFSJavaAPI操作08
項(xiàng)目總結(jié)09
項(xiàng)目考核項(xiàng)目導(dǎo)讀01項(xiàng)目導(dǎo)讀HDFS:大數(shù)據(jù)存儲(chǔ)解決方案大數(shù)據(jù)時(shí)代必須解決海量數(shù)據(jù)的高效存儲(chǔ)問題,為此,Hadoop分布式文件系統(tǒng)(HadoopDistributedFileSystem)HDFS應(yīng)運(yùn)而生,是針對(duì)GFS的開源實(shí)現(xiàn),并和MapReduce一起成為Hadoop的核心組成部分,它是Hadoop兩大核心組成部分之一,提供了在廉價(jià)服務(wù)器集群中進(jìn)行大規(guī)模分布式文件存儲(chǔ)的能力。HDFS具有很好的容錯(cuò)能力,并且兼容廉價(jià)的硬件設(shè)備,因此可以以較低的成本利用現(xiàn)有機(jī)器實(shí)現(xiàn)大流量和大數(shù)據(jù)量的讀寫。HDFS支持流數(shù)據(jù)讀取和處理超大規(guī)模文件,并能夠運(yùn)行在由廉價(jià)的普通機(jī)器組成的集群上,這主要得益于HDFS在設(shè)計(jì)之初就充分考慮了實(shí)際應(yīng)用環(huán)境的特點(diǎn),那就是,硬件出錯(cuò)在普通服務(wù)器集群中是一種常態(tài),而不是異常。因此,HDFS在設(shè)計(jì)上采取了多種機(jī)制保證在硬件出錯(cuò)的環(huán)境中實(shí)現(xiàn)數(shù)據(jù)的完整性知識(shí)目標(biāo)02知識(shí)目標(biāo)
了解HDFS基本概念
了解HDFS產(chǎn)生的背景
熟悉HDFS架構(gòu)
熟悉HDFS
熟悉HDFSJavaAPI操作技能目標(biāo)03技能目標(biāo)
掌握HDFS的Java環(huán)境的配置
掌握HDFSShell操作
掌握HDFSJavaAPI操作素質(zhì)(思政)目標(biāo)04素質(zhì)(思政)目標(biāo)培養(yǎng)嚴(yán)謹(jǐn)細(xì)致的工匠精神厚植技術(shù)報(bào)國夢培養(yǎng)不驕不躁的工匠心態(tài)培養(yǎng)保密意識(shí)培養(yǎng)網(wǎng)絡(luò)安全意識(shí)任務(wù)一HDFS命令行操作05任務(wù)工單任務(wù)描述目前3臺(tái)虛擬機(jī)上的Linux、JDK環(huán)境已經(jīng)配置好了,現(xiàn)在我們需要實(shí)訓(xùn)HDFSShell的操作任務(wù)工單:任務(wù)準(zhǔn)備單擊此處添加正文
全班學(xué)生以4人左右為一組,各組選出組長。請(qǐng)組長組織組員查找相關(guān)資料,并組織討論和匯總
問題1:什么是HDFS
問題2:HDFS有哪些相關(guān)的概念
問題3:HDFS的Web界面是什么必備知識(shí)技能:一、HDFS背景及特點(diǎn)HDFS概述HDFS全稱為HadoopDistributedFileSystem(Hadoop分布式文件系統(tǒng)),是ApacheHadoop項(xiàng)目的一部分,它是一個(gè)開源的分布式文件系統(tǒng),由ApacheSoftwareFoundation維護(hù)。HDFS是Hadoop生態(tài)系統(tǒng)中的核心組件,旨在為大數(shù)據(jù)處理提供可靠的存儲(chǔ)解決方案。它基于Google的Bigtable論文設(shè)計(jì),并且是Hadoop項(xiàng)目中最基礎(chǔ)的服務(wù)之一。HDFS旨在解決大規(guī)模數(shù)據(jù)存儲(chǔ)和處理的問題,具有以下特點(diǎn)高容錯(cuò)性在一個(gè)大型集群中,硬件故障(如磁盤損壞、節(jié)點(diǎn)宕機(jī))是常態(tài)的。HDFS通過數(shù)據(jù)塊副本機(jī)制來確保在任何一個(gè)DataNode失效時(shí),數(shù)據(jù)仍然可以從其他副本節(jié)點(diǎn)訪問高吞吐量HDFS被設(shè)計(jì)用于大數(shù)據(jù)集的批處理,而非低延遲的數(shù)據(jù)訪問。這非常適合于MapReduce等大規(guī)模數(shù)據(jù)處理框架可擴(kuò)展性HDFS能夠輕松地通過添加更多的節(jié)點(diǎn)來擴(kuò)展存儲(chǔ)容量和處理能力。這樣,隨著數(shù)據(jù)量的增長,可以方便地添加硬件資源而無需停機(jī)維護(hù)流式數(shù)據(jù)訪問HDFS優(yōu)化了大文件的流式讀寫操作,支持單次寫入、多次讀取的訪問模式,這對(duì)于日志處理和數(shù)據(jù)分析任務(wù)尤為重要數(shù)據(jù)一致性每個(gè)數(shù)據(jù)塊通常會(huì)有多個(gè)副本(默認(rèn)情況下是三個(gè)),這些副本分布在不同的DataNode上,以保證數(shù)據(jù)的可用性和一致性必備知識(shí)技能:一、HDFS背景及特點(diǎn)
高可用性通過配置SecondaryNameNode或利用HDFS的高可用性(HA)機(jī)制,可在NameNode失效時(shí)快速切換到備用節(jié)點(diǎn),確保文件系統(tǒng)的穩(wěn)定運(yùn)行易用性和兼容性:HDFS提供了簡單易用的API接口,使得開發(fā)者可以方便地進(jìn)行文件的讀寫操作低成本存儲(chǔ)HDFS設(shè)計(jì)的初衷之一就是利用廉價(jià)的通用硬件,而不是依賴昂貴的專用存儲(chǔ)設(shè)備。這極大地降低了大規(guī)模數(shù)據(jù)存儲(chǔ)的成本靈活的架構(gòu)設(shè)計(jì)HDFS支持多種存儲(chǔ)策略(如冷熱數(shù)據(jù)分層存儲(chǔ)),允許根據(jù)數(shù)據(jù)訪問頻率選擇不同的存儲(chǔ)介質(zhì),以優(yōu)化存儲(chǔ)成本和訪問性能。HDFS的設(shè)計(jì)允許開發(fā)者編寫和集成自定義的插件,以滿足特定的業(yè)務(wù)需求必備知識(shí)技能:二、NameNode和DataNodeNameNode角色解析
NameNode即名稱節(jié)點(diǎn),作為HDFS的主節(jié)點(diǎn),負(fù)責(zé)維護(hù)文件系統(tǒng)的一致性、元數(shù)據(jù)信息以及文件系統(tǒng)中每個(gè)數(shù)據(jù)塊的位置信息,即數(shù)據(jù)塊映射。當(dāng)客戶端請(qǐng)求訪問文件時(shí),NameNode會(huì)處理請(qǐng)求并告知客戶端數(shù)據(jù)塊的位置信息,但NameNode本身不參與數(shù)據(jù)的傳輸NameNode職責(zé)與數(shù)據(jù)結(jié)構(gòu)
NameNode負(fù)責(zé)管理分布式文件系統(tǒng)的命名空間,并維護(hù)兩個(gè)核心的數(shù)據(jù)結(jié)構(gòu):FsImage(文件系統(tǒng)映像)和EditLog(編輯日志)。FsImage是HDFS文件系統(tǒng)的元數(shù)據(jù)的一個(gè)永久性的檢查點(diǎn),它包含了所有目錄和文件的inode的序列化信息。簡單來說,F(xiàn)sImage文件保存了文件系統(tǒng)的目錄結(jié)構(gòu)以及每個(gè)文件和目錄的元數(shù)據(jù)信息,如文件的大小、權(quán)限、塊信息等。但是,F(xiàn)sImage并不包含文件數(shù)據(jù)塊本身的位置信息,這部分信息由數(shù)據(jù)節(jié)點(diǎn)(DataNode)維護(hù)。FsImage相當(dāng)于文件系統(tǒng)的快照,它反映了某一時(shí)刻文件系統(tǒng)的狀態(tài)。EditLog是HDFS中記錄所有文件系統(tǒng)操作的日志文件。每當(dāng)有文件系統(tǒng)操作發(fā)生時(shí),如文件的創(chuàng)建、刪除、修改等,這些操作的信息都會(huì)被記錄到EditLog中。EditLog的作用是確保文件的元數(shù)據(jù)的一致性,它是名稱節(jié)點(diǎn)恢復(fù)未提交元數(shù)據(jù)操作的依據(jù)。在名稱節(jié)點(diǎn)啟動(dòng)時(shí),會(huì)讀取EditLog文件,將其中記錄的操作應(yīng)用到內(nèi)存中的元數(shù)據(jù)上,以確保元數(shù)據(jù)是最新的必備知識(shí)技能:二、NameNode和DataNode
HDFS元數(shù)據(jù)存儲(chǔ)機(jī)制FsImage和EditLog共同構(gòu)成了名稱節(jié)點(diǎn)的元數(shù)據(jù)存儲(chǔ)機(jī)制。FsImage提供了文件系統(tǒng)的靜態(tài)視圖,而EditLog提供了動(dòng)態(tài)操作的記錄。在HDFS的正常運(yùn)行過程中,名稱節(jié)點(diǎn)會(huì)不斷地更新FsImage和EditLog,以確保文件系統(tǒng)的元數(shù)據(jù)始終是準(zhǔn)確和最新的
DataNode職責(zé)與工作機(jī)制DataNode為數(shù)據(jù)節(jié)點(diǎn),是HDFS的從節(jié)點(diǎn),負(fù)責(zé)在其本地存儲(chǔ)文件系統(tǒng)的數(shù)據(jù)塊,并處理文件的讀寫請(qǐng)求和執(zhí)行文件數(shù)據(jù)的切分、復(fù)制、備份和恢復(fù)操作。每個(gè)DataNode在其本地存儲(chǔ)文件的副本,并將數(shù)據(jù)塊的狀態(tài)信息定期報(bào)告給NameNode。同時(shí),DataNode通過心跳機(jī)制向NameNode發(fā)送其存儲(chǔ)狀態(tài),以確保名稱節(jié)點(diǎn)了解每個(gè)DataNode的當(dāng)前狀態(tài)和存儲(chǔ)的文件塊。DataNode與客戶端進(jìn)行數(shù)據(jù)交互,處理來自客戶端的讀寫請(qǐng)求必備知識(shí)技能:三、SecondaryNameNodeSecondaryNameNode功能解析SecondaryNameNode,第二名稱節(jié)點(diǎn),是HDFS的一部分,它的主要功能是輔助名稱節(jié)點(diǎn)(NameNode)的工作,提高HDFS的可靠性和效率SecondaryNameNode解決HDFS性能瓶頸SecondaryNameNode的誕生是為了解決HDFS在長時(shí)間運(yùn)行過程中可能出現(xiàn)的EditLog文件過大的問題。EditLog是名稱節(jié)點(diǎn)中記錄所有文件系統(tǒng)操作的日志文件,當(dāng)這個(gè)文件過大時(shí),名稱節(jié)點(diǎn)在啟動(dòng)和恢復(fù)過程中需要處理大量的日志信息,導(dǎo)致啟動(dòng)時(shí)間變長,影響了系統(tǒng)的可用性。為了解決這個(gè)問題,引入了第二名稱節(jié)點(diǎn),它主要負(fù)責(zé)定期合并EditLog和FsImage,減少EditLog的大小,從而縮短名稱節(jié)點(diǎn)的啟動(dòng)時(shí)間SecondaryNameNode合并原理SecondaryNameNode的工作原理是這樣的:在HDFS的正常運(yùn)行過程中,名稱節(jié)點(diǎn)會(huì)周期性地將內(nèi)存中的元數(shù)據(jù)信息寫入到FsImage文件中,同時(shí)所有的文件系統(tǒng)操作都會(huì)記錄到EditLog文件中。當(dāng)EditLog文件增長到一定大小時(shí),第二名稱節(jié)點(diǎn)會(huì)觸發(fā)一個(gè)合并過程,它將EditLog中的操作記錄應(yīng)用到FsImage文件上,形成一個(gè)新的FsImage,并將舊的EditLog文件清空。這個(gè)過程稱為“checkpoint”,可以減少啟動(dòng)時(shí)需要處理的信息量必備知識(shí)技能:三、SecondaryNameNodeHDFS冷備份機(jī)制解析除了合并EditLog和FsImage之外,第二名稱節(jié)點(diǎn)還具有冷備份的功能。它定期創(chuàng)建名稱節(jié)點(diǎn)的快照,并存儲(chǔ)這些快照以備不時(shí)之需。如果名稱節(jié)點(diǎn)發(fā)生故障,可以使用這些快照來恢復(fù)名稱節(jié)點(diǎn)的元數(shù)據(jù),保證HDFS的數(shù)據(jù)不丟失。但由于冷備份需要先停止服務(wù),在發(fā)生故障需要恢復(fù)時(shí),需要先恢復(fù)第二名稱節(jié)點(diǎn),然后再恢復(fù)主名稱節(jié)點(diǎn),這個(gè)過程可能會(huì)比較耗時(shí),且冷備份不會(huì)立即捕捉到所有的文件系統(tǒng)變更,從而增加了數(shù)據(jù)丟失的風(fēng)險(xiǎn)第二名稱節(jié)點(diǎn)作用概述總的來說,第二名稱節(jié)點(diǎn)是HDFS中的一個(gè)輔助角色,它通過合并EditLog和FsImage,減少啟動(dòng)時(shí)間,并通過冷備份機(jī)制保障了系統(tǒng)的可靠性必備知識(shí)技能:三、元數(shù)據(jù)元數(shù)據(jù)概述元數(shù)據(jù)是描述數(shù)據(jù)的數(shù)據(jù),描述了數(shù)據(jù)的特征、屬性、結(jié)構(gòu)、含義和來源等信息,可分為內(nèi)存元數(shù)據(jù)和元數(shù)據(jù)文件元數(shù)據(jù)從類型上可分為三種信息形式一是文件目錄自身的屬性,如文件名、目錄名、目錄信息、文件大小、創(chuàng)建時(shí)間等,這些信息能幫助用戶識(shí)別和控制他們的文件和目錄;二是文件內(nèi)容存儲(chǔ)相關(guān)信息,如文件塊數(shù)量、副本個(gè)數(shù)、DataNode信息,這些元數(shù)據(jù)與文件的內(nèi)容和存儲(chǔ)方式有關(guān),這些信息確保了文件的可靠存儲(chǔ)和快速訪問;三是HDFS中所有DataNode信息、用戶管理DataNode信息,如節(jié)點(diǎn)的地址、狀態(tài)、負(fù)載、健康狀況、用戶自定義的DataNode配置和管理策略等,這些信息能幫助HDFS的運(yùn)維人員監(jiān)控和管理整個(gè)文件系統(tǒng)必備知識(shí)技能:四、HDFS文件塊大小
HDFS塊存儲(chǔ)機(jī)制傳統(tǒng)的文件系統(tǒng)一般以塊為單位,以塊為單位讀寫數(shù)據(jù)進(jìn)行存儲(chǔ),HDFS同樣采用了塊的概念。在HDFS中,文件被切分成多個(gè)塊((Block)進(jìn)行存儲(chǔ),每個(gè)塊默認(rèn)大小為128MB(從Hadoop2.x版本開始)。這個(gè)大小可以根據(jù)實(shí)際需求進(jìn)行配置,但是需要考慮到磁盤傳輸速率和尋址時(shí)間等因素HDFS采用塊的概念帶來了多方面的好處,主要體現(xiàn)在以下幾個(gè)方面HDFS大規(guī)模文件存儲(chǔ)策略(1)支持大規(guī)模文件存儲(chǔ)。通過將文件分割成多個(gè)塊,HDFS能夠存儲(chǔ)和管理比單個(gè)節(jié)點(diǎn)存儲(chǔ)容量大得多的文件。這種分塊策略使得文件可以被分散存儲(chǔ)在多個(gè)節(jié)點(diǎn)上,從而突破了單個(gè)節(jié)點(diǎn)存儲(chǔ)容量的限制簡化系統(tǒng)設(shè)計(jì)(2)簡化系統(tǒng)設(shè)計(jì)。塊的大小是固定的,這簡化了存儲(chǔ)管理和元數(shù)據(jù)的管理。由于元數(shù)據(jù)不需要與文件塊一起存儲(chǔ),可以由其他系統(tǒng)負(fù)責(zé)管理,因此減輕了NameNode的負(fù)擔(dān)HDFS數(shù)據(jù)備份與容錯(cuò)(3)適合數(shù)據(jù)備份。HDFS通過在多個(gè)DataNode上存儲(chǔ)文件的多個(gè)副本,提供了數(shù)據(jù)備份和容錯(cuò)能力。默認(rèn)情況下,每個(gè)數(shù)據(jù)塊會(huì)有多個(gè)副本,這些副本通常存儲(chǔ)在不同的節(jié)點(diǎn)上,以防止數(shù)據(jù)丟失必備知識(shí)技能:五、HDFS組成架構(gòu)
HDFS組成架構(gòu)HDFS采用主從架構(gòu),由一個(gè)NameNode和多個(gè)DataNode組成,如圖3-1-1NameNode負(fù)責(zé)管理文件系統(tǒng)的元數(shù)據(jù),包括文件目錄結(jié)構(gòu)、文件塊的位置和副本信息DataNode是實(shí)際存儲(chǔ)數(shù)據(jù)塊的工作節(jié)點(diǎn),負(fù)責(zé)數(shù)據(jù)塊的讀寫操作文件寫入過程(1)客戶端請(qǐng)求。當(dāng)客戶端請(qǐng)求寫入文件時(shí),首先將請(qǐng)求發(fā)送到NameNode(2)數(shù)據(jù)塊分配。NameNode根據(jù)文件大小將其劃分為若干數(shù)據(jù)塊,并為每個(gè)數(shù)據(jù)塊分配DataNode(3)數(shù)據(jù)傳輸??蛻舳藢?shù)據(jù)塊按順序?qū)懭敕峙涞腄ataNode。為了提高容錯(cuò)性,每個(gè)數(shù)據(jù)塊會(huì)被復(fù)制到多個(gè)DataNode上(默認(rèn)三副本)(4)確認(rèn)機(jī)制。每個(gè)DataNode在成功接收到數(shù)據(jù)塊后,會(huì)向客戶端發(fā)送確認(rèn),直至所有副本都成功寫入文件讀取過程(1)客戶端請(qǐng)求??蛻舳苏?qǐng)求讀取文件時(shí),向NameNode請(qǐng)求文件塊位置信息(2)數(shù)據(jù)塊定位。NameNode返回?cái)?shù)據(jù)塊的存儲(chǔ)位置,客戶端直接與相應(yīng)的DataNode通信以讀取數(shù)據(jù)(3)數(shù)據(jù)傳輸??蛻舳藦腄ataNode中并行讀取數(shù)據(jù)塊,以提高讀取效率數(shù)據(jù)塊管理(1)副本管理。NameNode定期檢查數(shù)據(jù)塊的副本狀態(tài),確保每個(gè)數(shù)據(jù)塊有足夠的副本。如果某些副本丟失或損壞,NameNode會(huì)觸發(fā)重新復(fù)制過程(2)數(shù)據(jù)塊心跳。DataNode定期向NameNode發(fā)送心跳和數(shù)據(jù)塊報(bào)告,報(bào)告自身的狀態(tài)和存儲(chǔ)的數(shù)據(jù)塊信息必備知識(shí)技能:五、HDFS組成架構(gòu)
故障處理
(1)NameNode故障。NameNode是HDFS的單點(diǎn)故障,但通過配置SecondaryNameNode或高可用性(HA)機(jī)制,可以提高其可靠性。SecondaryNameNode定期從NameNode獲取元數(shù)據(jù)快照和日志,并合并以生成新的元數(shù)據(jù)鏡像
(2)DataNode故障。DataNode故障時(shí),NameNode可以通過其他副本恢復(fù)數(shù)據(jù)塊,并將新的副本分配給其他健康的DataNode
通過上述架構(gòu)和運(yùn)行機(jī)制,HDFS實(shí)現(xiàn)了大規(guī)模數(shù)據(jù)存儲(chǔ)和處理的高效性和可靠性,為分布式計(jì)算提供了堅(jiān)實(shí)的基礎(chǔ)必備知識(shí)技能:五、HDFS優(yōu)缺點(diǎn)
01HDFS優(yōu)點(diǎn)(1)高容錯(cuò)性。HDFS設(shè)計(jì)之初就考慮了高容錯(cuò)性,通過將數(shù)據(jù)副本存儲(chǔ)在不同的節(jié)點(diǎn)上,即使在節(jié)點(diǎn)故障的情況下,數(shù)據(jù)依然可以被訪問。默認(rèn)情況下,每個(gè)數(shù)據(jù)副本有三個(gè),副本之間的數(shù)據(jù)分布在不同的節(jié)點(diǎn)上(2)高擴(kuò)展性。HDFS能夠支持大規(guī)模集群,并且可以隨著需求的增長而擴(kuò)展。它能夠處理PB級(jí)別的數(shù)據(jù),適用于大規(guī)模數(shù)據(jù)處理(3)高吞吐量。HDFS適合處理大量數(shù)據(jù),它的設(shè)計(jì)目標(biāo)是提供高吞吐量,而不是低延遲的數(shù)據(jù)訪問,這對(duì)于MapReduce等計(jì)算模型非常有用(4)數(shù)據(jù)本地化。HDFS可以在運(yùn)行計(jì)算任務(wù)的節(jié)點(diǎn)上存儲(chǔ)數(shù)據(jù),這樣數(shù)據(jù)就不需要在網(wǎng)絡(luò)中傳輸,從而提高了數(shù)據(jù)處理的速度
02HDFS缺點(diǎn)HDFS只設(shè)置唯一一個(gè)名稱節(jié)點(diǎn),這樣做雖然大大簡化了系統(tǒng)設(shè)計(jì),但也帶來了一些明顯的局限性(1)單點(diǎn)故障問題。雖然HDFS設(shè)計(jì)為具有高容錯(cuò)性,但是NameNode仍然是單點(diǎn)故障點(diǎn)。如果NameNode發(fā)生故障,整個(gè)文件系統(tǒng)將不可用(2)性能的瓶頸。整個(gè)分布式文件系統(tǒng)的吞吐量,受限于單個(gè)名稱節(jié)點(diǎn)的吞吐量(3)隔離問題。由于集群中只有一個(gè)名稱節(jié)點(diǎn),只有一個(gè)命名空間,因此,無法對(duì)不同應(yīng)用程序進(jìn)行隔離(4)命名空間的限制。名稱節(jié)點(diǎn)是保存在內(nèi)存中的,因此,名稱節(jié)點(diǎn)能夠容納的對(duì)象(文件、塊)的個(gè)數(shù)會(huì)受到內(nèi)存空間大小的限制任務(wù)實(shí)施:一、基本命令操作
用戶類型標(biāo)識(shí)符說明以“$”開頭時(shí),代表當(dāng)前用戶為普通用戶;以“#”開頭時(shí),代表當(dāng)前用戶為root用戶。命令行中的“$”或者“#”是不需要輸入的HDFS操作命令概覽操作命令是以“hdfsdfs”開頭的命令。通過這些命令,用戶可以完成HDFS文件的復(fù)制、刪除和查找等操作hdfsdfs[通用選項(xiàng)]HDFSDFSCommandshdfs是Hadoop系統(tǒng)在Linux系統(tǒng)中的主命令;dfs是子命令,表示執(zhí)行文件系統(tǒng)操作??梢栽诮K端輸入hdfsdfs,查看總共支持哪些操作,上述命令執(zhí)行后,會(huì)顯示類似如圖3-1-2的結(jié)果(這里只列出部分命令)步驟1:啟動(dòng)Hadoop集群,進(jìn)入Hadoop主目錄,執(zhí)行如下命令sbin/start-dfs.sh任務(wù)實(shí)施:一、基本命令操作
sbin/start-yarn.sh
步驟2:創(chuàng)建目錄
hdfsdfs-mkdir[-p]<paths>
[-p]:表示如果父目錄不存在,先創(chuàng)建父目錄
例如,在根目錄下新建一個(gè)test目錄
hdfsdfs-mkdir-p/test任務(wù)實(shí)施:一、基本命令操作
步驟3:列出指定的文件和目錄
hdfsdfs-ls[-d][-h][-R]<paths>
[-d]:返回path
[-h]:顯示文件大小
[-R]:級(jí)聯(lián)顯示paths下的文件
例如,級(jí)聯(lián)列出目錄下的目錄和文件(包括子目錄、子文件)任務(wù)實(shí)施:一、基本命令操作
hdfsdfs-ls-R/步驟4:上傳文件hdfsdfs-put[-f][-p]<localsrc><dst>HDFSCopyCommandhdfsdfs-copyFromLocal[-f][-p][-l]<localsrc><dst>HDFS文件上傳命令put或copyFromLocal命令是將本地文件上傳到HDFS。localsrc表示本地文件的路徑,dst表示保存在HDFS上的路徑,例如,將data1.txt上傳到HDFS的/test下,采用如下命令hdfsdfs-putdata1.txt/test/data1.txt任務(wù)實(shí)施:一、基本命令操作
或采用如下命令HDFSCopyCommandhdfsdfs-copyFromLocaldata1.txt/test/data1.txt將本地文件移動(dòng)到HDFShdfsdfs-moveFromLocal<localsrc><dst>HDFSCopyCommandwithDeletion與“hdfsdfs-copyFromLocal”不同的是,此命令將文件復(fù)制到HDFS后,本地的文件會(huì)被刪除步驟5:下載文件任務(wù)實(shí)施:一、基本命令操作
hdfsdfs-get[-p]<src><localdst>HDFSDataTransferhdfsdfs-copyToLocal[-p][-ignoreCrc][-crc]<src><localdst>HDFS文件下載get或copyToLocal命令把文件從分布式系統(tǒng)復(fù)制到本地,src表示HDFS中文件的完整路徑,localdst為要保存在本地的文件名或目錄的路徑。例如,將HDFS中的/test/data1.txt文件下載并保存到本地并更名為111.txthdfsdfs-get/test/data1.txt.111.txt步驟6:查看文件hdfsdfs-cat/test[-ignoreCrc]<src>任務(wù)實(shí)施:一、基本命令操作
hdfsdfs-tail[-f]<file>-ignoreCrc:忽略循環(huán)檢驗(yàn)失敗的文件hdfsdfs-cat/test/data1.txt步驟7:追寫文件hdfsdfs-appendToFile<localsrc><dst>本地文件寫入命令該命令將localsrc指向的本地文件內(nèi)容寫入目標(biāo)文件dst。如果localsrc是“-”,表示數(shù)據(jù)來自鍵盤輸入,“Ctrl+C”組合鍵結(jié)束輸入任務(wù)實(shí)施:一、基本命令操作
步驟8:刪除目錄或者文件
hdfsdfs-rm[-f][-r]<src>
-f:如果要?jiǎng)h除的文件不存在,不顯示錯(cuò)誤信息
-r/R:級(jí)聯(lián)刪除目錄下所有的文件和子目錄文件
步驟9:刪除HDFS中的/test/data1.txt文件
hdfsdfs-rm/test/data1.txt任務(wù)實(shí)施:一、基本命令操作
步驟10:顯示占用的磁盤空間大小hdfsdfs-du[-s][-h]<path>按字節(jié)顯示指定目錄所占空間大小-du,統(tǒng)計(jì)目錄的大小信息,d指disk磁盤-s:顯示指定目錄下文件總的大小查看HDFS目錄大小在HDFS命令行中輸入“hdfsdfs-du-sh*”可以查看每個(gè)目錄的大小。此舉可以快速定位大文件所存在的位置,以下命令為查看/test目錄大小任務(wù)實(shí)施:一、基本命令操作hdfsdfs-du-sh/test步驟11:HDFS中的文件復(fù)制hdfsdfs-cp[-f][-p]<src><dst>-f:如果目標(biāo)文件存在,將強(qiáng)行覆蓋-p:將保存文件的屬性以下命令演示的是將根目錄””下的file1文件復(fù)制到”/root”目錄下并重命名為file2任務(wù)實(shí)施:一、基本命令操作
dfsdfs-cp/file1/root/file2單擊此處添加項(xiàng)正文
步驟12:HDFS中的文件移動(dòng)(改名)單擊此處添加項(xiàng)正文
hdfsdfs-mv<src><dst>單擊此處添加項(xiàng)正文
移動(dòng)并重命名文件示例以下命令演示的是將根目錄””下的file1文件移動(dòng)到”/home/master”目錄下并重命名為file2
hdfsfs-mv/file1/home/master/file2單擊此處添加項(xiàng)正文
步驟13:HDFS中的文件合并后下載單擊此處添加項(xiàng)正文任務(wù)實(shí)施:一、基本命令操作
hdfsdfs-getmerge[-nl]<src><localdst>步驟14:統(tǒng)計(jì)hdfsdfs-count[-q][-h]<path>步驟15:設(shè)置擴(kuò)展屬性HDFSSetAttributehdfsdfs-setfattr{-nname[-vvalue]|-xname}<path>HDFS屬性操作指南其中,采用hdfsdfs-setfattr-nname[-vvalue]<path>可以設(shè)置屬性。采用hdfsdfs-setfattr-xname<path>可以刪除屬性任務(wù)實(shí)施:一、基本命令操作
-n:指定屬性的名稱(設(shè)置屬性時(shí)用此參數(shù))
-v:指定屬性的值
-x:指定屬性的名稱(刪除屬性時(shí)用此參數(shù))
步驟16:判斷文件是否存在
hdfsdfs-e/test/1.txt
echo$任務(wù)實(shí)施:一、基本命令操作
hdfsdfs-helptest步驟17:設(shè)置副本數(shù)量setrepSetrepCommandOverviewsetrep命令用于設(shè)置HDFS中文件或目錄的副本因子(replicationfactor),即數(shù)據(jù)塊的副本數(shù)量。命令語法格式如下hdfsdfs-setrep[-R][-w]<numReplicas><path>-R:遞歸設(shè)置,對(duì)目錄下的所有文件和子目錄生效-w:等待副本設(shè)置操作完成(同步模式)任務(wù)實(shí)施:一、基本命令操作<numReplicas>目標(biāo)副本數(shù)量(通常為1-3,取決于集群配置)<path>HDFS文件或目錄路徑以下命令演示了設(shè)置單個(gè)文件的副本因子#將文件data.txt設(shè)置為2個(gè)副本hdfsdfs-setrep2/test/data.txt任務(wù)實(shí)施:一、基本命令操作
#設(shè)置archive.log副本為1
hdfsdfs-setrep1/test/archive.log任務(wù)實(shí)施:二、管理命令操作
管理命令是以“hdfsdfsadmin”開頭的命令。通過這些命令,用戶可以管理HDFShdfsdfsadmin[通用選項(xiàng)]HadoopDFS命令概述dfs是Hadoop系統(tǒng)在Linux系統(tǒng)中的主命令;dfsadmin是子命令,表示執(zhí)行文件系統(tǒng)管理的操作;通用選項(xiàng)由HDFS管理命令和參數(shù)組成步驟1:報(bào)告文件系統(tǒng)的基本信息和統(tǒng)計(jì)信息任務(wù)實(shí)施:二、管理命令操作
hdfsdfsadmin-report
步驟2:查看拓?fù)?/p>
hdfsdfsadmin-printTopology任務(wù)二配置HDFSJava開發(fā)環(huán)境06任務(wù)描述
配置Windows下Hadoop及Java開發(fā)環(huán)境目前3臺(tái)虛擬機(jī)上的Linux、JDK環(huán)境已經(jīng)配置好了,現(xiàn)在我們需要配置Windows下的Hadoop,Eclipse/IDEA+Maven的Java開發(fā)環(huán)境,以便后續(xù)實(shí)現(xiàn)Java與HDFS的交互任務(wù)準(zhǔn)備
01全班學(xué)生以4人左右為一組,各組選出組長。請(qǐng)組長組織組員查找相關(guān)資料,并組織討論和匯總
02問題1:如何確認(rèn)在Windows系統(tǒng)中已配置好Hadoop環(huán)境
03問題2:怎樣在IDEA中創(chuàng)建一個(gè)Maven項(xiàng)目
04問題3:編寫一個(gè)HDFSAPI的具體步驟
05問題4:怎么判斷在IDEA中連接到了HDFS必備知識(shí)技能環(huán)境變量環(huán)境變量解釋環(huán)境變量一般是指在操作系統(tǒng)中用來指定操作系統(tǒng)運(yùn)行環(huán)境的一些參數(shù)。環(huán)境變量是在操作系統(tǒng)中一個(gè)具有特定名字的對(duì)象,它包含了一個(gè)或者多個(gè)應(yīng)用程序所使用到的信息。例如:Windows和DOS操作系統(tǒng)中的path環(huán)境變量,當(dāng)要求系統(tǒng)運(yùn)行一個(gè)程序而沒有告訴它程序所在的完整路徑時(shí),系統(tǒng)除了在當(dāng)前目錄下面尋找此程序外,還應(yīng)到path中指定的路徑去找。用戶通過設(shè)置環(huán)境變量,更好地運(yùn)行進(jìn)程。也就是說,操作系統(tǒng)在運(yùn)行程序的時(shí)候,會(huì)先到當(dāng)前目錄下查找,如果沒有找到,然后會(huì)到path環(huán)境變量中查找,如果還是沒有找到會(huì)提示你命令不存在或者無法執(zhí)行該命令Windows下設(shè)置環(huán)境變量
Windows環(huán)境變量分類Windows環(huán)境變量分為系統(tǒng)變量和用戶變量,系統(tǒng)變量針對(duì)所有的用戶起作用,而用戶變量只對(duì)當(dāng)前用戶起作用Windows下設(shè)置環(huán)境變量:1.用戶變量和系統(tǒng)變量的優(yōu)先級(jí)Path變量
環(huán)境變量不區(qū)分大小寫,path、PATH、Path都表示指定可執(zhí)行文件的搜索路徑。echo%path%可以得到path變量的值(系統(tǒng)變量中的值與用戶變量中的值的組合),用戶變量path內(nèi)容會(huì)跟在系統(tǒng)變量path內(nèi)容的后面對(duì)于Path變量,系統(tǒng)環(huán)境變量優(yōu)先級(jí)高于用戶環(huán)境變量。Windows系統(tǒng)在執(zhí)行用戶命令時(shí),若用戶未給出文件的絕對(duì)路徑,則首先在當(dāng)前目錄下尋找相應(yīng)的可執(zhí)行文件。然后在系統(tǒng)變量的path、PATH、Path路徑中查找,如果找不到,再到用戶變量的path、PATH、Path路徑中查找Windows對(duì)于Path變量的處理方式是,將用戶變量的Path添加到系統(tǒng)變量Path后面。Windows在查找指令的時(shí)候,是按Path中的路徑從前往后找,直至在某個(gè)路徑中找到了該指令。如果系統(tǒng)變量Path中有對(duì)應(yīng)指令的話,Windows就不會(huì)再去用戶變量Path中查找其他普通變量
如果在用戶變量和系統(tǒng)變量中創(chuàng)建同名變量,那么Windows會(huì)將用戶變量覆蓋系統(tǒng)變量。在cmd中輸出的是用戶變量中該變量的值。即,對(duì)于普通變量,用戶環(huán)境變量優(yōu)先級(jí)高于系統(tǒng)環(huán)境變量。系統(tǒng)會(huì)先檢查用戶變量,之后再檢查系統(tǒng)變量Windows下常見環(huán)境變量
%PATH%:系統(tǒng)指定可執(zhí)行文件的搜索路徑%PATHEXT%:系統(tǒng)返回操作系統(tǒng)認(rèn)為可執(zhí)行的文件擴(kuò)展名的列表%TEMP%(%TMP%)系統(tǒng)返回對(duì)當(dāng)前登錄用戶可用的應(yīng)用程序所使用的默認(rèn)臨時(shí)目錄。有些應(yīng)用程序需要TEMP,而其他應(yīng)用程序則需要TMP%COMSPEC%:系統(tǒng)返回命令行解釋器可執(zhí)行程序的準(zhǔn)確路徑%OS%:系統(tǒng)返回操作系統(tǒng)的名稱%WINDIR%:系統(tǒng)返回操作系統(tǒng)目錄的位置Windows下常見環(huán)境變量01%USERNAME%:系統(tǒng)返回當(dāng)前登錄用戶的名稱02%PROCESSOR_REVISION%:系統(tǒng)返回處理器修訂號(hào)03%PROCESSOR_LEVEL%:系統(tǒng)返回計(jì)算機(jī)上安裝的處理器的型號(hào)04%PROCESSOR_IDENTIFIER%:系統(tǒng)返回處理器說明05%PROCESSOR_ARCHITECTURE%:系統(tǒng)返回處理器的芯片體系結(jié)構(gòu)06%NUMBER_OF_PROCESSORS%:系統(tǒng)指定安裝在計(jì)算機(jī)上的處理器的數(shù)目任務(wù)實(shí)施Windows下Hadoop配置
復(fù)制HadoopJar包至非中文路徑根據(jù)自己計(jì)算機(jī)的操作系統(tǒng)拷貝對(duì)應(yīng)的編譯后的hadoopjar包到非中文路徑(例如:D:\Develop\hadoop-2.7.2)步驟1配置HADOOP_HOME環(huán)境變量,配置HADOOP_HOME的值為hadoop的主目錄路徑,如圖3-2-1所示步驟2:配置Path環(huán)境變量值為%HADOOP_HOME%\bin,如圖3-2-2所示配置IDEA開發(fā)環(huán)境
步驟1在IDEA中創(chuàng)建一個(gè)maven項(xiàng)目,選擇File->New->Project菜單命令,如圖3-2-3,彈出“NewProject”對(duì)話框,如圖3-2-4創(chuàng)建Maven項(xiàng)目流程在“NewProject”對(duì)話框界面,左側(cè)列表選擇“Maven”項(xiàng),單擊“Next”按鈕,彈出“項(xiàng)目名稱”對(duì)話框,如圖3-2-5創(chuàng)建項(xiàng)目流程在“項(xiàng)目名稱”對(duì)話框,在“Name”編輯框輸入項(xiàng)目名稱,單擊“Finish”按鈕,完成項(xiàng)目創(chuàng)建,如圖3-2-5步驟2:編輯pom.xml文件,清空該文件內(nèi)容,在其中輸入以下代碼<dependencies><dependency>配置IDEA開發(fā)環(huán)境
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>配置IDEA開發(fā)環(huán)境
<artifactId>log4j-core</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>配置IDEA開發(fā)環(huán)境
<version>2.7.2</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.7.2</version>配置IDEA開發(fā)環(huán)境</dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>2.7.2</version></dependency>配置IDEA開發(fā)環(huán)境
</dependencies>注意:如果Eclipse/Idea打印不出日志,在控制臺(tái)上只顯示log4jWARNNoappenderscouldbefoundforlogger(org.apache.hadoop.util.Shell)log4jWARNPleaseinitializethelog4jsystemproperlylog4jWARNSee/log4j/1.2/faq.html#noconfigformoreinfo創(chuàng)建perties文件需要在項(xiàng)目的src/main/resources目錄下,新建一個(gè)文件,命名為“perties”,在文件中填入配置IDEA開發(fā)環(huán)境單擊此處添加正文log4j.rootLogger=INFO,stdout單擊此處添加項(xiàng)正文Log4jConsoleAppenderConfigurationlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderLog4jAppenderConfigurationlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutLog4jLayoutConfigurationlog4j.appender.stdout.layout.ConversionPattern=%d%p[%c]-%m%nLog4jFileAppenderConfigurationlog4j.appender.logfile=org.apache.log4j.FileAppenderlog4j.appender.logfile.File=target/spring.log單擊此處添加項(xiàng)正文配置IDEA開發(fā)環(huán)境
Log4jAppenderLayoutConfigurationlog4j.appender.logfile.layout=org.apache.log4j.PatternLayout
Log4jLayoutConfigurationlog4j.appender.logfile.layout.ConversionPattern=%d%p[%c]-%m%n
步驟3:編寫測試類,創(chuàng)建包名com.jsck.hdfs并創(chuàng)建HdfsClient類,其代碼如下單擊此處添加項(xiàng)正文配置IDEA開發(fā)環(huán)境HDFSClientClasspackagecom.jsck.hdfs;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.Path;importjava.io.IOException;import.URI;publicclassHDFSClient{publicstaticvoidmain(String[]args)throwsIOException,InterruptedException{//該類的對(duì)象封裝了客戶端或者服務(wù)器的配置Configurationconf=newConfiguration();//設(shè)置Configuration對(duì)象,指定我們要操作的文件系統(tǒng)conf.set("fs.defaultFS","hdfs://master:9000");/**URI統(tǒng)一資源標(biāo)識(shí)符*9000hdfs操作端口*conf為配置對(duì)象*Root為用戶單擊此處添加項(xiàng)正文配置IDEA開發(fā)環(huán)境
HDFSFileSystemExample*/FileSystemfs=FileSystem.get(URI.create("hdfs://master:9000"),conf,"root")PathbobDirectory=newPath("/jscfa")if(fs.exists(bobDirectory)){System.out.println("目錄/jscfa已存在")returntrue//根目錄底下創(chuàng)建目錄jscfa配置IDEA開發(fā)環(huán)境單擊此處添加正文
HDFSCodeSnippetbooleanresult=fs.mkdirs(bobDirectory);//關(guān)閉,因?yàn)镠DFS不支持并發(fā)寫入,不關(guān)閉,其他人寫不了fs.close();}}打包項(xiàng)目生成JAR并部署打包項(xiàng)目并生成jar包,將Idea里面的jar包拷貝到Windows本機(jī)桌面上,并重命名為1.jar,將1.jar文件從windows桌面拷貝到master桌面上,并進(jìn)入master桌面,打開master的終端命令窗口,進(jìn)入到桌面路徑,執(zhí)行如下命令hadoopjar1.jarcom.jsck.hdfs.HDFSClient單擊此處添加項(xiàng)正文HDFSJava開發(fā)環(huán)境配置能夠成功執(zhí)行就表示HDFSJava開發(fā)環(huán)境配置完畢,其中,com.jsck.hdfs.HDFSClient為主程序的類名任務(wù)三HDFSJavaAPI操作07任務(wù)工單
任務(wù)描述目前基于Eclipse/IDEA+Maven的Java開發(fā)環(huán)境已經(jīng)配置好了,現(xiàn)在我們在Java環(huán)境中實(shí)現(xiàn)對(duì)HDFS文件系統(tǒng)的管理和操作任務(wù)工單:任務(wù)準(zhǔn)備
全班學(xué)生以4人左右為一組,各組選出組長。請(qǐng)組長組織組員查找相關(guān)資料,并組織討論和匯總
問題1:HDFS編程常用的JavaAPI有哪些
問題2:在Java環(huán)境中,怎樣將本地文件上傳到HDFS的/目錄下
問題3:如何對(duì)HDFS指定文件中的內(nèi)容進(jìn)行增加、修改、刪除必備知識(shí)技能:一、HDFS編程常用的JavaAPI介紹
FileSystem類FileSystem是所有文件系統(tǒng)操作的主要接口。通過這個(gè)類,可以進(jìn)行文件的創(chuàng)建、讀取、刪除等操作(1)FileSystem.get(Configurationconf):獲取當(dāng)前文件系統(tǒng)的實(shí)例(2)create(Pathpath):創(chuàng)建一個(gè)新的文件并返回輸出流(3)open(Pathpath):打開一個(gè)文件并返回輸入流(4)delete(Pathpath,booleanrecursive):刪除文件或目錄(5)listStatus(Pathpath):列出目錄中的所有文件和子目錄
FSDataInputStream類FSDataInputStream用于讀取HDFS中的文件內(nèi)容。它繼承自Java的InputStream類,因此可以使用標(biāo)準(zhǔn)的輸入流方法(1)read(byte[]b,intoff,intlen):從輸入流中讀取數(shù)據(jù)到字節(jié)數(shù)組中(2)seek(longdesired):設(shè)置流的起始位置,可以實(shí)現(xiàn)隨機(jī)讀
FSDataOutputStream類(1)FSDataOutputStream用于向HDFS中寫入數(shù)據(jù)。它繼承自Java的OutputStream類(2)write(byte[]b,intoff,intlen):將字節(jié)數(shù)組中的數(shù)據(jù)寫入輸出流必備知識(shí)技能:一、HDFS編程常用的JavaAPI介紹
Path類Path類表示HDFS中的文件或目錄路徑。它封裝了路徑字符串,并提供了一些方便的方法來操作路徑(1)Path(StringpathString):通過給定的字符串創(chuàng)建路徑對(duì)象(2)getName():獲取路徑的名稱部分(3)getParent():獲取路徑的父目錄
Configuration類Configuration類用于讀取配置文件和設(shè)置參數(shù)。Hadoop的所有配置都通過這個(gè)類來管理(1)addResource(PathconfFile):添加配置文件(2)set(Stringname,Stringvalue):設(shè)置參數(shù)(3)get(Stringname):獲取參數(shù)值任務(wù)實(shí)施:一、目錄檢查
步驟1:在master上,啟動(dòng)HDFS,進(jìn)入Hadoop主目錄,執(zhí)行如下命令sbin/start-dfs.sh步驟2:在hadoop1上,啟動(dòng)YARN,進(jìn)入Hadoop主目錄,執(zhí)行如下命令sbin/start-yarn.sh步驟3檢查根目錄底下目錄“bob”是否存在。在src/java下面創(chuàng)建包c(diǎn)n.jsck.hdfs,在該包下新建java文件CheckHDFSDirectory.java,清空該文件并輸入如下代碼importorg.apache.hadoop.conf.Configuration任務(wù)實(shí)施:一、目錄檢查
importorg.apache.hadoop.fs.FileSystem
importorg.apache.hadoop.fs.Path
importjava.io.IOException
publicclassCheckHDFSDirectory{
publicstaticvoidmain(String[]args){
//目錄路徑任務(wù)實(shí)施:一、目錄檢查單擊此處添加正文
StringhdfsDirPath="/bob"
//創(chuàng)建配置對(duì)象
Configurationconf=newConfiguration()
//設(shè)置HDFS地址(如果不在配置文件中配置,可以在這里設(shè)置)
//conf.set("fs.defaultFS","hdfs://master:9000")任務(wù)實(shí)施:一、目錄檢查
01//System.setProperty("HADOOP_USER_NAME","root")
02try(FileSystemfs=FileSystem.get(conf)){
03//創(chuàng)建Path對(duì)象
04PathdirPath=newPath(hdfsDirPath)
05//檢查路徑是否存在
06if(fs.exists(dirPath)){任務(wù)實(shí)施:一、目錄檢查單擊此處添加正文System.out.println(hdfsDirPath+"不存在")單擊此處添加項(xiàng)正文return單擊此處添加項(xiàng)正文//檢查是不是目錄單擊此處添加項(xiàng)正文if(fs.isDirectory(dirPath)){單擊此處添加項(xiàng)正文路徑檢查錯(cuò)誤System.out.println("路徑"+hdfsDirPath+"存在,但不是目錄")return單擊此處添加項(xiàng)正文任務(wù)實(shí)施:一、目錄檢查
//如果以上檢查都通過,說明目錄存在System.out.println("目錄"+hdfsDirPath+"存在")//可以進(jìn)一步獲取目錄的詳細(xì)信息System.out.println("\n目錄詳細(xì)信息:")System.out.println("完整路徑:"+dirPath.toString())權(quán)限檢查示例System.out.println("權(quán)限:"+fs.getFileStatus(dirPath).getPermission())任務(wù)實(shí)施:一、目錄檢查
JavaFileOwnerQuerySystem.out.println("所有者:"+fs.getFileStatus(dirPath).getOwner())
}catch(IOExceptione){單擊此處添加項(xiàng)正文
錯(cuò)誤信息打印System.err.println("檢查目錄時(shí)發(fā)生錯(cuò)誤:"+e.getMessage())
e.printStackTrace()單擊此處添加項(xiàng)正文任務(wù)實(shí)施:二、目錄創(chuàng)建
步驟4在根目錄下創(chuàng)建目錄“bob”。在cn.jsck.hdfs包下新建Java文件CreateHDFSDirectory.java,清空該文件并輸入如下代碼importorg.apache.hadoop.conf.Configurationimportorg.apache.hadoop.fs.FileSystemimportorg.apache.hadoop.fs.Pathimportjava.io.IOExceptionpublicclassCreateHDFSDirectory{任務(wù)實(shí)施:二、目錄創(chuàng)建
publicstaticvoidmain(String[]args){
//硬編碼要?jiǎng)?chuàng)建的目錄名稱
StringfolderName="bob"
//在根目錄下創(chuàng)建目錄
StringhdfsDirPath="/"+folderName
//創(chuàng)建配置對(duì)象任務(wù)實(shí)施:二、目錄創(chuàng)建Configurationconf=newConfiguration()//設(shè)置HDFS地址(如果不在配置文件中配置,可以在這里設(shè)置)//conf.set("fs.defaultFS","hdfs://master:9000")//如果需要指定用戶(根據(jù)實(shí)際環(huán)境調(diào)整)//System.setProperty("HADOOP_USER_NAME","root")try(FileSystemfs=FileSystem.get(conf)){任務(wù)實(shí)施:二、目錄創(chuàng)建
//創(chuàng)建Path對(duì)象
PathdirPath=newPath(hdfsDirPath)
//檢查目錄是否已存在
if(fs.exists(dirPath)){
if(fs.isDirectory(dirPath)){
System.out.println("目錄"+hdfsDirPath+"已存在")任務(wù)實(shí)施:二、目錄創(chuàng)建
}else{單擊此處添加項(xiàng)正文
路徑已存在但不是目錄System.out.println("路徑"+hdfsDirPath+"已存在,但不是目錄")
return單擊此處添加項(xiàng)正文
}else{單擊此處添加項(xiàng)正文
//創(chuàng)建目錄單擊此處添加項(xiàng)正文
booleansuccess=fs.mkdirs(dirPath)單擊此處添加項(xiàng)正文任務(wù)實(shí)施:二、目錄創(chuàng)建
01if(success){
02System.out.println("成功創(chuàng)建目錄:"+hdfsDirPath)
03}else{
04System.out.println("創(chuàng)建目錄失?。?+hdfsDirPath)
05return
06//驗(yàn)證目錄是否創(chuàng)建成功任務(wù)實(shí)施:二、目錄創(chuàng)建01CodeCheckif(fs.exists(dirPath)&fs.isDirectory(dirPath)){02驗(yàn)證HDFS目錄創(chuàng)建System.out.println("驗(yàn)證:目錄"+hdfsDirPath+"已成功創(chuàng)建并存在")03}else{單擊此處添加項(xiàng)正文04驗(yàn)證失?。耗夸洸淮嬖诨虿皇悄夸汼ystem.out.println("驗(yàn)證失敗:目錄"+hdfsDirPath+"不存在或不是目錄")05}catch(IOExceptione){單擊此處添加項(xiàng)正文任務(wù)實(shí)施:二、目錄創(chuàng)建
System.err.println("創(chuàng)建目錄時(shí)發(fā)生錯(cuò)誤:"+e.getMessage())
e.printStackTrace()任務(wù)實(shí)施:三、文件創(chuàng)建
步驟5:在“bob”目錄底下新建文件js創(chuàng)建HDFS文件在cn.jsck.hdfs包下新建Java文件在cn.jsck.hdfs包下新建java文件CreateFileInBobDirectory.java清空該文件并輸入如下代碼importorg.apache.hadoop.conf.Configurationimportorg.apache.hadoop.fs.FSDataOutputStreamimportorg.apache.hadoop.fs.FileSystem任務(wù)實(shí)施:三、文件創(chuàng)建importorg.apache.hadoop.fs.Pathimportjava.io.BufferedWriterimportjava.io.IOExceptionimportjava.io.OutputStreamWriterpublicclassCreateFileInBobDirectory{publicstaticvoidmain(String[]args){任務(wù)實(shí)施:三、文件創(chuàng)建//硬編碼路徑和文件名StringdirectoryPath="/bob"StringfileName="js"StringfilePath=directoryPath+"/"+fileName//創(chuàng)建配置對(duì)象Configurationconf=newConfiguration()任務(wù)實(shí)施:三、文件創(chuàng)建
//設(shè)置HDFS地址(如果不在配置文件中配置,可以在這里設(shè)置)HDFSConfiguration//conf.set("fs.defaultFS","hdfs://namenode:9000")//如果需要指定用戶(根據(jù)實(shí)際環(huán)境調(diào)整)//System.setProperty("HADOOP_USER_NAME","root")try(FileSystemfs=FileSystem.get(conf)){//檢查bob目錄是否存在任務(wù)實(shí)施:三、文件創(chuàng)建
PathdirPath=newPath(directoryPath)FileSystemCheckif(fs.exists(dirPath)||!fs.isDirectory(dirPath)){創(chuàng)建目錄System.out.println("目錄"+directoryPath+"不存在,正在創(chuàng)建……")booleandirCreated=fs.mkdirs(dirPath)if(dirCreated){System.out.println("創(chuàng)建目錄失?。?+directoryPath)任務(wù)實(shí)施:三、文件創(chuàng)建return//創(chuàng)建文件路徑Pathfile=newPath(filePath)//檢查文件是否已存在if(fs.exists(file)){System.out.println("文件"+filePath+"已存在")任務(wù)實(shí)施:三、文件創(chuàng)建
return//創(chuàng)建文件并寫入內(nèi)容CreateFileStreamtry(FSDataOutputStreamoutputStream=fs.create(file)BufferedWriterwriter=newBufferedWriter(newOutputStreamWriter(outputStream,"UTF-8"))){//寫入一些示例內(nèi)容任務(wù)實(shí)施:三、文件創(chuàng)建
writer.write("http://JavaScript文件創(chuàng)建于HDFS\n")writer.write("console.log('HellofromDFS!');\n")writer.write("\nfunctionsayHello(){n")writer.write("return'Hello,World!';\n")writer.write("}\n")創(chuàng)建文件成功System.out.println("成功在目錄'"+directoryPath+"'下創(chuàng)建文件:"+fileName)任務(wù)實(shí)施:三、文件創(chuàng)建//驗(yàn)證文件是否創(chuàng)建成功單擊此處添加項(xiàng)正文if(fs.exists(file)){單擊此處添加項(xiàng)正文文件創(chuàng)建成功驗(yàn)證System.out.println("驗(yàn)證:文件'"+filePath+"'已成功創(chuàng)建")文件大小計(jì)算System.out.println("文件大?。?+fs.getFileStatus(file).getLen()+"字節(jié)")}else{單擊此處添加項(xiàng)正文文件不存在錯(cuò)誤System.out.println("驗(yàn)證失?。何募?"+filePath+"'不存在")任務(wù)實(shí)施:三、文件創(chuàng)建
}catch(IO
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026山東臨沂市臨沭縣部分事業(yè)單位招聘綜合類崗位工作人員27人備考題庫及答案詳解一套
- 2026北京市順義區(qū)衛(wèi)生健康委員會(huì)招聘事業(yè)單位高層次人才3人備考題庫及完整答案詳解1套
- 個(gè)人專業(yè)提升信守誠信承諾書4篇范文
- 七年級(jí)音樂課程中合唱教學(xué)培養(yǎng)學(xué)生團(tuán)隊(duì)精神的實(shí)踐報(bào)告
- XX初中2026年春季學(xué)期教師外出學(xué)習(xí)匯報(bào)制度
- 跨文化溝通與交流策略制定工具
- 跨界文化交流推廣承諾書4篇
- 智能家居產(chǎn)品質(zhì)量保證承諾函3篇范文
- 人臉識(shí)別數(shù)據(jù)傳輸加密技術(shù)應(yīng)用治理方案
- 德系施工方案(3篇)
- 一年級(jí)上冊數(shù)學(xué)應(yīng)用題50道(重點(diǎn))
- 嵌入式系統(tǒng)實(shí)現(xiàn)與創(chuàng)新應(yīng)用智慧樹知到期末考試答案章節(jié)答案2024年山東大學(xué)
- 線纜及線束組件檢驗(yàn)標(biāo)準(zhǔn)
- 人教部編版語文三年級(jí)下冊生字表筆順字帖可打印
- 口述史研究活動(dòng)方案
- 別克英朗說明書
- 房屋租賃合同txt
- 珍稀植物移栽方案
- THBFIA 0004-2020 紅棗制品標(biāo)準(zhǔn)
- GB/T 34336-2017納米孔氣凝膠復(fù)合絕熱制品
- GB/T 10046-2008銀釬料
評(píng)論
0/150
提交評(píng)論