《Hadoop大數(shù)據(jù)原理與應(yīng)用實驗教程》課件實驗2準備:分布式文件系統(tǒng)HDFS_第1頁
《Hadoop大數(shù)據(jù)原理與應(yīng)用實驗教程》課件實驗2準備:分布式文件系統(tǒng)HDFS_第2頁
《Hadoop大數(shù)據(jù)原理與應(yīng)用實驗教程》課件實驗2準備:分布式文件系統(tǒng)HDFS_第3頁
《Hadoop大數(shù)據(jù)原理與應(yīng)用實驗教程》課件實驗2準備:分布式文件系統(tǒng)HDFS_第4頁
《Hadoop大數(shù)據(jù)原理與應(yīng)用實驗教程》課件實驗2準備:分布式文件系統(tǒng)HDFS_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Hadoop大數(shù)據(jù)原理與應(yīng)用實驗教程

實驗2準備:分布式文件系統(tǒng)HDFS實驗2知識地圖實驗2實戰(zhàn)HDFS一、實驗?zāi)康?.理解HDFS體系架構(gòu)。2.理解HDFS文件存儲原理和數(shù)據(jù)讀寫過程。3.熟練掌握HDFSWebUI界面的使用。4.熟練掌握HDFSShell常用命令的使用。5.熟練掌握HDFS項目開發(fā)環(huán)境的搭建。6.掌握使用HDFSJavaAPI編寫HDFS文件操作程序。二、實驗環(huán)境本實驗所需的軟件環(huán)境包括全分布模式Hadoop集群、Eclipse。三、實驗內(nèi)容1.啟動全分布模式Hadoop集群,守護進程包括NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager和JobHistoryServer。2.查看HDFSWeb界面。3.練習HDFSShell文件系統(tǒng)命令和系統(tǒng)管理命令。4.在Hadoop集群主節(jié)點上搭建HDFS開發(fā)環(huán)境Eclipse。5.使用HDFSJavaAPI編寫HDFS文件操作程序,實現(xiàn)上傳本地文件到HDFS的功能,采用本地執(zhí)行和集群執(zhí)行的兩種執(zhí)行方式測試,觀察結(jié)果。6.使用HDFSJavaAPI編寫HDFS文件操作程序,實現(xiàn)查看上傳文件在HDFS集群中位置的功能,采用本地執(zhí)行和集群執(zhí)行的兩種執(zhí)行方式測試,觀察結(jié)果。7.關(guān)閉全分布模式Hadoop集群。實驗2準備:分布式文件系統(tǒng)HDFS2.1初識HDFS2.2HDFS體系架構(gòu)2.3HDFS文件存儲原理2.4HDFS接口2.1初識HDFSHDFS(HadoopDistributedFileSystem)是Hadoop分布式文件系統(tǒng),是Hadoop三大核心之一,是針對谷歌文件系統(tǒng)GFS(GoogleFileSystem)的開源實現(xiàn)(TheGoogleFileSystem,2003)。HDFS是一個具有高容錯性的文件系統(tǒng),適合部署在廉價的機器上,HDFS能提供高吞吐量的數(shù)據(jù)訪問,非常適合大規(guī)模數(shù)據(jù)集上的應(yīng)用。大數(shù)據(jù)處理框架如MapReduce、Spark等要處理的數(shù)據(jù)源大部分都存儲在HDFS上,Hive、HBase等框架的數(shù)據(jù)通常也存儲在HDFS上。簡而言之,HDFS為大數(shù)據(jù)的存儲提供了保障。2.2HDFS體系架構(gòu)HDFS采用Master/Slave架構(gòu)模型,一個HDFS集群包括一個NameNode和多個DataNode。名稱節(jié)點NameNode為主節(jié)點,數(shù)據(jù)節(jié)點DataNode為從節(jié)點,文件被劃分為一系列的數(shù)據(jù)塊(Block)存儲在從節(jié)點DataNode上,NameNode是中心服務(wù)器,不存儲數(shù)據(jù),負責管理文件系統(tǒng)的名字空間(namespace)以及客戶端對文件的訪問。2.2HDFS體系架構(gòu)NameNodeNameNode運行在日常硬件上,通常只有一個,是整個文件系統(tǒng)的管理節(jié)點。它維護著整個文件系統(tǒng)的文件目錄樹,包括文件/目錄的元數(shù)據(jù)和每個文件對應(yīng)的數(shù)據(jù)塊列表,它負責接收用戶的操作請求。DataNodeDataNode也運行在日常硬件上,通常有多個,它為HDFS提供真實文件數(shù)據(jù)的存儲服務(wù)。HDFS數(shù)據(jù)存儲在DataNode上,數(shù)據(jù)塊的創(chuàng)建、復(fù)制和刪除都在DataNode上執(zhí)行。DataNode將HDFS數(shù)據(jù)以文件的形式存儲在本地的文件系統(tǒng)中,但并不知道有關(guān)HDFS文件的信息。DataNode把每個HDFS數(shù)據(jù)塊存儲在本地文件系統(tǒng)的一個單獨的文件中,并不在同一個目錄創(chuàng)建所有的文件,實際上,它用試探的方法來確定每個目錄的最佳文件數(shù)目,并且在適當?shù)臅r候創(chuàng)建子目錄。在同一個目錄中創(chuàng)建所有的本地文件并不是最優(yōu)的選擇,這是因為本地文件系統(tǒng)可能無法高效地在單個目錄中支持大量的文件。當一個DataNode啟動時,它會掃描本地文件系統(tǒng),產(chǎn)生一個這些本地文件對應(yīng)的所有HDFS數(shù)據(jù)塊的列表,然后作為報告發(fā)送到NameNode,這個報告就是塊狀態(tài)報告。2.3HDFS文件存儲原理1.Block2.Block副本管理策略3.數(shù)據(jù)讀取4.數(shù)據(jù)寫入1.BlockHDFS中的數(shù)據(jù)以文件塊Block的形式存儲,Block是最基本的存儲單位,每次讀寫的最小單元是一個Block。對于文件內(nèi)容而言,一個文件的長度大小是N,那么從文件的0偏移開始,按照固定的大小,順序?qū)ξ募M行劃分并編號,劃分好的每一個塊稱一個Block。Hadoop2.0中默認Block大小是128MB,以一個N=256MB的文件為例,被切分成256/128=2個Block。不同于普通文件系統(tǒng),HDFS中如果一個文件小于一個數(shù)據(jù)塊的大小,并不占用整個數(shù)據(jù)塊存儲空間。Block的大小可以根據(jù)實際需求進行配置,可以通過HDFS配置文件hdfs-site.xml中的參數(shù)dfs.blocksize來定義塊大小,但要注意,數(shù)字必須是2K,文件的大小可以不是Block大小的整數(shù)倍,這時最后一個塊可能存在剩余。例如,一個文件大小是260MB,在Hadoop2.0中占用三個塊,第三個塊只使用了4MB。2.Block副本管理策略HDFS采用多副本方式對數(shù)據(jù)進行冗余存儲,通常一個數(shù)據(jù)塊的多個副本會被分布到不同的DataNode上。HDFS提供可靠的算法實現(xiàn)在分布式環(huán)境中存儲大量數(shù)據(jù)。簡單來說,每個數(shù)據(jù)塊Block都存在副本以提高容錯性。默認情況下每個塊存在3個副本。數(shù)據(jù)塊的信息會定期由DataNode報送給NameNode,任何時候,當NameNode發(fā)現(xiàn)一個塊的副本個數(shù)少于3個或者多于3個時都會進行補充或者刪除。副本放置的基本原則是保證并非所有的副本都在同一個機架(Rack)上。這樣放置的好處在于提供高容錯性的同時降低延時,注意一個Rack可能包含多個DataNode,而數(shù)據(jù)分布在不同DataNode可以提高數(shù)據(jù)讀寫并發(fā)。對于多于3個副本的情況,其它副本將會隨機分布在不同DataNode,同時保證同一個機架中最多存在兩個副本??梢酝ㄟ^配置文件hdfs-site.xml中的參數(shù)dfs.replication來定義Block副本數(shù)。2.Block副本管理策略Block:123機架1121機架2232機架3331Block副本在機架中的放置策略Hadoop集群核心交換機1核心交換機k機架1機架2單層交換機單層交換機計算機1計算機2計算機1計算機2…………機架N單層交換機計算機1計算機2…Hadoop集群中機架邏輯結(jié)構(gòu)3.數(shù)據(jù)讀取HDFS的真實數(shù)據(jù)分散存儲在DataNode上,但是讀取數(shù)據(jù)時需要先經(jīng)過NameNode。HDFS數(shù)據(jù)讀取的基本過程為:首先客戶端連接到NameNode詢問某個文件的元數(shù)據(jù)信息,NameNode返回給客戶一個包含該文件各個塊位置信息(存儲在哪個DataNode)的列表;然后,客戶端直接連接對應(yīng)DataNode來并行讀取塊數(shù)據(jù);最后,當客戶得到所有塊后,再按照順序進行組裝,得到完整文件。為了提高物理傳輸速度,NameNode在返回塊的位置時,優(yōu)先選擇距離客戶更近的DataNode。3.數(shù)據(jù)讀取客戶端JVM1352數(shù)據(jù)節(jié)點DataNode235

5312客戶端DistributedFileSytemFSDataInputStreamDFSInputStream名稱節(jié)點NameNode2:獲取數(shù)據(jù)塊信息4:讀取請求7:關(guān)閉文件3:生成對象實例5:讀取數(shù)據(jù)6:讀取數(shù)據(jù)元數(shù)據(jù)(名稱,塊個數(shù),地址,……)1:打開文件6:讀取數(shù)據(jù)…數(shù)據(jù)節(jié)點DataNode數(shù)據(jù)節(jié)點DataNodeHDFS數(shù)據(jù)讀取過程4.數(shù)據(jù)寫入HDFS的設(shè)計遵循“一次寫入,多次讀取”的原則,所有數(shù)據(jù)只能添加不能更新。數(shù)據(jù)會被劃分為等尺寸的塊寫入不同的DataNode中。每個塊通常保存指定數(shù)量的副本(默認3個)。HDFS數(shù)據(jù)寫入基本過程為:客戶端向NameNode發(fā)送文件寫請求,NameNode給客戶分配寫權(quán)限,并隨機分配塊的寫入地址——DataNode的IP,兼顧副本數(shù)量和塊Rack自適應(yīng)算法,例如副本因子是3,則每個塊會分配到三個不同的DataNode,為了提高傳輸效率,客戶端只會向其中一個DataNode復(fù)制一個副本,另外兩個副本則由DataNode傳輸?shù)较噜廌ataNode。4.數(shù)據(jù)寫入客戶端JVM1352數(shù)據(jù)節(jié)點DataNode235

5312客戶端DistributedFileSytemFSDataOutputStreamDFSOutputStream2:創(chuàng)建文件元數(shù)據(jù)3:寫入數(shù)據(jù)6:關(guān)閉文件4:寫入數(shù)據(jù)包1:創(chuàng)建文件請求5:接收確認包44557:寫操作完成元數(shù)據(jù)(名稱,塊個數(shù),地址,……)名稱節(jié)點NameNode數(shù)據(jù)節(jié)點DataNode數(shù)據(jù)節(jié)點DataNodeHDFS數(shù)據(jù)寫入過程4.數(shù)據(jù)寫入數(shù)據(jù)寫入可以看作是一個流水線pipeline過程,具體來說,客戶端收到NameNode發(fā)送的塊存儲位置DataNode列表后,將做如下工作。(1)選擇DataNode列表中的第一個DataNode1,通過IP地址建立TCP連接。(2)客戶端通知DataNode1準備接收塊數(shù)據(jù),同時發(fā)送后續(xù)DataNode的IP地址給DataNode1,副本隨后會拷貝到這些DataNode。(3)DataNode1連接DataNode2,并通知DataNode2連接DataNode3,前一個DataNode發(fā)送副本數(shù)據(jù)給后一個DataNode,依次類推。(4)ack確認消息遵從相反的順序,即DataNode3收到完整塊副本后返回確認給DataNode2,DataNode2收到完整塊副本后返回確認給DataNode1。而DataNode1最后通知客戶端所有數(shù)據(jù)塊已經(jīng)成功復(fù)制。對于3個副本,DataNode1會發(fā)送3個ack給客戶端表示3個DataNode都成功接收。隨后,客戶端通知NameNode,完整文件寫入成功,NameNode更新元數(shù)據(jù)。(5)當客戶端接到通知流水線已經(jīng)建立完成后,將會準備發(fā)送數(shù)據(jù)塊到流水線中,然后逐個數(shù)據(jù)塊按序在流水線中傳輸。這樣以來,客戶端只需要發(fā)送一次,所有備份將在不同DataNode之間自動完成,提高了傳輸效率。2.4HDFS接口1.HDFSWebUI2.HDFSShell3.HDFSJavaAPI1.HDFSWebUIHDFSWebUI主要面向管理員,提供服務(wù)器基礎(chǔ)統(tǒng)計信息和文件系統(tǒng)運行狀態(tài)的查看功能,不支持配置更改操作。從該頁面上,管理員可以查看當前文件系統(tǒng)中各個節(jié)點的分布信息,瀏覽名稱節(jié)點上的存儲、登錄等日志,以及下載某個數(shù)據(jù)節(jié)點上某個文件的內(nèi)容。HDFSWebUI地址為http://NameNodeIP:50070。1.HDFSWebUI1.HDFSWebUI2.HDFSShell1)HDFS文件系統(tǒng)命令2)HDFS系統(tǒng)管理命令1)HDFS文件系統(tǒng)命令hadoopfs語法:hadoopfs[genericoptions]“hadoopfs”

使用面最廣,可以操作任何文件系統(tǒng),比如本地文件、HDFS文件、HFTP文件、S3文件系統(tǒng)等。hdfsdfs語法:hdfsdfs[genericoptions]“hdfsdfs”則是專門針對HDFS文件系統(tǒng)的操作?!癶adoopfs”命令幫助(部分)Usage:hadoopfs[genericoptions] [-appendToFile<localsrc>...<dst>] [-cat[-ignoreCrc]<src>...] [-checksum<src>...] [-chgrp[-R]GROUPPATH...] [-chmod[-R]<MODE[,MODE]...|OCTALMODE>PATH...] [-chown[-R][OWNER][:[GROUP]]PATH...] [-copyFromLocal[-f][-p][-l][-d]<localsrc>...<dst>] [-copyToLocal[-f][-p][-ignoreCrc][-crc]<src>...<localdst>] [-count[-q][-h][-v][-t[<storagetype>]][-u][-x]<path>...] [-cp[-f][-p|-p[topax]][-d]<src>...<dst>] [-createSnapshot<snapshotDir>[<snapshotName>]] [-deleteSnapshot<snapshotDir><snapshotName>] [-df[-h][<path>...]] [-du[-s][-h][-x]<path>...] [-expunge] [-find<path>...<expression>...] [-get[-f][-p][-ignoreCrc][-crc]<src>...<localdst>] [-getfacl[-R]<path>] [-getfattr[-R]{-nname|-d}[-een]<path>] [-getmerge[-nl][-skip-empty-file]<src><localdst>] [-help[cmd...]] [-ls[-C][-d][-h][-q][-R][-t][-S][-r][-u][<path>...]] [-mkdir[-p]<path>...] [-moveFromLocal<localsrc>...<dst>] [-moveToLocal<src><localdst>] [-mv<src>...<dst>] [-put[-f][-p][-l][-d]<localsrc>...<dst>] [-renameSnapshot<snapshotDir><oldName><newName>] [-rm[-f][-r|-R][-skipTrash][-safely]<src>...] [-rmdir[--ignore-fail-on-non-empty]<dir>...] [-setfacl[-R][{-b|-k}{-m|-x<acl_spec>}<path>]|[--set<acl_spec><path>]] [-setfattr{-nname[-vvalue]|-xname}<path>] [-setrep[-R][-w]<rep><path>...] [-stat[format]<path>...] [-tail[-f]<file>] [-test-[defsz]<path>] [-text[-ignoreCrc]<src>...] [-touchz<path>...] [-truncate[-w]<length><path>...] [-usage[cmd...]]HDFS文件系統(tǒng)命令說明(部分)命令選項功能-ls顯示文件的元數(shù)據(jù)信息或者目錄包含的文件列表信息-mv移動HDFS文件到指定位置-cp將文件從源路徑復(fù)制到目標路徑-rm刪除文件,“-rm-r”或者“-rm-R”可以遞歸刪除文件夾,文件夾可以包含子文件夾和子文件-rmdir刪除空文件夾,注意:如果文件夾非空,則刪除失敗-put從本地文件系統(tǒng)復(fù)制單個或多個源路徑上傳到HDFS,同時支持從標準輸入讀取源文件內(nèi)容后寫入目標位置-get復(fù)制源路徑指定的文件到本地文件系統(tǒng)目標路徑指定的文件或文件夾-cat將指定文件內(nèi)容輸出到標準輸出stdout-mkdir創(chuàng)建指定目錄-setrep改變文件的副本系數(shù),選項-R用于遞歸改變目錄下所有文件的副本系數(shù)選項-w表示等待副本操作結(jié)束才退出命令2)HDFS系統(tǒng)管理命令HDFS系統(tǒng)管理命令的入口是“hdfsdfsadmin”?!癶dfsdfsadmin”命令幫助(部分)Usage:hdfsdfsadminNote:AdministrativecommandscanonlyberunastheHDFSsuperuser. [-report[-live][-dead][-decommissioning][-enteringmaintenance][-inmaintenance]] [-safemode<enter|leave|get|wait>] [-saveNamespace] [-rollEdits] [-restoreFailedStoragetrue|false|check] [-refreshNodes] [-setQuota<quota><dirname>...<dirname>] [-clrQuota<dirname>...<dirname>] [-setSpaceQuota<quota>[-storageType<storagetype>]<dirname>...<dirname>] [-clrSpaceQuota[-storageType<storagetype>]<dirname>...<dirname>] [-finalizeUpgrade] [-rollingUpgrade[<query|prepare|finalize>]] [-refreshServiceAcl] [-refreshUserToGroupsMappings] [-refreshSuperUserGroupsConfiguration] [-refreshCallQueue] [-refresh<host:ipc_port><key>[arg1..argn] [-reconfig<namenode|datanode><host:ipc_port><start|status|properties>] [-printTopology] [-refreshNamenodesdatanode_host:ipc_port] [-getVolumeReportdatanode_host:ipc_port] [-deleteBlockPooldatanode_host:ipc_portblockpoolId[force]] [-setBalancerBandwidth<bandwidthinbytespersecond>] [-getBalancerBandwidth<datanode_host:ipc_port>] [-fetchImage<localdirectory>] [-allowSnapshot<snapshotDir>] [-disallowSnapshot<snapshotDir>] [-shutdownDatanode<datanode_host:ipc_port>[upgrade]] [-evictWriters<datanode_host:ipc_port>] [-getDatanodeInfo<datanode_host:ipc_port>] [-metasavefilename] [-triggerBlockReport[-incremental]<datanode_host:ipc_port>] [-listOpenFiles] [-help[cmd]]3.HDFSJavaAPIHDFS使用Java語言編寫,所以提供了豐富了Java編程接口供開發(fā)人員調(diào)用,當然HDFS同時支持其它語言如C++、Python等編程接口,但它們都沒有Java接口方便。凡是使用Shell命令可以完成的功能,都可以使用相應(yīng)JavaAPI來實現(xiàn),甚至使用API可以完成Shell命令不支持的功能。HDFSJavaAPI常用類類名說明org.apache.hadoop.fs.FileSystem通用文件系統(tǒng)基類,用于與HDFS文件系統(tǒng)交互,編寫的HDFS程序都需要重寫FileSystem類,通過該類,可以方便地像操作本地文件系統(tǒng)一樣操作HDFS集群文件org.apache.hadoop.fs.FSDataInputStream文件輸入流,用于讀取HDFS文件org.apache.hadoop.fs.FSDataOutputStream文件輸出流,向HDFS順序?qū)懭霐?shù)據(jù)流org.apache.hadoop.fs.Path文件與目錄定位類,用于定義HDFS集群中指定的目錄與文件絕對或相對路徑org.apache.hadoop.fs.FileStatus文件狀態(tài)顯示類,可以獲取文件與目錄的元數(shù)據(jù)、長度、塊大小、所屬用戶、編輯時間等信息;同時可以設(shè)置文件用戶、權(quán)限等內(nèi)容關(guān)于HDFSAPI的更多信息讀者請參考官網(wǎng)/docs/r2.9.2/api/index.html。HDFSJavaAPI【課后作業(yè)】實驗報告提交實驗報告2至平臺“實驗報告-實驗2實戰(zhàn)HDFS”?!緟⒖嘉墨I】

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論