尚大數據技術之hadoophdfs文件系統_第1頁
尚大數據技術之hadoophdfs文件系統_第2頁
尚大數據技術之hadoophdfs文件系統_第3頁
尚大數據技術之hadoophdfs文件系統_第4頁
尚大數據技術之hadoophdfs文件系統_第5頁
已閱讀5頁,還剩54頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

(HDFS文件系統—HDFS

是分布式文件管理系統。HDFS只是分布式文件管理系統中的一種。 (1)大量小文件的話,它會占用NameNode大量的內存來文件、 息。這樣是不可取的,因為NameNode的內存總是有限的。這種架構主要由四個部分組成,分別為HDFS 文件切分。文件上傳HDFS的時候, 可以通過一些命令來HDFS。2)NameNode:就是master,它是一個主管、管理者。上替換NameNode并提供服務。我們要將塊大小設置約為100MB。默認的塊大小128MB。=

1集群中的

…二HFDSbin/hadoopfs[-cat[-ignoreCrc]<src>...] [-copyToLocal[-p][-ignoreCrc][-crc]<src>...<localdst>][-count[-q]<path>...][-cp[-f][-p]<src>...[-deleteSnapshot<snapshotDir><snapshotName>][-df[-h][<path>...]][-du[-s][-h]<path>...][-get[-p][-ignoreCrc][-crc]<src>...<localdst>][-getfacl[-R]<path>][-getmerge[-nl]<src><localdst>][-help[cmd...]][-ls[-d][-h][-R][<path>[-mkdir[-mkdir[-p]<path>[-moveFromLocal<localsrc>...<dst>][-moveToLocal<src><localdst>][-mv<src>...[-put[-f][-p]<localsrc>...[-rm[-f][-r|-R][-skipTrash]<src>...][-setfacl[-R][{-b|-k}{-m|-x<acl_spec>}<path>]|[--set<acl_spec><path>]][-setrep[-R][-w]<rep><path>...][-tail[-f][-text[-ignoreCrc]<src>...][-touchz<path>...](0)啟動Hadoop集群(方便后續的測試)[atguigu@hadoop102hadoop-2.7.2]$sbin/start-dfs.sh(2)-ls:顯 信[atguigu@hadoop102hadoop-2.7.2]$hadoopfs-ls[atguigu@hadoop102hadoop-2.7.2]$hadoopfs-mkdir-p(4)-moveFromLocal從本地剪切粘貼到hdfs[atguigu@hadoop102hadoop-2.7.2]$touchjinlian.txt[atguigu@hadoop102hadoop-2.7.2]$hadoop - [atguigu@hadoop102hadoop-2.7.2]$touchximen.txt[atguigu@hadoop102hadoop-2.7.2]$viximen.txtwo - (6)-cat(8)-chgrp、 - - - - hadoop -cp :合并多個文件,比如hdfs -[atguigu@hadoop102hadoop-2.7.2]$hadoopfs-mkdir/test[atguigu@hadoop102hadoop-2.7.2]$hadoopfs-rmdir/test[atguigu@hadoop102hadoop-2.7.2]$hadoopfs-df-h[atguigu@hadoop102hadoop-2.7.2]$hadoopfs-du-s-h2.7 -h1.3 1.4 [atguigu@hadoop102hadoop-2.7.2]$hadoopfs-setrep2這里設置的副本數只是記錄在namenode的元數據中,是否真的會有這么多副本,還得臺時,副本數才能達到10。三HDFS根據自己電腦的操作系統拷貝對應的編譯后的hadoopjar包到非中文路徑(4)創建lib文件夾,然后添加jar包publicclass{//publicstaticpublicclass{//publicstaticvoidmain(String[]args)throwsIOException,InterruptedException,URISyntaxException{1Configurationconfiguration=new////FileSystemfs=FileSystemfs=FileSystem.get(newURI("hdfs://hadoop102:9000"),configuration,2 o.txt"),new 3}}獲取一個參數來作為自己的用戶:-DHADOOP_USER_NAME=atguigu,atguigu為用戶1.log4j:WARNNoappenderscouldbefoundforlogger(org.apache.hadoop.util.S 1.log4j:WARNNoappenderscouldbefoundforlogger(org.apache.hadoop.util.S 2.log4j:WARNPleaseinitializethelog4jsystemproperly.3.log4j:WARNSeeformore log4j.rootLogger=INFO,log4j.rootLogger=INFO,stdoutlog4j.appender.stdout.layout.ConversionPattern=%d%p[%c]-%m%nlog4j.appender.logfile.layout.ConversionPattern=%d%p[%c]-%m%nAPI1Configurationconfiguration=new2FileSystemfs=3} voidtestCopyFromLocalFile() URISyntaxException{1Configurationconfiguration=newConfiguration();configuration.set("dfs.replication","2");FileSystemfs=FileSystem.get(newURI("hdfs://hadoop102:9000"),configuration,2 3} 1Configurationconfiguration=newFileSystemfs=FileSystem.get(newURI("hdfs://hadoop102:9000"),configuration,2booleandelSrc//Pathsrc指 //Pathdst指將文 o1.txt"),new o1.txt"),3} 1Configurationconfiguration=newFileSystemfs=FileSystem.get(newURI("hdfs://hadoop102:9000"),configuration,23}1Configurationconfiguration=newFileSystemfs=FileSystem.get(newURI("hdfs://hadoop102:9000"),configuration,23} 1Configurationconfiguration=newFileSystemfs=FileSystem.get(newURI("hdfs://hadoop102:9000"),configuration,2 3} 12 ////////z//for(BlockLocationblockLocation:blockLocations)//String[]hosts=for(Stringhost:{}} }} 12FileStatus[]listStatus=fs.listStatus(newPath("/"));for(FileStatusfileStatus:listStatus){//if{}else}}3}IO URISyntaxException{1Configurationconfiguration=newFileSystemfs=FileSystem.get(newURI("hdfs://hadoop102:9000"),configuration,2 34//5關閉資源}HDFS需求:從HDFS上文件到本地控制臺上 1Configurationconfiguration=newFileSystemfs=FileSystem.get(newURI("hdfs://hadoop102:9000"),configuration,2 345} 1Configurationconfiguration=newFileSystemfs=FileSystem.get(newURI("hdfs://hadoop102:9000"),configuration,23=4byte[]buf=newfor(intfor(inti=0;i<1024*128;i++){fis.read(buf);}//5關閉資源} 1Configurationconfiguration=newFileSystemfs=FileSystem.get(newURI("hdfs://hadoop102:9000"),configuration,234=5//6關閉資源}四HDFS1向namenode請求上傳文件/user/atguigu/ss 86dn16dn26dn35請求建立block557777DistributedFileSystemnamenode請求上傳文件,namenode檢查目標文件是否已存在,父是否存在。然后dn2調用dn3,將這個通信管道建立完成。客戶端開始往dn1上傳第一個block(先從磁盤數據放到一個本地內存緩存),以blocknamenodeblock(3-7步)集群集群機架集群集群機架機架機架機架機架機架

Distance(/d1/r2/n0,/d1/r3/n2)=4(同一數據中心不同機架上的節點)Distance(/d1/r2/n1,/d2/r4/n1)=6(不同數據中心的節點)1)ip地址mon/RackAwareness.ht低版本HadoopHDFS滿足客戶端副本數據的最近原則。即客戶端距離哪個副本數據最近,HDFS

1請 文件2/user/atguigu/ss5請求讀數據0-請求讀數據7677777客戶端通過DistributedFileSystem向namenode請求文件,77////HDFS 1Configurationconfiguration=new configuration,"atguigu");2 3 45} 五NameNode 1)定時時間到2)/user/atguigu/ss7拷貝到edits namenodefsimageedits文件。如果不是第一次啟namenode被格式化之后,將在/opt/module/hadoop-2.7.2/data/tmp/dfs/name/current文件系統的所有和文件idnodeEditsHDFS文件系統的所有更新操作的路徑,文件系統客戶端執行的所有寫操作首先會被記錄到edits文件中。Namenodefsimage00001開始 applytheofflinefsimageviewertoan applytheofflineeditsviewertoaneditshdfsoivp-i-o[atguigu@hadoop102current]$hdfsoiv-pXML-ifsimage_0000000000000000025- hdfsoevp-i-o edits_0000000000000000012-0000000000000000013-o/opt/module/hadoop-2.7.2/edits.xml <_ HDFS文件系統有更新操作時,就會滾動編輯日志。也可以用命令強制滾動在/opt/module/hadoop-2.7.2/data/tmp/dfs/name/current這個 layoutVersion=-632)namespaceIDHDFSNamenodeNamenodecTime屬性標記了namenode系統的創建時間,對于剛剛格式化的系統,這個屬性為0;但是在文件系統升級之后,該值會更新到新的時間戳。storageType屬性說明該包含的是namenode的數據結構blockpoolIDblockpoolidblockpool,并且是跨集群的全局Namespace被創建的時候(format過程的一部分)會創建并持久化一個唯一ID。在創建過程構建全局唯一的BlockPoolID比人為的配置更可靠一些。NN將BlockPoolID持久化到磁盤中,在后續的啟動過程中,會再次load并使用。web端SecondaryNameNode > SecondaryNameNode用來HDFS狀態的輔助程序,每隔一段時間獲取 這個目錄中查 SecondaryNameNode的namesecondary/current 和主namenode的current namenode() 方法二:使用-importCheckpoint選項啟動namenode kill9namenode刪除namenode的數據(/opt/module/hadoop-2.7.2/data/tmp/dfs/name)[atguigu@hadoop102hadoop-2.7.2]$rmrfopt/module/hadoop-2.7.2/data/tmp/dfs/name/*3)拷貝SecondaryNameNode中數據到原namenode數據 -atguigu@hadoop104:/opt/module/hadoop-2.7.2/data/tmp/dfs/namesecondary/*./name/4)重新啟動namenodeimportCheckpoint命令拷貝SecondaryNameNodekill9namenode3)如果SecondaryNameNode不和Namenode在一個主機節點上,需要將in_use.lock數據的拷貝到數據的平 -atguigu@hadoop104:/opt/module/hadoop-2.7.2/data/tmp/dfs/namesecondary./[atguigu@hadoop102namesecondary]$rm-rfin_use.lock[atguigu@hadoop102dfs]$ls [atguigu@hadoop102hadoop-2.7.2]$bin/hdfsnamenode-importCheckpoint5)啟動namenodeNamenode啟動時,首先將映像文件(fsimage)載入內存,并執行編輯日志(edits)中和一個空的編輯日志。此時,namenode開始datanode請求。但是此刻,namenode運行系統中的數據塊的位置并不是由namenode的,而是以塊列表的形式在datanode中。在系統的正常操作期間,namenode會在內存中保留所有塊位置的映射信息。在安全模式下,各個datanode會向namenode發送的塊列表信息,namenode了解到足如果滿足“最小副本條件”,namenode30秒鐘之后就退出安全模式。所謂的最小副本條件指的是在整個文件系統中99.9%的塊滿足最小副本級別(默認值:所以namenode不會進入安全模式。 [atguigu@hadoop102hadoop-2.7.2]$bin/hdfsdfsadminsafemodeenterbin/hdfsdfsadmin-safemodewaitbin/hdfsdfs-put~/ 停止集群,刪除data和logs中所有數據。[atguigu@hadoop102hadoop-2.7.2]$rmrfdatalogs/[atguigu@hadoop103hadoop-2.7.2]$rmrfdatalogs/[atguigu@hadoop104hadoop-2.7.2]$rmrfdata[atguigu@hadoop102hadoop-2.7.2]$bin/hdfsnamenode–format[atguigu@hadoop102hadoop-2.7.2]$sbin/start-dfs.sh總用量12drwx3atguiguatguigu4096121108:03drwxrwxr-x.3atguiguatguigu4096121108:03drwxrwxr-x.3atguiguatguigu4096121108:03六DataNode 3以后每周期1小時)4心跳每3令2 一個數據塊在datanode上以文件形式在磁盤上,包括兩個文件,一個是數據本DataNode啟動后向namenode,通過后,周期性(1小時)的向namenode上報心跳是每3秒一次,心跳返回結果帶有namenode給該datanode令如塊數DataNodeblock4)datanode在其文件創建后周期驗證checksum 0100110010000100長為10分鐘+30秒。如果定義超時時間為timeout,則超時時長的計算為: =+認為3秒。需要注意的是hdfs-site.xml配置文件中的erval 和namenode不同的是,datanode的是初始階段自動創建的,不需要額外格 [atguigu@hadoop102current]$catVERSION storageID:id統,這個屬性為0;但是在文件系統升級之后,該值會更新到新的時間戳。3) 9/current這個 #MonMay0816:30:19CST storageID對每個datanode來說是唯一的(但對于單個datanode中所有來說則是相同的),namenode可用這個屬性來區分不同datanode。統,這個屬性為0;但是在文件系統升級之后,該值會更新到新的時間戳。blockpoolIDblockpoolidblockpool,并且是跨集群的全局唯一。當一個新的Namespace被創建的時候(format過程的一部分)會創建并持NN將BlockPoolID持久化到磁盤中,在后續的啟動過程中,會再次load并使用。 [atguigu@hadoop105hadoop]$touchdfs.hosts[atguigu@hadoop105hadoop]$vidfs.hosts[atguigu@hadoop102hadoop-2.7.2]$hdfsdfsadmin-refreshNodesRefreshnodessuccessful更新resourcemanager17/06/2414:17:11INFO .RM:ConnectingtoResourceManagerat增加105 [atguigu@hadoop105hadoop-2.7.2]$sbin/yarn-daemon.shstartnodemanager [atguigu@hadoop102sbin]$./start- TimeStamp BytesAlreadyMoved BytesLeftToMoveBytesBeingMoved [atguigu@hadoop102hadoop]$touchdfs.hosts.exclude[atguigu@hadoop102hadoop]$vidfs.hosts.exclude[atguigu@hadoop102hadoop-2.7.2]$hdfsdfsadmin-refreshNodesRefreshnodessuccessful web瀏覽器,退役節點的狀態為missioninprogress(退役中)等待退役節點狀態為missioned(所有塊已經完成),停止該節點及節點資源[atguigu@hadoop105hadoop-2.7.2]$sbin/hadoop-daemon.shstopdatanodestopdatanode[atguigu@hadoop105hadoop-2.7.2]$sbin/yarn-daemon.shstopnodemanagerstopnodemanager[atguigu@hadoop102hadoop-2.7.2]$hdfsdfsadmin-refreshNodesRefreshnodessuccessful17/06/2414:55:56INFO.RM:ConnectingtoResourceManagerat TimeStamp BytesAlreadyMoved BytesLeftToMoveBytesBeingMoved 七HDFSscp-r o.txtroot@hadoop103:/user/atguigu/ //推pushscp-r //拉scp-rroot@hadoop103:/user/atguigu/ o.txtroot@hadoop104:/user/atguigu //是通過本 o.txthdfs://hadoop103:9000/user/atguigu/o.txt每個文件均按塊,每個塊的元數據在namenode的內存中,因此hadoop小文件會非常低效。因為大量的小文件會耗盡namenode中的大部分內存。但注意,小Hadoop存檔文件或HAR文件,是一個更高效的文件存檔工具,它將文件存入HDFS塊,在減少namenode內存使用的同時,允許對文件進行透明的。具體說來,Hadoop存檔文件可以用作MapReduce的輸入。歸檔成一個叫做xxx.har的文件夾,該文件夾下有相應的數據文件。Xx.har [atguigu@hadoop102hadoop-2.7.2]$bin/hadooparchive-archiveNamemyhar.har- [atguigu@hadoop102hadoop-2.7.2]$hadoopfs-lsr/user/my/myhar.har[atguigu@hadoop102hadoop-2.7.2]$hadoopfs-lsrhar:///myhar.har[atguigu@hadoop102hadoop-2.7.2]$hadoopfs-cphar:///user/my/myhar.har hdfsdfsadmin-allowSnapshot路 hdfsdfsadmin-disallowSnapshot路徑(功能描述:禁用指定 hdfsdfs-createSnapshot路 hdfsdfs-createSnapshot路徑名 hdfsdfsrenameSnapshot(功能描述:重命名快照hdfs hdfssnapshotDiff路徑1路徑2(功能描述:比較兩個快 hdfsdfsdeleteSnapshotpath>snapshotName>(功能描述:刪除快照 [atguigu@hadoop102hadoop-2.7.2]$hdfsdfsadmin-allowSnapshot/user/atguigu/data 通過webhdfs://hadoop102:9000/user/atguigu/data/.snapshot/s…..//快照和源文[atguigu@hadoop102hadoop-2.7.2]$hdfsdfs-createSnapshot/user/atguigu/data[atguigu@hadoop102hadoop-2.7.2]$hdfsdfs-renameSnapshot/user/atguigu/data/miao170508atguigu170508 - -134303.027默認值erval=0,檢查回收站的間隔時間。要求Trashtrash=NewTrash(conf); - 八HDFSHANameNode主要在以下兩個方面影響HDFSHDFSHAActive/StandbynameNodesNameNode的式將NameNode很快的切換到另外一臺機器。兩個namenode都可以edits;責自己所在namenode節點,利用zk進行狀態標識,當需要進行狀態切換時,由zkfailover來負責切換,切換時需要防止brainsplit現象的發生。前面學習了使用命令hdfshaadmin-failover手動進行故障轉移,在該模式下,即使NameNode已經失效,系統也不會自動從NameNode轉移到待機NameNode,下面學習如何配置部署HA自動進行故障轉移。自動故障轉移為HDFS部署增加了兩個新組件:ZooKeeper和ZKFailoverController(ZKFC)進程。ZooKeeper是少量協調數據,通知客戶端這些數據的改變和監視客戶端故障的高可用服務。HA的自動故障轉移依賴于ZooKeeper的以下功能:外鎖以表明它應該成為NameNodeZKFCZooKeeper健康監測:ZKFC使用一個健康檢查命令定期地 只要該NameNode及時地回復健康狀態,ZKFC認為該節點是健康的。如果該節點,凍該鎖使用了ZooKeeper對短暫節點的支持,如果會話終止,鎖節點將自動刪除。znode鎖,它將為自己獲取該鎖。如果成功,則它已經贏得了選擇,并負責運行故障轉移進程以使它的本地NameNodeactive。故障轉移進程與前面描述的手動故障轉安裝JDK8.3.2Zookeeper解壓zookeeper安裝包到 mkdir-pzkData重命名/opt/module/zookeeper-3.4.10/conf這個 下的zoo_sample.cfg為zoo.cfgmvzoo_sample.cfgzoo.cfg配置zoo.cfg集群模式下配置一個文件myid,這個文件在dataDir下,這個文件里面有一個數據就是A的值,Zookeeper啟動時此文件,拿到里面的數據與zoo.cfg里面的配置信息比較從而判斷到底是哪個server。 touchvi拷貝配置好的zookeeperscp-rzookeeper-3.4.10/ scp-rzookeeper-3.4.10/ [root@hadoop102zookeeper-3.4.10]#bin/zkServer

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論