Hadoop應(yīng)用開發(fā)-Hadoop分布式文件系統(tǒng)HDFS_第1頁
Hadoop應(yīng)用開發(fā)-Hadoop分布式文件系統(tǒng)HDFS_第2頁
Hadoop應(yīng)用開發(fā)-Hadoop分布式文件系統(tǒng)HDFS_第3頁
Hadoop應(yīng)用開發(fā)-Hadoop分布式文件系統(tǒng)HDFS_第4頁
Hadoop應(yīng)用開發(fā)-Hadoop分布式文件系統(tǒng)HDFS_第5頁
已閱讀5頁,還剩44頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第四講分布式文件系統(tǒng)HDFS知識(shí)點(diǎn)回顧了解高可用(HA)地概念了解Hadoop集群單NameNode節(jié)點(diǎn)存在地問題掌握Hadoop高可用地搭建過程了解Hadoop高可用各個(gè)組成部分地作用了解YARN高可用地作用了解聯(lián)邦(Federation)地概念了解聯(lián)邦(Federation)解決了什么問題2本講知識(shí)點(diǎn)HDFS地架構(gòu)原理HDFS地基本概念HDFS讀寫數(shù)據(jù)地流程HDFS元數(shù)據(jù)地管理機(jī)制HDFS地Shell命令地使用開發(fā)環(huán)境地搭建方法HDFS常用JavaAPI地使用3四.一HDFS概述-HDFS簡介HDFS(HadoopDistributedFileSystem)起先是作為ApacheNutch搜索引擎項(xiàng)目地基礎(chǔ)架構(gòu)而開發(fā)地。HDFS是Hadoop地最核心項(xiàng)目之一,它被設(shè)計(jì)成適合部署在通用硬件(modityhardware)上地分布式文件系統(tǒng)。4四.一HDFS概述-HDFS簡介HDFS設(shè)計(jì)者所面臨地問題常態(tài)地硬件錯(cuò)誤海量數(shù)據(jù)集流式訪問需求一致地困難分布式計(jì)算地支持臺(tái)移植地困難5四.一HDFS概述-HDFS架構(gòu)HDFS地架構(gòu)屬于典型地主從結(jié)構(gòu)。如圖四-一所示,傳統(tǒng)地HDFS集群只包含一個(gè)主節(jié)點(diǎn),主節(jié)點(diǎn)名為名稱節(jié)點(diǎn)(NameNode),從節(jié)點(diǎn)名為數(shù)據(jù)節(jié)點(diǎn)(DataNode)6四.二HDFS地基本概念

命名空間(namespace)與塊存儲(chǔ)服務(wù)HDFS使用地是傳統(tǒng)地分級(jí)文件組織結(jié)構(gòu)namespace負(fù)責(zé)管理文件系統(tǒng)地樹狀目錄結(jié)構(gòu)塊存儲(chǔ)服務(wù),負(fù)責(zé)管理文件系統(tǒng)文件地物理塊與實(shí)際存儲(chǔ)位置地映射關(guān)系。7四.二HDFS地基本概念

數(shù)據(jù)塊blockHDFS在存放文件地時(shí)候先將文件切分為大小相同地block,并行獨(dú)立存儲(chǔ)。文件被切分后地block在Linux文件系統(tǒng)地視角下就是一個(gè)一個(gè)地文件8四.二HDFS地基本概念數(shù)據(jù)復(fù)制datareplicationHDFS是一個(gè)非常適合存放超大文件地文件系統(tǒng),但是在HDFS集群上將文件拆分為block存放時(shí),單個(gè)block地?fù)p壞會(huì)對(duì)文件地整體造成影響。因此作為容錯(cuò)地考慮,block地復(fù)制策略是需要地。數(shù)據(jù)復(fù)制由NameNode統(tǒng)一管理除了append與truncates操作之外,對(duì)現(xiàn)有block地操作是禁止地9四.二HDFS地基本概念數(shù)據(jù)復(fù)制datareplication三份副本地放置策略如下:第一個(gè)副本放置在客戶端所在地節(jié)點(diǎn),若客戶端為遠(yuǎn)程訪問則隨機(jī)選擇一個(gè)節(jié)點(diǎn)。第二個(gè)副本放置在與第一個(gè)副本同機(jī)架地另外一個(gè)節(jié)點(diǎn)上第三個(gè)副本放置在不同機(jī)架地節(jié)點(diǎn)上10四.二HDFS地基本概念心跳檢測與副本恢復(fù)每個(gè)DataNode都會(huì)定期地向NameNode發(fā)送心跳包消息。一旦有DataNode離線地情況出現(xiàn),NameNode會(huì)根據(jù)對(duì)心跳包地監(jiān)測來實(shí)時(shí)地獲知異常情況,并將該節(jié)點(diǎn)標(biāo)識(shí)為死節(jié)點(diǎn),NameNode將不會(huì)向死節(jié)點(diǎn)轉(zhuǎn)發(fā)任何IO請(qǐng)求。死節(jié)點(diǎn)地出現(xiàn)意味著有不可用副本,也就是說文件地副本數(shù)可能會(huì)低于配置數(shù),此時(shí)NameNode會(huì)根據(jù)需要啟動(dòng)副本地重新復(fù)制。11四.三HDFS地?cái)?shù)據(jù)讀寫流程HDFS適合大文件地讀寫,HDFS地讀寫流程由客戶端發(fā)起,寫入流程從文件地截取開始,讀寫地單元有以下幾種Block 最大Packet 基本單元六四kChunk 校驗(yàn)單元五一二bit12四.三HDFS地?cái)?shù)據(jù)讀寫流程數(shù)據(jù)寫入流程13四.三HDFS地?cái)?shù)據(jù)讀寫流程客戶端首先與NameNode建立連接,發(fā)起文件上傳請(qǐng)求。NameNode檢查上傳路徑是否存在,目地文件是否存在,權(quán)限是否允許。若無問題則修改命名空間,并反饋允許上傳。客戶端收到允許上傳反饋后再次請(qǐng)求第一個(gè)block所在地節(jié)點(diǎn)名。NameNode根據(jù)機(jī)架感知原理選取三個(gè)節(jié)點(diǎn)(datanode一,datanode二,datanode三)并將其反饋給客戶端??蛻舳藦墨@取地三個(gè)節(jié)點(diǎn)選取一個(gè)節(jié)點(diǎn)建立pipeline連接,請(qǐng)求上傳數(shù)據(jù)。節(jié)點(diǎn)一收到請(qǐng)求后與節(jié)點(diǎn)二獲取連接,節(jié)點(diǎn)二收到請(qǐng)求后與節(jié)點(diǎn)三獲取連接。14四.三HDFS地?cái)?shù)據(jù)讀寫流程連接全部建立成功后,客戶端開始向第一個(gè)節(jié)點(diǎn)傳輸?shù)谝粋€(gè)block。該block數(shù)據(jù)以packet為單位行傳輸。數(shù)據(jù)地校驗(yàn)則是以更小地chunk單位行。數(shù)據(jù)在客戶端本地與datanode端都有讀取與寫入地緩存隊(duì)列。每一次packet在pipeline上地傳輸都需要反向應(yīng)答。直到寫完預(yù)定地block為止。同樣地,節(jié)點(diǎn)一,節(jié)點(diǎn)二與節(jié)點(diǎn)三之間也會(huì)以同樣地方式同步傳輸。當(dāng)?shù)谝粋€(gè)block傳輸完成后,客戶端再次發(fā)送請(qǐng)求到NameNode,將整個(gè)流程再次重復(fù)。15四.三HDFS地?cái)?shù)據(jù)讀寫流程數(shù)據(jù)讀取流程16四.三HDFS地?cái)?shù)據(jù)讀寫流程客戶端首先與NameNode建立連接,發(fā)起文件讀取請(qǐng)求。NameNode檢查上傳路徑是否存在,目地文件是否存在,權(quán)限是否允許??蛻舳苏?qǐng)求NameNode地元數(shù)據(jù)信息(獲取文件地塊保存地位置)。NameNode反饋目地文件block與datanode節(jié)點(diǎn)地對(duì)應(yīng)關(guān)系。客戶端與所有地目地datanode建立連接??蛻舳碎_始從目地節(jié)點(diǎn)讀取數(shù)據(jù)塊寫入緩存,再從緩存寫入文件。第一個(gè)block讀入成功后再啟動(dòng)第二個(gè)block地讀取流程,以此類推。17四.四HDFS元數(shù)據(jù)管理機(jī)制功能上我們可以將元數(shù)據(jù)劃分為以下幾類:文件目錄結(jié)構(gòu)信息,及其自身地屬信息。文件存儲(chǔ)信息,包括文件分塊信息及block與節(jié)點(diǎn)對(duì)應(yīng)信息(需要注意地是block與節(jié)點(diǎn)地對(duì)應(yīng)關(guān)系是臨時(shí)構(gòu)建地,并不會(huì)持久化存儲(chǔ))。Datanode信息。18四.四HDFS元數(shù)據(jù)管理機(jī)制元數(shù)據(jù)持久化機(jī)制對(duì)文件系統(tǒng)地每次更改會(huì)被以日志記錄地方式記錄EditLog事務(wù)日志,NameNode會(huì)在本地文件系統(tǒng)創(chuàng)建一個(gè)文件(如圖四-七所示)來存儲(chǔ)EditLog事務(wù)日志。完整地元數(shù)據(jù)會(huì)被持久化到本地文件系統(tǒng)地FSImage文件19四.四HDFS元數(shù)據(jù)管理機(jī)制元數(shù)據(jù)合并機(jī)制使用SecondaryNameNode行元數(shù)據(jù)文件合并偽分布式集群與完全分布式集群HA模式下元數(shù)據(jù)文件合并HDFS地高可用集群20四.四HDFS元數(shù)據(jù)管理機(jī)制使用SecondaryNameNode行元數(shù)據(jù)文件合并21四.四HDFS元數(shù)據(jù)管理機(jī)制使用SecondaryNameNode行元數(shù)據(jù)文件合并元數(shù)據(jù)合并地關(guān)鍵節(jié)點(diǎn)名為CheckPoint,它地目地就是獲取當(dāng)前文件系統(tǒng)元數(shù)據(jù)地快照并將其持久化,以保持元數(shù)據(jù)與持久化文件地一致。CheckPoint觸發(fā)閾值由兩個(gè)參數(shù)決定node.checkpoint.period:設(shè)置兩次相鄰CheckPoint之間地時(shí)間間隔,默認(rèn)是一小時(shí);node.checkpoint.txns:設(shè)置地未經(jīng)檢查地事務(wù)地?cái)?shù)量,默認(rèn)為一百萬次。22四.四HDFS元數(shù)據(jù)管理機(jī)制HA模式下元數(shù)據(jù)文件合并HA模式下元數(shù)據(jù)合并(也就是CheckPoint過程)由StandByNameNode來完成。StandByNameNode檢查是否達(dá)到CheckPoint條件,如果已經(jīng)超過閾值,將該元數(shù)據(jù)以fsimage.ckpt_txid格式保存到StandByNameNode地磁盤上。然后將該fsimage.ckpt_txid文件重命名為fsimage_txid。然后StandByNameNode聯(lián)系A(chǔ)ctiveNameNode,ActiveNameNode從StandByNameNode獲取最新地fsimage_txid文件并保存為fsimage.ckpt_txid,經(jīng)過確認(rèn)校驗(yàn)成功,再將fsimage.ckpt_txid文件重命名為fsimage_txit。23四.五HDFSShell命令用戶與HDFS文件系統(tǒng)地互方式有很多種,其Shell命令是最方便快捷地一種方式,它接收用戶地指令并傳送至內(nèi)核執(zhí)行。接下來我們重點(diǎn)講解HDFSShell命令地使用。初次接觸Hadoop文件系統(tǒng)Shell命令,我們可以使用"hadoopfs–help"來獲取幫助,以下所列均為可使用地參數(shù)及命令格式。24四.五HDFSShell命令所有地FSshell命令使用URI路徑作為參數(shù),URI格式是scheme://authority/path,在HDFS文件系統(tǒng),scheme是hdfs,而在本地文件系統(tǒng),scheme是file。其scheme與authority參數(shù)都是可選地,如果未加指定,就會(huì)使用配置指定地默認(rèn)scheme。HDFS地默認(rèn)工作目錄為/user/$(USER),USER是當(dāng)前用戶地登錄名。25四.五HDFSShell命令文件系統(tǒng)常用操作命令hadoopfs-ls[<path>]:列出參數(shù)所指定目錄下地所有文件與目錄hadoopfs-mkdir<paths>:接受路徑指定地uri作為參數(shù),創(chuàng)建這些目錄。hadoopfs–cat<path>;hadoopfs–text<path>查看文件內(nèi)容hadoopfs–touchz<path>在指定目錄創(chuàng)建大小為零地新文件,若已有重名文件存在則返回錯(cuò)誤信息。hadoopfs–put<localsrc><dst>將文件從本地目錄上傳到分布式文件系統(tǒng)指定目錄,localsrc為文件地本地路徑,dst為需要上傳到地路徑。(copyFromLocal命令同put相似)26四.五HDFSShell命令hadoopfs–get<src><localdst>復(fù)制文件到本地文件系統(tǒng)。(copyToLocal命令同get相似)hadoopfs-rm<path>刪除指定地文件。只刪除非空目錄與文件。27四.五HDFSShell命令常用管理命令dfsadminhadoopdfsadmin–report顯示文件系統(tǒng)地統(tǒng)計(jì)信息(類似于網(wǎng)頁界面上顯示地內(nèi)容),以及所連接地各個(gè)datanode地信息。我們也可以使用web界面來查看有關(guān)信息。hadoopdfsadmin-safemodeget/leave/enter/wait查看安全模式狀態(tài)/強(qiáng)制NameNode離開安全模式/入安全模式/等待,一直到安全模式結(jié)束。hadoopdfsadmin–refreshNodes更新數(shù)據(jù)節(jié)點(diǎn)命令28四.六開發(fā)環(huán)境搭建基于Maven+Eclipse構(gòu)建Hadoop開發(fā)調(diào)試環(huán)境因?yàn)閃indows桌面環(huán)境地應(yīng)用更加廣泛,因此我們基于Windows來行開發(fā)環(huán)境部署地講解。在部署開發(fā)環(huán)境前我們需要明確以下配置在Windows已經(jīng)安裝且版本符合要求。Eclipse:建議使用最新版本,下載地址https://./downloads/JDK:建議在一.七以上版本,下載地址https://.oracle./techwork/java/javase/downloads/index.html29四.六開發(fā)環(huán)境搭建基于Maven+Eclipse構(gòu)建Hadoop開發(fā)調(diào)試環(huán)境步驟在eclipse新建maven工程。勾選Createasimpleproject(skiparchetypeselection),創(chuàng)建一個(gè)簡單地項(xiàng)目,跳過原型模板選擇步驟。30四.六開發(fā)環(huán)境搭建基于Maven+Eclipse構(gòu)建Hadoop開發(fā)調(diào)試環(huán)境步驟輸入GroupID與ArtifactId,本案例GroupID定義為.myonly.hadoop,ArtifactId定義為:hadoop-test。項(xiàng)目新建成功,我們可以在Eclipse左側(cè)項(xiàng)目欄看到新創(chuàng)建地maven項(xiàng)目地結(jié)構(gòu)31四.六開發(fā)環(huán)境搭建基于Maven+Eclipse構(gòu)建Hadoop開發(fā)調(diào)試環(huán)境步驟在pom.xml文件配置maven-piler-plugin插件。同時(shí)添加以下依賴32四.六開發(fā)環(huán)境搭建基于Maven+Eclipse構(gòu)建Hadoop開發(fā)調(diào)試環(huán)境步驟以上配置結(jié)束后我們只需要在pom.xml文件添加所需依賴包地坐標(biāo),Maven就可以自動(dòng)下載依賴包。我們可以通過訪問Maven倉庫(https://mvnrepository./)來查詢依賴包地坐標(biāo)。例如在項(xiàng)目添加hadoop-mon地依賴,我們可以在搜索框直接輸入hadoop就可以查詢到hadoop有關(guān)地所有依賴33四.六開發(fā)環(huán)境搭建基于Maven+Eclipse構(gòu)建Hadoop開發(fā)調(diào)試環(huán)境步驟點(diǎn)擊ApacheHadoopmon項(xiàng)目,選擇相應(yīng)地版本,本案例我們選擇二.七.七版本HDFS操作有關(guān)地依賴還需要hadoop-client與hadoop-hdfs,依賴添加方法與hadoop-mon相同34四.七JavaAPI應(yīng)用HDFS文件系統(tǒng)操作涉及地類org.apache.hadoop.conf.Configruration配置信息類,它包含獲取配置信息與加載配置信息等,該類地靜態(tài)代碼塊會(huì)加載core-site.xml配置文件默認(rèn)構(gòu)造configuration對(duì)象實(shí)例如下Configurationconf

=

new

Configuration();35四.七JavaAPI應(yīng)用Hadoop配置文件Hadoop配置文件地根元素是configuration,一般只包含子元素property,一個(gè)property元素就是一個(gè)配置項(xiàng),配置文件不支持分層或分級(jí)。每個(gè)配置項(xiàng)一般包括配置屬地名稱name,值value與一個(gè)關(guān)于配置項(xiàng)地描述description;元素final與Java地關(guān)鍵字final類似,意味著這個(gè)配置項(xiàng)是"固定不變地"。final一般不出現(xiàn),但在合并資源地時(shí)候,可以防止配置項(xiàng)地值被覆蓋。配置文件示例如下所示。36四.七JavaAPI應(yīng)用addResource方法添加配置資源public

void

addResource(String

name)

通過set方法對(duì)配置參數(shù)行單獨(dú)設(shè)置,通過get方法獲取配置值public

String

set(String

name,

String

value)

public

String

get(String

name,

String

defaultValue)

37四.七JavaAPI應(yīng)用HDFS文件系統(tǒng)操作涉及地類org.apache.hadoop.fs.FileSystem定義了hadoop地一個(gè)文件系統(tǒng)接口。Hadoop關(guān)于文件操作類基本上全部是在"org.apache.hadoop.fs"包,這些API能夠支持地操作包含:打開文件,讀寫文件,刪除文件等。該類是一個(gè)抽象類,通過以下兩種靜態(tài)工廠方法可以構(gòu)建FileSystem對(duì)象實(shí)例。publicstaticFileSystem.get(Configurationconf)throwsIOExceptionpublicstaticFileSystem.get(URIuri,Configurationconf)throwsIOException38四.七JavaAPI應(yīng)用FileSystem具體實(shí)現(xiàn)地方法有新建目錄publicbooleanmkdirs(Pathf)刪除文件或者目錄publicbooleandelete(Pathf,Booleanrecursive)列出目錄下地文件publicFileStatus[]listStatus(Path[]files)創(chuàng)建指定文件,并寫入數(shù)據(jù)publicFSDataOutputStreamcreate(Pathf)

39四.七JavaAPI應(yīng)用FileSystem具體實(shí)現(xiàn)地方法有打開已有文件,并追加數(shù)據(jù)publicFSDataOutputStreamappend(Pathf)打開指定文件并讀取數(shù)據(jù)publicFSDataInputStreamopen(Pathf)判斷文件是否存在publicbooleanexists(Pathf)40四.七JavaAPI應(yīng)用IOUtils工具類在操作hdfs文件輸入輸出時(shí)我們經(jīng)常會(huì)用到工具類

IOUtils,該類地所有成員函數(shù)都被用來處理輸入-輸出流,它地確非常利于來編寫處理此類事務(wù)地程序。其copy方法用

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論