Hadoop大數(shù)據(jù)處理技術(shù)基礎(chǔ)與實踐(第3版)課件 第3章-HDFS 技術(shù)_第1頁
Hadoop大數(shù)據(jù)處理技術(shù)基礎(chǔ)與實踐(第3版)課件 第3章-HDFS 技術(shù)_第2頁
Hadoop大數(shù)據(jù)處理技術(shù)基礎(chǔ)與實踐(第3版)課件 第3章-HDFS 技術(shù)_第3頁
Hadoop大數(shù)據(jù)處理技術(shù)基礎(chǔ)與實踐(第3版)課件 第3章-HDFS 技術(shù)_第4頁
Hadoop大數(shù)據(jù)處理技術(shù)基礎(chǔ)與實踐(第3版)課件 第3章-HDFS 技術(shù)_第5頁
已閱讀5頁,還剩103頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章HDFS技術(shù)什么是分布式文件系統(tǒng)和HDFSHDFS設(shè)計目標(biāo)HDFS的基本組件HDFS架構(gòu)圖和工作原理HDFS的shell操作java接口及常用api學(xué)習(xí)目標(biāo)22024/8/21分布式文件系統(tǒng)和HDFS

32024/8/21分布式文件系統(tǒng)管理的物理存儲資源不一定直接連接在本地節(jié)點上,而是通過計算機網(wǎng)絡(luò)與節(jié)點相連。分布式文件系統(tǒng)的基于客戶機/服務(wù)器模式。通常,一個分布式文件系統(tǒng)提供多個供用戶訪問的服務(wù)器。分布式文件系統(tǒng)一般都會提供備份和容錯的功能分布式文件系統(tǒng)一般都基于操作系統(tǒng)的本地文件系統(tǒng)ext3,ext4NTFS為什么需要分布式文件系統(tǒng)傳統(tǒng)文件系統(tǒng)最大的問題是容量和吞吐量的限制多用戶多應(yīng)用的并行讀寫是分布式文件系統(tǒng)產(chǎn)生的根源一塊硬盤的讀寫性能,比不上多塊硬盤同時讀寫的性能1HDD=75MB/sec1000HDDs=75GB/sec擴充存儲空間的成本低廉可提供冗余備份可以為分布式計算提供基礎(chǔ)42024/8/21什么是HDFSHDFS=HadoopDistributedFileSystemHDFS是一個使用Java實現(xiàn)的、分布式的、可橫向擴展的文件系統(tǒng)是Hadoop的核心組件基于*nix52024/8/21HDFS的設(shè)計目標(biāo)基于廉價的普通硬件,可以容忍硬件出錯系統(tǒng)中的某一臺或幾臺服務(wù)器出現(xiàn)故障的時候,系統(tǒng)仍可用且數(shù)據(jù)保持完整大數(shù)據(jù)集(大文件)HDFS適合存儲大量文件,總存儲量可以達(dá)到PB,EB級HDFS適合存儲大文件,單個文件大小一般在百MB級之上文件數(shù)目適中簡單的一致性模型HDFS應(yīng)用程序需要一次寫入,多次讀取一個文件的訪問模式支持追加(append)操作,但無法更改已寫入數(shù)據(jù)順序的數(shù)據(jù)流訪問HDFS適合用于處理批量數(shù)據(jù),而不適合用于隨機定位訪問側(cè)重高吞吐量的數(shù)據(jù)訪問,可以容忍數(shù)據(jù)訪問的高延遲為把“計算”移動到“數(shù)據(jù)”提供基礎(chǔ)和便利62024/8/21HDFS的特點(1)簡單一致性(2)故障檢測和自動恢復(fù)(3)流式數(shù)據(jù)訪問(4)支持超大文件(5)優(yōu)化的讀取(6)數(shù)據(jù)完整性72024/8/21HDFS架構(gòu)HDFS是典型的主從架構(gòu),一個主節(jié)點(NameNode或者M(jìn)etadataNode),負(fù)責(zé)系統(tǒng)命名空間(NameSpace)的管理、客戶端文件操作的控制和存儲任務(wù)的管理分配;多個從節(jié)點或者說是數(shù)據(jù)節(jié)點(DataNode),提供真實文件數(shù)據(jù)的物理支持。HDFS架構(gòu)塊元數(shù)據(jù)NameNodeDataNode客戶端塊(Block)在傳統(tǒng)的塊存儲介質(zhì)中,塊是讀寫的最小數(shù)據(jù)單位(扇區(qū))傳統(tǒng)文件系統(tǒng)基于存儲塊進(jìn)行操作為了節(jié)省文件分配表空間,會對物理存儲塊進(jìn)行整合,一般大小為4096字節(jié)HDFS也使用了塊的概念,但是默認(rèn)大小設(shè)為64M字節(jié)可針對每個文件配置,由客戶端指定每個塊有一個自己的全局IDHDFS將一個文件分為一個或數(shù)個塊來存儲每個塊是一個獨立的存儲單位以塊為單位在集群服務(wù)器上分配存儲與傳統(tǒng)文件系統(tǒng)不同的是,如果實際數(shù)據(jù)沒有達(dá)到塊大小,則并不實際占用磁盤空間如果一個文件是200M,則它會被分為4個塊:64+64+64+8102024/8/21使用塊的好處當(dāng)一個文件大于集群中任意一個磁盤的時候,文件系統(tǒng)可以充分利用集群中所有的磁盤管理塊使底層的存儲子系統(tǒng)相對簡單塊更加適合備份,從而為容錯和高可用性的實現(xiàn)帶來方便112024/8/21塊的冗余備份每個塊在集群上會存儲多份(replica)默認(rèn)復(fù)制份數(shù)為3可針對每個文件配置,由客戶端指定可動態(tài)修改某個塊的所有備份都是同一個ID系統(tǒng)無需記錄“哪些塊其實是同一份數(shù)據(jù)”系統(tǒng)可以根據(jù)機架的配置自動分配備份位置第一份在集群的某個機架的某臺機器上其他兩份在另外的一個機架的兩臺機器上此策略是性能與冗余性的平衡機架信息需要手工配置122024/8/21HDFS的元數(shù)據(jù)元數(shù)據(jù)包括文件系統(tǒng)目錄樹信息

文件名,目錄名

文件和目錄的從屬關(guān)系

文件和目錄的大小,創(chuàng)建及最后訪問時間

權(quán)限文件和塊的對應(yīng)關(guān)系

文件由哪些塊組成塊的存放位置機器名,塊IDHDFS對元數(shù)據(jù)和實際數(shù)據(jù)采取分別存儲的方法元數(shù)據(jù)存儲在一臺指定的服務(wù)器上(NameNode)實際數(shù)據(jù)儲存在集群的其他機器的本地文件系統(tǒng)中(DataNode)2024/8/2113NameNodeNameNode是用來管理文件系統(tǒng)命名空間的組件一個HDFS集群只有一臺NameNode一個HDFS集群只有一個命名空間,一個根目錄NameNode上存放了HDFS的元數(shù)據(jù)一個HDFS集群只有一份元數(shù)據(jù)目前有單點故障的問題元數(shù)據(jù)保存在NameNode的內(nèi)存當(dāng)中,以便快速查詢1G內(nèi)存大致可以存放1,000,000個塊對應(yīng)的元數(shù)據(jù)信息按缺省每塊64M計算,大致對應(yīng)64T實際數(shù)據(jù)2024/8/2114DataNode塊的實際數(shù)據(jù)存放在DataNode上每個塊會在本地文件系統(tǒng)產(chǎn)生兩個文件,一個是實際的數(shù)據(jù)文件,另一個是塊的附加信息文件,其中包括數(shù)據(jù)的校驗和,生成時間DataNode通過心跳包(Heartbeat)與NameNode通訊客戶端讀取/寫入數(shù)據(jù)的時候直接與DataNode通信2024/8/2115HDFS客戶端需要訪問HDFS文件服務(wù)的用戶或應(yīng)用命令行客戶端同一個Hadoop安裝包API客戶端Java庫非POSIX接口封裝了通信細(xì)節(jié)2024/8/2116HDFS架構(gòu)圖2024/8/2117元數(shù)據(jù)的持久化NameNode里使用兩個非常重要的本地文件來保存元數(shù)據(jù)信息:fsimagefsimage里保存了文件系統(tǒng)目錄樹信息fsimage里保存了文件和塊的對應(yīng)關(guān)系editsedits保存文件系統(tǒng)的更改記錄(journal)當(dāng)客戶端對文件進(jìn)行寫操作(包括新建或移動)的時候,操作首先記入edits,成功后才會更改內(nèi)存中的數(shù)據(jù)并不會立刻更改硬盤上的fsimage塊的位置信息并不做持久化2024/8/2118元數(shù)據(jù)的載入和更新NameNode啟動時通過fsimage讀取元數(shù)據(jù),載入內(nèi)存執(zhí)行edits中的記錄,在內(nèi)存中生成最新的元數(shù)據(jù)清空edits,保存最新的元數(shù)據(jù)到fsimage收集DataNode匯報的塊的位置信息NameNode運行時

對文件創(chuàng)建和寫操作,記錄到edits更新內(nèi)存中的元數(shù)據(jù)收集DataNode匯報的塊的創(chuàng)建和復(fù)制信息2024/8/2119HDFS創(chuàng)建文件流程客戶端客戶端請求NameNode在命名空間中建立新的文件元信息如果不能創(chuàng)建文件則NameNode會返回失敗文件已存在資源不足如創(chuàng)建成功,客戶端得到此文件的寫保護(hù)鎖NameNodeNamenode檢查集群和文件狀態(tài)創(chuàng)建寫保護(hù)鎖來保證只有一個客戶端在操作該文件建立該文件的元信息把創(chuàng)建文件這個事件加入edits為該文件分配塊,以及塊的冗余備份位置2024/8/2120HDFS寫操作流程客戶端寫一個文件并不是直接寫到HDFS上HDFS客戶端接收用戶數(shù)據(jù),并把內(nèi)容緩存在本地當(dāng)本地緩存收集足夠一個HDFS塊大小的時候,客戶端同NameNode通訊注冊一個新的塊注冊塊成功后,NameNode會給客戶端返回一個DataNode的列表列表中是該塊需要存放的位置,包括冗余備份客戶端向列表中的第一個DataNode寫入塊當(dāng)完成時,第一個DataNode向列表中的下個DataNode發(fā)送寫操作,并把數(shù)據(jù)已收到的確認(rèn)信息給客戶端,同時發(fā)送確認(rèn)信息給NameNode之后的DataNode重復(fù)之上的步驟當(dāng)列表中所有DataNode都接收到數(shù)據(jù)并且由最后一個DataNode校驗數(shù)據(jù)正確性完成后,返回確認(rèn)信息給客戶端收到所有DataNode的確認(rèn)信息后,客戶端刪除本地緩存客戶端繼續(xù)發(fā)送下一個塊,重復(fù)以上步驟當(dāng)所有數(shù)據(jù)發(fā)送完成后,寫操作完成2024/8/2121HDFS寫操作流程圖2024/8/2122HDFS的讀操作流程客戶端與NameNode通訊獲取文件的塊位置信息,其中包括了塊的所有冗余備份的位置信息:DataNode的列表客戶端獲取文件位置信息后直接同有文件塊的DataNode通訊,讀取文件如果第一個DataNode無法連接,客戶端將自動聯(lián)系下一個DataNode如果塊數(shù)據(jù)的校驗值出錯,則客戶端需要向NameNode報告,并自動聯(lián)系下一個DataNode2024/8/2123HDFS追加寫(append)的操作流程客戶端與NameNode通訊,獲得文件的寫保護(hù)鎖及文件最后一個塊的位置(DataNode列表)客戶端挑選一個DataNode作為主寫入節(jié)點,并對其余節(jié)點上的該數(shù)據(jù)塊加鎖開始寫入數(shù)據(jù)與普通寫入流程類似,依次更新各個DataNode上的數(shù)據(jù)更新時間戳和校驗和最后一個塊寫滿,并且所有備份塊都完成寫入后,向NameNode申請下一個數(shù)據(jù)塊2024/8/2124客戶端和HDFS服務(wù)器端配置文件的關(guān)系客戶端的配置文件名與服務(wù)器端相同,字段名也相同客戶端不會從HDFS集群端同步配置文件客戶端只使用部分配置信息dfs.block.sizedfs.replication如果客戶端沒有配置信息,則使用客戶端Hadoop程序包里的缺省值而不是服務(wù)器端的值2024/8/2125HDFS的安全性和用戶認(rèn)證缺省情況下,Hadoop不啟用認(rèn)證采用客戶端系統(tǒng)的登錄用戶名或可以通過API設(shè)置從而,雖然HDFS有權(quán)限控制,但并沒有安全性可言可以在NameNode上啟用用戶認(rèn)證目前只支持Kerberos可以與LDAP集成2024/8/2126SecondaryNameNode不是備份節(jié)點SecondaryNameNode的主要的工作是階段性的合并fsimage和edits文件,以此來控制edits的文件大小在合理的范圍為了縮短集群重啟時NameNode重建fsimage的時間在NameNode硬盤損壞的情況下,SecondaryNameNode也可用作數(shù)據(jù)恢復(fù),但絕不是全部一般情況下SecondaryNamenode運行在不同與NameNode的主機上,并且它的內(nèi)存需求和NameNode是一樣的一個特殊的角色:SecondaryNameNode272024/8/21SecondaryNameNode的運行過程SecondaryNameNode根據(jù)配置好的策略決定多久做一次合并fs.checkpoint.period和fs.checkpoint.size通知NameNode現(xiàn)在需要回滾edits日志,此時NameNode的新操作將寫入新的edits文件SecondaryNameNode通過HTTP從NameNode取得fsimage和editsSecondaryNameNode將fsimage載入內(nèi)存,執(zhí)行所有edits中的操作,新建新的完整的fsimageSecondaryNameNode將新的fsimage傳回NameNodeNameNode替換為新的fsimage并且記錄此checkpoint的時間2024/8/2128NameNode與SecondaryNameNode2024/8/2129HDFS服務(wù)進(jìn)程NameNodeSecondaryNameNodeDataNode使用jps查看HDFS服務(wù)進(jìn)程24913NameNode16566SecondaryNameNode15744DataNode2024/8/2130HDFS的未來發(fā)展高可用性多NameNode自治目前已在2.0版本中但還不夠成熟,在生產(chǎn)環(huán)境使用前需要多做測試2024/8/2131HDFS中所有對文件的操作都需要先通過NameNode,如果NameNode出現(xiàn)問題,這個集群將不可用維護(hù)硬件失效軟件失效操作失誤解決方案:為NameNode提供備份節(jié)點HDFS高可用性322024/8/21HDFS高可用性的實現(xiàn)方式2024/8/2133HDFS高可用性實現(xiàn)細(xì)節(jié)把元數(shù)據(jù)信息存在第三方地點只需保存fsimage和editsActiveNN和StandbyNN通過開源組件ZooKeeper來決定主從StandbyNN從第三方地點實時讀取edits當(dāng)ActiveNN失敗,切換到StandbyNN時,StandbyNN需要確保讀取完所有edits之后才能對外提供服務(wù)塊位置信息Datanode同時匯報給兩個NameNode客戶端需要知道有兩個NameNode存在如果ActiveNamenode失效,客戶端可以自動的將操作發(fā)往Standby節(jié)點2024/8/2134NameNode的自治(Federation)NameNode的瓶頸內(nèi)存客戶端的并發(fā)訪問解決方案拆分目錄樹共享DataNode資源池2024/8/2135普通NameNode的架構(gòu)層次2024/8/2136NameNode自治的實現(xiàn)方式2024/8/2137HDFS命令行工具HDFS安全模式啟動、停止HDFS服務(wù)如何查看HDFS日志如何查看HDFSWeb控制臺HDFS參數(shù)配置HDFS實戰(zhàn)382024/8/21HDFS命令行工具HadoopFilesystemshell$HADOOP_HOME_BASE/bin/hadoopfs<args>FSshell使用URIs地址Schema://autority/path例如hdfs://namenodehost:port/folder1/folder2file:///home/tcloud/child如果不指定schema,則使用配置文件中的默認(rèn)地址可以使用hadoopfs–help查看所有命令2024/8/2139cat用途顯示一個或多個文件內(nèi)容到控制臺使用方法hadoopfs-catURI[URI...]例子:hadoopfs-cathdfs://host1:port1/file1hdfs://host2:port2/file2hadoopfs-catfile:///file3/user/hadoop/file42024/8/2140put/copyFromLocal用途將本地一個或多個文件導(dǎo)入HDFS以上兩個命令唯一的不同時copyFromLocal的源只能是本地文件,而put可以讀取stdin的數(shù)據(jù)使用方法hadoopfs-put/copyFromLocal<localsrc>URI例子:hadoopfs-putlocalfile.txt/user/hadoop/hadoopfile.txthadoopfs-putlocalfile1localfile2/user/hadoop/hadoopdirhadoopfs-putlocalfilehdfs://host:port/hadoop/hadoopfilehadoopfs-put-hdfs://host:port/hadoop/hadoopfilefromstdin2024/8/2141get/copyToLocal用途將HDFS中的一個或多個文件導(dǎo)出到本地文件系統(tǒng)使用方法hadoopfs-get/copyToLocal[-ignorecrc][-crc]URI<localsrc>例子:hadoopfs-get/user/hadoop/hadoopfilelocalfilehadoopfs-gethdfs://host:port/user/hadoop/filelocalfile2024/8/2142ls/lsr用途列出文件夾目錄信息lsr遞歸顯示文件子目錄使用方法hadoopfs-ls/lsrURI例子:[hadoop@master]$hadoopfs-ls/user/hadoopdrwxr-xr-x-hadoopsupergroup02012-05-1417:24/user/hadoop/a[hadoop@master]$hadoopfs-lsr/user/hadoopdrwxr-xr-x-hadoopsupergroup02012-05-1417:24/user/hadoop/a-rw-r--r--2hadoopsupergroup472012-05-1417:24/user/hadoop/a/oct.sh-rw-r--r--2hadoopsupergroup62012-05-1417:24/user/hadoop/a/x.sh2024/8/2143fsck用法hadoopfsck[GENERIC_OPTIONS]<path>[-move|-delete|-openforwrite][-files[-blocks[-locations|-racks]]]檢查dfs的文件的健康狀況只能運行在master上[hadoop@master]$hadoopfsck/user/hadoopFSCKstartedbyhadoopfrom/7forpath/user/hadoopatFriJun1517:11:50CST2012./user/hadoop/a/oct.sh:Underreplicatedblk_-3537883739360629007_1303.TargetReplicasis2butfound1replica(s)../user/hadoop/a/x.sh:Underreplicatedblk_8664072905926163771_1304.TargetReplicasis2butfound1replica(s).2024/8/2144fsckStatus:HEALTHYTotalsize:57697BTotaldirs:5Totalfiles:6Totalblocks(validated):5(avg.blocksize11539B)Minimallyreplicatedblocks:5(100.0%)Over-replicatedblocks:0(0.0%)Under-replicatedblocks:5(100.0%)Mis-replicatedblocks:0(0.0%)Defaultreplicationfactor:2Averageblockreplication:1.0Corruptblocks:0Missingreplicas:2(100.0%)Numberofdata-nodes:1Numberofracks:1FSCKendedatFriJun1517:11:50CST2012in3milliseconds2024/8/2145dfsadmin用法hadoopdfsadmin[command]hadoopdfsadmin-help可以列出所有的可用命令主要的有一下幾個-safemode安全模式操作-report報告集群DFS的運行情況可以使用hadoopdfsadmin-help查看所有命令的用法2024/8/2146HDFS的SafeMode指文件系統(tǒng)所處的一種只讀的安全模式HDFS啟動時會在safemode狀態(tài)相關(guān)命令:$hadoopdfsadmin-safemodeget#安全模式當(dāng)前狀態(tài)信息$hadoopdfsadmin-safemodeenter#進(jìn)入安全模式$hadoopdfsadmin-safemodeleave#解除安全模式$hadoopdfsadmin-safemodewait#掛起,直到安全模式結(jié)束2024/8/2147HDFS服務(wù)啟動NameNode$HADOOP_HOME_BASE/bin/hadoop-daemon.shstartnamenodeSecondaryNameNode$HADOOP_HOME_BASE/bin/hadoop-daemon.shstartsecondarynamenodeDataNode同時啟動:$HADOOP_HOME_BASE/bin/hadoop-daemons.shstartdatanode單臺啟動:$HADOOP_HOME_BASE/bin/hadoop-daemon.shstartdatanodeNameNode、SecondaryNameNode、DataNode$HADOOP_HOME_BASE/bin/start-dfs.sh2024/8/2148HDFS服務(wù)關(guān)閉NameNode$HADOOP_HOME_BASE/bin/hadoop-daemon.shstopnamenodeSecondaryNameNode$HADOOP_HOME_BASE/bin/hadoop-daemon.shstopsecondarynamenodeDataNode同時關(guān)閉:$HADOOP_HOME_BASE/bin/hadoop-daemons.shstopdatanode單臺關(guān)閉:$HADOOP_HOME_BASE/bin/hadoop-daemon.shstopdatanodeNameNode、SecondaryNameNode、DataNode$HADOOP_HOME_BASE/bin/stop-dfs.sh2024/8/2149如何查看HDFS日志NameNode位置:$HADOOP_HOME_BASE/logs/hadoop-$USER-namenode-$HOSTNAME.log命令:tail-fn100$HADOOP_HOME_BASE/logs/hadoop-$USER-namenode-$HOSTNAME.logDataNode位置:$HADOOP_HOME_BASE/logs/hadoop-$USER-datanode-$HOSTNAME.log命令:tail-fn100$HADOOP_HOME_BASE/logs/hadoop-$USER-datanode-$HOSTNAME.log設(shè)置Log文件

的大小和數(shù)量修改core-site.xml中的參數(shù)hadoop.logfile.sizehadoop.logfile.count2024/8/2150如何設(shè)置日志級別

查看不同組件的日志級別hadoopdaemonlog-getlevelhost:portpackageName設(shè)置組件的日志級別

hadoopdaemonlog–setlevlehost:portpackageNamelevel“l(fā)evel”DEBUG,INFO,ERROR,FATAL

端口為前臺頁面的端口,缺省為50070組件名稱(packageName)node.NameNodeorg.apache.hadoop.hdfs.server.datanode.DataNodeorg.apache.hadoop.hdfsorg.apache.hadoop2024/8/2151如何查看HDFSWeb控制臺訪問:http://<NameNodehostname>:<port>2024/8/2152HDFShdfs-site.xml參數(shù)配置.dir NameNode元數(shù)據(jù)存放位置默認(rèn)值:使用core-site.xml中的hadoop.tmp.dir/dfs/namedfs.block.size對于新文件切分的大小,單位byte。默認(rèn)是64M,建議是128M。每一個節(jié)點都要指定,包括客戶端。默認(rèn)值:67108864dfs.data.dirDataNode在本地磁盤存放block的位置,可以是以逗號分隔的目錄列表,DataNode循環(huán)向磁盤中寫入數(shù)據(jù),每個DataNode可單獨指定與其它DataNode不一樣默認(rèn)值:${hadoop.tmp.dir}/dfs/data2024/8/2153HDFShdfs-site.xml參數(shù)配置node.handler.countNameNode用來處理來自DataNode的RPC請求的線程數(shù)量建議設(shè)置為DataNode數(shù)量的10%,一般在10~200個之間如設(shè)置太小,DataNode在傳輸數(shù)據(jù)的時候日志中會報告“connectonrefused"信息在NameNode上設(shè)定默認(rèn)值:10dfs.datanode.handler.countDataNode用來連接NameNode的RPC請求的線程數(shù)量取決于系統(tǒng)的繁忙程度設(shè)置太小會導(dǎo)致性能下降甚至報錯在DataNode上設(shè)定默認(rèn)值:3dfs.datanode.max.xcieversDataNode可以同時處理的數(shù)據(jù)傳輸連接數(shù)默認(rèn)值:256建議值:40962024/8/2154HDFShdfs-site.xml參數(shù)配置dfs.permissions

如果是true則檢查權(quán)限,否則不檢查(每一個人都可以存取文件)于NameNode上設(shè)定默認(rèn)值:truedfs.datanode.du.reserved 在每個卷上面HDFS不能使用的空間大小在每個DataNode上面設(shè)定默認(rèn)值:0建議為10737418240,即10G。需要結(jié)合MapReduce場景設(shè)置。dfs.datanode.failed.volumes.toleratedDataNode可以容忍損塊的磁盤數(shù)量,超過這個數(shù)量DataNode將會離線,所有在這個節(jié)點上面的block將會被重新復(fù)制默認(rèn)是0,但是在有多塊磁盤的時候一般會增大這個值dfs.replication在文件被寫入的時候,每一塊將要被復(fù)制多少份默認(rèn)是3份。建議3份在客戶端上設(shè)定通常也需要在DataNode上設(shè)定2024/8/2155HDFS

core-site.xml參數(shù)配置文件系統(tǒng)的名字。通常是NameNode的hostname與port需要在每一個需要訪問集群的機器上指定,包括集群中的節(jié)點例如:hdfs://<your_namenode>:9000/fs.checkpoint.dir以逗號分隔的文件夾列表,SecondNameNode用來存儲checkpointimage文件如果多于一個文件夾,那么都會被寫入數(shù)據(jù)需要在SecondNameNode上設(shè)定默認(rèn)值:${hadoop.tmp.dir}/dfs/namesecondaryhadoop.tmp.dir HDFS與本地磁盤的臨時文件默認(rèn)是/tmp/hadoop-${}.需要在所有的節(jié)點中設(shè)定2024/8/2156HDFS

core-site.xml參數(shù)配置erval當(dāng)一個文件被刪掉后,它會被放到用戶目錄的.Trash目錄下,而不是立即刪掉經(jīng)過此參數(shù)設(shè)置的分鐘數(shù)之后,再刪掉數(shù)據(jù)默認(rèn)是0,禁用此功能,建議1440(一天)io.file.buffer.size設(shè)定在讀寫數(shù)據(jù)時的緩存大小,應(yīng)該為硬件分頁大小的2倍默認(rèn)是4096,建議為65536(64K)2024/8/2157Eclipse開發(fā)環(huán)境介紹HDFS開發(fā)基本步驟HDFSJavaAPI詳解ConfigurationPathFileSystemStream、IOUtilsHDFSJavaAPI使用場景示例FuseHDFSWebHDFSRESTfulAPIHDFS-javaapi使用582024/8/21

HDFS開發(fā)基本步驟實例化Configuration實例化FileSystem根據(jù)配置文件選擇使用本地或分布式文件系統(tǒng)文件或目錄操作Stream2024/8/2159Eclipse開發(fā)環(huán)境

菜單欄

按鈕欄

包導(dǎo)航區(qū)代碼編輯區(qū)

視圖切換按鈕相關(guān)關(guān)聯(lián)顯示區(qū)

代碼聯(lián)動顯示區(qū)2024/8/2160Eclipse開發(fā)環(huán)境

2024/8/2161Eclipse開發(fā)環(huán)境填寫項目名稱2024/8/2162Eclipse開發(fā)環(huán)境2024/8/2163Eclipse開發(fā)環(huán)境建立第三方庫依賴文件夾-lib2024/8/2164Eclipse開發(fā)環(huán)境

拷貝項目所依賴的第三方類庫到lib文件夾2024/8/2165Eclipse開發(fā)環(huán)境把第三方類庫加到項目中的CLASSPATH下2024/8/2166Eclipse開發(fā)環(huán)境

可以看到剛加到CLASSPATH下的把第三方類庫2024/8/2167Eclipse開發(fā)環(huán)境

把src源代碼目錄刪除,根據(jù)類別建立源代碼及測試代碼目錄src/main/javajava源文件存放處src/main/resources配置文件存放處,如hadoop配置文件(core-site.xml)src/test/javajava測試代碼存放處src/test/resources測試代碼配置文件存放處

2024/8/2168Eclipse開發(fā)環(huán)境

新建Java類,可以使用HadoopAPI了2024/8/2169Eclipse開發(fā)環(huán)境在此編輯你的代碼2024/8/2170Eclipse開發(fā)環(huán)境選擇[File]=>Export,導(dǎo)出項目為一個jar包2024/8/2171Configuration包org.apache.hadoop.conf構(gòu)造方法publicConfiguration()調(diào)用構(gòu)造方法Configuration(true)publicConfiguration(booleanloadDefaults)true:先加載缺省配置文件,再加載用戶指定文件(addResource)core-default.xml,core-site.xml以及通過addDefaultResource添加的文件名false:不加載缺省配置文件,需要通過addResource手動添加后加載的配置會覆蓋先加載的配置除了被指定為final的publicConfiguration(Configurationother)復(fù)制other參數(shù)信息2024/8/2172Configuration加載配置文件方法staticvoidaddDefaultResource(Stringname)添加默認(rèn)配置文件,配置文件加載的順序是根據(jù)添加的順序參數(shù)是文件名,文件是在classpath中voidaddResource(InputStreamin)voidaddResource(Pathfile)本地文件voidaddResource(Stringname)classpath中的文件voidaddResource(URLurl)2024/8/2173配置文件加載順序先加載缺省配置文件,再加載用戶定義的配置文件對于每一個文件只加載一次:第一個在classpath出現(xiàn)的classpath的目錄順序$HADOOP_CONF_DIR$JAVA_HOME/lib/tools.jar如果$HADOOP_HOME目錄下有build目錄,則添加build下各子目錄$HADOOP_HOME/hadoop-core-*.jar$HADOOP_HOME/lib/*.jar用戶在hadoop-env.sh中定義的$HADOOP_CLASS_PATH當(dāng)前作為hadoopjar…參數(shù)提交的JAR包2024/8/2174Configuration設(shè)置/獲取參數(shù)方法voidset(Stringname,Stringvalue)voidsetBoolean(Stringname,booleanvalue)voidsetInt(Stringname,Stringvalue)voidsetLong(Stringname,longvalue)voidsetFloat(Stringname,floatvalue)voidsetIfUnset(Stringname,Stringvalue)voidsetBooleanIfUnset(Stringname,booleanvalue)Stringget(Stringname)booleangetBoolean(Stringname,booleandefaultValue)2024/8/2175Path包org.apache.hadoop.fs構(gòu)造方法publicPath(StringpathString)publicPath(URIaUri)publicPath(Pathparent,Pathchild)publicPath(Stringparent,Stringchild)參數(shù)parent指定父目錄,參數(shù)child指定父目錄下的文件或子目錄publicPath(Stringscheme,Stringauthority,Stringpath)scheme:協(xié)議類型,譬如hdfs、file、s3authority:認(rèn)證信息,譬如user:pwd@host:portpath:文件或目錄名如參數(shù)不符合RFC2396,則拋出異常2024/8/2176Path常用方法intdepth()返回路徑的深度StringgetName()返回路徑上最后的資源名稱PathgetParent()返回父目錄,如果已是根目錄則返回nullPathsuffix(Stringsuffix)參數(shù)suffix給Path增加后綴返回加完后綴的Path實例getFileSystem(Configurationconf)返回該Path所屬的文件系統(tǒng)實例2024/8/2177FileSystem包org.apache.hadoop.fs構(gòu)造方法protectedFileSystem()FileSystem是一個抽象類,不能通過new來創(chuàng)建通過靜態(tài)get(Configurationconf)方法獲得FileSystem子類的實例fs.$scheme.implorg.apache.hadoop.hdfs.DistributedFileSystem主要子類LocalFileSystem本地文件系統(tǒng)DistributedFileSystem分布式文件系統(tǒng)2024/8/2178創(chuàng)建文件booleancreateNewFile(Pathf)不會覆蓋已有文件創(chuàng)建成功返回true,失敗返回falseFSDataOutputStreamcreate(Pathf)覆蓋已有文件創(chuàng)建文件并返回輸出流FSDataOutputStreamcreate(Pathf,booleanoverwrite)創(chuàng)建文件并返回輸出流FSDataOutputStreamcreate(Pathf,booleanoverwrite,intbuffer)FSDataOutputStreamcreate(Pathf,booleanoverwrite,int buffer,shortreplication,longblockSize)2024/8/2179打開文件FSDataInputStreamopen(Pathf)FSDataInputStreamopen(Pathf,intbufferSize)返回輸入流如果文件不存在會拋出異常不指定bufferSize時,會從Configuration中讀取io.file.buffer.size,默認(rèn)為4096字節(jié)2024/8/2180文件追加FSDataOutputStreamappend(Pathf)FSDataOutputStreamappend(Pathf,intbufferSize)塊不足64M時,會補足到64M塊達(dá)到64M之前,該塊不可見,ls看不到該塊新增的大小,也無法讀取不能同時多個writer追加同一個文件2024/8/2181從本地拷貝文件到HDFSvoidcopyFromLocalFile(Pathsrc,Pathdst)目標(biāo)文件存在,直接覆蓋voidcopyFromLocalFile(booleandelsrc,Pathsrc,Pathdst)根據(jù)參數(shù)delsrc,如果是true,拷貝完成之后直接刪除源文件voidcopyFromLocalFile(booleandelsrc,booleanoverwrite, Pathsrc,Pathdst)voidcopyFromLocalFile(booleandelsrc,booleanoverwrite, Path[]srcs,Pathdst)參數(shù)srcs指定多個本地文件或文件夾參數(shù)dst指定HDFS文件夾voidmoveFromLocalFile(Pathsrc,Pathdst)voidmoveFromLocalFile(Path[]srcs,Pathdst)2024/8/2182從HDFS拷貝文件到本地voidcopyToLocalFile(Pathsrc,Pathdst)voidcopyToLocalFile(booleandelsrc,Pathsrc,Pathdst)voidmoveToLocalFile(Pathsrc,Pathdst)沒有多文件拷貝函數(shù)會覆蓋已存在的本地文件dst2024/8/2183

創(chuàng)建目錄booleanmkdirs(Pathf)booleanmkdirs(Pathf,FsPermissionpermission)staticbooleanmkdirs(FileSystemfs,Pathdir,FsPermissionpermission)支持多級目錄同時創(chuàng)建(類似mkdir-p)默認(rèn)權(quán)限是755成功返回true目錄權(quán)限的含義r+x:

獲取文件列表w:創(chuàng)建(刪除)文件/子目錄

2024/8/2184刪除及重命名booleandelete(Pathf,booleanrecursive)刪除文件或目錄如果f是目錄,則參數(shù)recursive指定是否要遞歸刪除recursive是false,并且f不為空,會拋出異常刪除成功返回truef不存在時,會返回falsebooleandeleteOnExit(f)當(dāng)關(guān)閉FileSystem時,才會刪除如f是目錄,則遞歸刪除子目錄和文件booleanrename(Pathsrc,Pathdst)2024/8/2185獲取文件或目錄信息FileStatus[]listStatus(Pathf)FileStatus[]listStatus(Path[]dirs)FileStatus[]listStatus(Pathf,PathFilterfilter)FileStatus[]listStatus(Path[]dir,PathFilterfilter)列出文件或目錄的信息參數(shù)dir指定要查詢的多個目錄參數(shù)filter指定需要過濾規(guī)則PathFilter是一個接口,需要實現(xiàn)booleanaccept(Pathpath)方法,返回false,在返回結(jié)果中會過濾掉只返回列出指定目錄下的文件或目錄信息

FileStatus信息包括:絕對路徑文件大小(單位:字節(jié))文件訪問時間塊大小、復(fù)制份數(shù)文件所屬用戶、組、訪問權(quán)限2024/8/2186設(shè)置文件或目錄屬性voidsetOwner(Pathp,Stringusername,Stringgroupname)設(shè)置文件或目錄所屬用戶及組參數(shù)p指定文件或目錄參數(shù)username,設(shè)置此文件或目錄的所屬用戶只返回列出指定目錄下的文件或目錄信息voidsetPermission(Pathp,FsPermissionpermission)設(shè)置文件或目錄權(quán)限參數(shù)p指定文件或目錄參數(shù)permission,指定權(quán)限,權(quán)限同linux權(quán)限雷同voidsetReplication(Pathf,shortreplication)設(shè)置文件復(fù)制份數(shù)參數(shù)f指定文件參數(shù)replication指定復(fù)制份數(shù)2024/8/2187設(shè)置文件或目錄屬性voidsetTimes(Pathf,longmtime,longatime)設(shè)置文件的修改及訪問時間參數(shù)f指定文件參數(shù)mtime,修改時間參數(shù)atime,訪問時間2024/8/2188HDFS輸入流包org.apache.hadoop.fs繼承java.io.DataInputStream構(gòu)造方法publicFSDataInputStream(InputStreamin)輸入流對象實例化in參數(shù),輸入流的來源一般輸入流對象,通過FileSystem.open方法獲得2024/8/2189HDFS輸出流包org.apache.hadoop.fs繼承java.io.DataOutputStream構(gòu)造方法publicFSDataOutputStream(OutputStreamout,FileSystem.Statisticsstats)publicFSDataOutputStream(OutputStreamout,FileSystem.Statisticsstats,longstartPosition)輸出流對象實例化out參數(shù),輸出流stats參數(shù)是對輸出流的相關(guān)的計數(shù),如bytesread,byteswrittenstats是FileSystem.Statistics對象startPosition參數(shù),開始寫入位置一般輸出流對象,通過FileSystem.create方法2024/8/2190

IOUtils構(gòu)造方法包org.apache.hadoop.fs構(gòu)造方法publicIOUtils()I/O幫助類,提供的都是靜態(tài)方法,不需要實例化2024/8/2191IOUtils拷貝流方法publicstaticvoidcopyBytes(InputStreamin,outputStreamout,Configurationconf)publicstaticvoidcopyBytes(InputStreamin,outputStreamout,Configurationconf,booleanclose)從輸入流拷貝到輸出流參數(shù)in輸入流實例參數(shù)out輸出流實例參數(shù)conf,通過io.file.buffer.size獲取緩存大小沒有設(shè)置io.file.buffer.size,緩存默認(rèn)為4096bytes參數(shù)close指定是否需要拷貝完成后,由此方法關(guān)閉輸入輸出流2024/8/2192IOUtils拷貝流方法publicstaticvoidcopyBytes(InputStreamin,outputStreamout,intbuffSize)publicstaticvoidcopyBytes(InputStreamin,outputStreamout,intbuffSize,booleanclose)publicstaticvoidcopyBytes(InputStreamin,outputStreamout,intlength,intbuffSize,booleanclose)從輸入流拷貝制定字節(jié)大小到輸出流參數(shù)in輸入流實例參數(shù)out輸出流實例參數(shù)length指定要拷貝的字節(jié)大小參數(shù)buffSize指定輸入輸出緩沖參數(shù)close指定是否需要拷貝完成后,由此方法關(guān)閉輸入輸出流2024/8/2193

HDFS依賴的jar包及JavaDoc位置HDFS依賴Jar包來源集群中已部署的Hadoop路徑下$HADOOP_HOME_BASE/hadoop-core-1.0.0.jar$HADOOP_HOME_BASE/lib/*.jarJavaDoc位置集群中已部署Hadoop路徑下$HADOOP_HOME_BASE/docs/api/index.html2024/8/2194創(chuàng)建HDFS文件(createNewFile)Configurationconfig=newConfiguration();FileSystemhdfs=FileSystem.get(config);Pathpath=newPath(fileName);booleanisCreated=hdfs.createNewFile(path);2024/8/2195從本地拷貝文件到HDFS(copyFromLocalFile)Configurationconfig=newConfiguration();FileSystemhdfs=FileSystem.get(config);PathsrcPath=newPath(srcFile);PathdstPath=newPath(dstFile);hdfs.copyFromLocalFile(srcPath,dstPath)2024/8/2196從HDFS讀取文件(open)Configurationconfig=newConfiguration();FileSystemhdfs=FileSystem.get(config);Pathpath=newPath(dstFile);FSDataInputStreaminputStream=hdfs.open(path);Textline=newText()LineReaderliReader=newLineReader(inputStream);while(liReader.readLine(line)>0){System.out.println(line);}inputStream.close();2024/8/2197追加方式寫入HDFS文件(append)Configurationconfig=newConfiguration();FileSystemhdfs=FileSystem.get(config);Pathpath=newPath(dstFile);FSDataOutputStreamout=hdfs.append(path);//在文件尾部,追加數(shù)據(jù)out.close();2024/8/2198列出目錄下的所有文件(listStatus)Configurationconfig=newConfiguration();FileSystemhdfs=FileSystem.get(config);Pathdir=newPath(dirName);FileStatus[]fileStatus=hdfs.listStatus(newPath[]{dir});2024/8/2199FuseHDFS用戶空間文件系統(tǒng)(FilesysteminUserspace,簡稱FUSE),是操作系統(tǒng)中的概念,指在用戶態(tài)下實現(xiàn)的文件系統(tǒng)FuseHDFS是Hadoopcontrib的一個模塊通過命令掛載在*nix系統(tǒng)上,可以把HDFS當(dāng)成本地文件系統(tǒng)使用訪問HDFS時,使用標(biāo)準(zhǔn)的*nix命令,如ls,cd,cp,mkdir,find,grep任何編程語言通過POSIX庫與HDFS文件系統(tǒng)交互通過FuseHDFS創(chuàng)建的文件或文件夾的屬主是nobody$mkdir/dfs

$cd$HADOOP_HOME/build/contrib/fuse-dfs

$./fuse_dfs_wrapper.shdfs://maste

溫馨提示

  • 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

提交評論