2023學(xué)年完整公開(kāi)課版任務(wù)641HDFS_第1頁(yè)
2023學(xué)年完整公開(kāi)課版任務(wù)641HDFS_第2頁(yè)
2023學(xué)年完整公開(kāi)課版任務(wù)641HDFS_第3頁(yè)
2023學(xué)年完整公開(kāi)課版任務(wù)641HDFS_第4頁(yè)
2023學(xué)年完整公開(kāi)課版任務(wù)641HDFS_第5頁(yè)
已閱讀5頁(yè),還剩43頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

任務(wù)6-4-1HDFS

目錄分布式文件系統(tǒng)HDFSHDFS存儲(chǔ)原理HDFS讀寫(xiě)過(guò)程HDFS體系結(jié)構(gòu)31.分布式文件系統(tǒng)

分布式文件系統(tǒng):它是一種通過(guò)網(wǎng)絡(luò)實(shí)現(xiàn)文件在多臺(tái)主機(jī)上進(jìn)行分布式存儲(chǔ)的文件系統(tǒng)。分布式文件系統(tǒng)的設(shè)計(jì)一般采用“客戶機(jī)/服務(wù)器(Client/Server)”模式。目前廣泛運(yùn)用到的分布式文件系統(tǒng)主要包括GFS和HDFS,后者是針對(duì)前者的開(kāi)源實(shí)現(xiàn)。4計(jì)算機(jī)集群結(jié)構(gòu)普通的文件系統(tǒng)只需要單個(gè)計(jì)算機(jī)節(jié)點(diǎn)就可以完成文件的存儲(chǔ)和處理,單個(gè)計(jì)算機(jī)節(jié)點(diǎn)由處理器、內(nèi)存、高速緩存和本地磁盤(pán)構(gòu)成。分布式文件系統(tǒng)把文件分布存儲(chǔ)到多個(gè)計(jì)算機(jī)節(jié)點(diǎn)上,成千上萬(wàn)的計(jì)算機(jī)節(jié)點(diǎn)構(gòu)成計(jì)算機(jī)集群。與之前使用多個(gè)處理器和專(zhuān)用高級(jí)硬件的并行化處理裝置不同的是,目前的分布式文件系統(tǒng)所采用的計(jì)算機(jī)集群都是由普通硬件構(gòu)成的,這就大大降低了硬件上的開(kāi)銷(xiāo)。5計(jì)算機(jī)集群結(jié)構(gòu)集群中的計(jì)算機(jī)節(jié)點(diǎn)存放在機(jī)架(Rack)上,每個(gè)機(jī)架可以存放8~64個(gè)節(jié)點(diǎn),同一機(jī)架上的不同節(jié)點(diǎn)之間通過(guò)網(wǎng)絡(luò)互連(常采用吉比特以太網(wǎng)),多個(gè)不同機(jī)架之間采用另一級(jí)網(wǎng)絡(luò)或交換機(jī)互連。6分布式文件系統(tǒng)的結(jié)構(gòu)與普通文件系統(tǒng)類(lèi)似,分布式文件系統(tǒng)也采用了塊的概念,文件被分成若干個(gè)塊進(jìn)行存儲(chǔ),塊是數(shù)據(jù)讀寫(xiě)的基本單元,只不過(guò)分布式文件系統(tǒng)的塊要比操作系統(tǒng)中的塊大很多。比如,HDFS默認(rèn)的一個(gè)塊的大小是64MB。與普通文件不同的是,在分布式文件系統(tǒng)中,如果一個(gè)文件小于一個(gè)數(shù)據(jù)塊的大小,它并不占用整個(gè)數(shù)據(jù)塊的存儲(chǔ)空間。

7分布式文件系統(tǒng)的結(jié)構(gòu)分布式文件系統(tǒng)在物理結(jié)構(gòu)上是由計(jì)算機(jī)集群中的多個(gè)節(jié)點(diǎn)構(gòu)成的,這些節(jié)點(diǎn)分為兩類(lèi):一類(lèi)叫“主節(jié)點(diǎn)”(MasterNode),或者也被稱(chēng)為“名稱(chēng)節(jié)點(diǎn)”(NameNode);另一類(lèi)叫“從節(jié)點(diǎn)”(SlaveNode),或者也被稱(chēng)為“數(shù)據(jù)節(jié)點(diǎn)”(DataNode)。

8分布式文件系統(tǒng)的結(jié)構(gòu)計(jì)算機(jī)集群中的節(jié)點(diǎn)可能發(fā)生故障,因此為了保證數(shù)據(jù)的完整性,分布式文件系統(tǒng)通常采用多副本存儲(chǔ)。文件塊會(huì)被復(fù)制為多個(gè)副本,存儲(chǔ)在不同的節(jié)點(diǎn)上,而且存儲(chǔ)同一文件塊的不同副本的各個(gè)節(jié)點(diǎn)會(huì)分布在不同的機(jī)架上,這樣,在單個(gè)節(jié)點(diǎn)出現(xiàn)故障時(shí),就可以快速調(diào)用副本重啟單個(gè)節(jié)點(diǎn)上的計(jì)算過(guò)程,而不用重啟整個(gè)計(jì)算過(guò)程,整個(gè)機(jī)架出現(xiàn)故障時(shí)也不會(huì)丟失所有文件塊。文件塊的大小和副本個(gè)數(shù)通??梢杂捎脩糁付?。

9分布式文件系統(tǒng)的設(shè)計(jì)需求分布式文件系統(tǒng)的設(shè)計(jì)目標(biāo)主要包括透明性、并發(fā)控制、可伸縮性、容錯(cuò)以及安全需求等。但是,在具體實(shí)現(xiàn)中,不同產(chǎn)品實(shí)現(xiàn)的級(jí)別和方式都有所不同。設(shè)計(jì)需求含義HDFS的實(shí)現(xiàn)情況透明性具備訪問(wèn)透明性、位置透明性、性能和伸縮透明性。只能提供一定程度的訪問(wèn)透明性,完全支持位置透明性、性能和伸縮透明性并發(fā)控制客戶端對(duì)于文件的讀寫(xiě)不應(yīng)該影響其他客戶端對(duì)同一文件的讀寫(xiě)機(jī)制非常簡(jiǎn)單,任何時(shí)間都允許有一個(gè)程序?qū)懭肽硞€(gè)文件文件復(fù)制一個(gè)文件可以擁有在不同位置的多個(gè)副本HDFS采用了多副本機(jī)制硬件和操作系統(tǒng)的異構(gòu)性可以在不同的操作系統(tǒng)和計(jì)算機(jī)上實(shí)現(xiàn)同樣的客戶端和服務(wù)器端程序采用Java語(yǔ)言開(kāi)發(fā),具有很好的跨平臺(tái)能力可伸縮性支持節(jié)點(diǎn)的動(dòng)態(tài)加入或退出建立在大規(guī)模廉價(jià)機(jī)器上的分布式文件系統(tǒng)集群,具有很好的可伸縮性容錯(cuò)保證文件服務(wù)在客戶端或者服務(wù)器端出現(xiàn)問(wèn)題的時(shí)候能正常使用具有多副本機(jī)制和故障自動(dòng)檢測(cè)、恢復(fù)機(jī)制安全保障系統(tǒng)的安全性安全性較弱102.HDFSHDFS開(kāi)源實(shí)現(xiàn)了GFS的基本思想。HDFS原來(lái)是ApacheNutch搜索引擎的一部分,后來(lái)獨(dú)立出來(lái)作為一個(gè)Apache子項(xiàng)目,并和MapReduce一起成為Hadoop的核心組成部分。11HDFS實(shí)現(xiàn)的目標(biāo)兼容廉價(jià)的硬件設(shè)備

在成百上千臺(tái)廉價(jià)服務(wù)器中存儲(chǔ)數(shù)據(jù),常會(huì)出現(xiàn)節(jié)點(diǎn)失效的情況,因此HDFS設(shè)計(jì)了快速檢測(cè)硬件故障和進(jìn)行自動(dòng)恢復(fù)的機(jī)制,可以實(shí)現(xiàn)持續(xù)監(jiān)視、錯(cuò)誤檢查、容錯(cuò)處理和自動(dòng)恢復(fù),從而使得在硬件出錯(cuò)的情況下也能實(shí)現(xiàn)數(shù)據(jù)的完整性。流數(shù)據(jù)讀寫(xiě)

普通文件系統(tǒng)主要用于隨機(jī)讀寫(xiě)以及與用戶進(jìn)行交互,而HDFS則是為了滿足批量數(shù)據(jù)處理的要求而設(shè)計(jì)的,因此為了提高數(shù)據(jù)吞吐率,HDFS放松了一些POSIX的要求,從而能夠以流式方式來(lái)訪問(wèn)文件系統(tǒng)數(shù)據(jù)。12HDFS實(shí)現(xiàn)的目標(biāo)大數(shù)據(jù)集HDFS中的文件通??梢赃_(dá)到GB甚至TB級(jí)別,一個(gè)數(shù)百臺(tái)機(jī)器組成的集群里面可以支持千萬(wàn)級(jí)別這樣的文件。簡(jiǎn)單的文件模型HDFS采用了“一次寫(xiě)入、多次讀取”的簡(jiǎn)單文件模型,文件一旦完成寫(xiě)入,關(guān)閉后就無(wú)法再次寫(xiě)入,只能被讀取。13HDFS實(shí)現(xiàn)的目標(biāo)強(qiáng)大的跨平臺(tái)兼容性。

HDFS是采用Java語(yǔ)言實(shí)現(xiàn)的,具有很好的跨平臺(tái)兼容性,支持JVM(JavaVirtualMachine)的機(jī)器都可以運(yùn)行HDFS。14HDFS不足之處不適合低延遲數(shù)據(jù)訪問(wèn)HDFS主要是面向大規(guī)模數(shù)據(jù)批量處理而設(shè)計(jì)的,采用流式數(shù)據(jù)讀取,具有很高的數(shù)據(jù)吞吐率,但是,這也意味著較高的延遲。因此,HDFS不適合用在需要較低延遲(如數(shù)十毫秒)的應(yīng)用場(chǎng)合。對(duì)于低延時(shí)要求的應(yīng)用程序而言,HBase是一個(gè)更好的選擇。流數(shù)據(jù)讀寫(xiě)。15HDFS不足之處無(wú)法高效存儲(chǔ)大量小文件

小文件是指文件大小小于一個(gè)塊的文件,HDFS無(wú)法高效存儲(chǔ)和處理大量小文件,過(guò)多小文件會(huì)給系統(tǒng)擴(kuò)展性和性能帶來(lái)諸多問(wèn)題。不支持多用戶寫(xiě)入及任意修改文件。HDFS只允許一個(gè)文件有一個(gè)寫(xiě)入者,不允許多個(gè)用戶對(duì)同一個(gè)文件執(zhí)行寫(xiě)操作,而且只允許對(duì)文件執(zhí)行追加操作,不能執(zhí)行隨機(jī)寫(xiě)操作。16相關(guān)概念--塊在傳統(tǒng)的文件系統(tǒng)中,為了提高磁盤(pán)讀寫(xiě)效率,一般以數(shù)據(jù)塊為單位,而不是以字節(jié)為單位。HDFS也同樣采用了塊的概念,默認(rèn)的一個(gè)塊大小是64MB。在HDFS中的文件會(huì)被拆分成多個(gè)塊,每個(gè)塊作為獨(dú)立的單元進(jìn)行存儲(chǔ)。17相關(guān)概念--塊HDFS這么做的原因:是為了最小化尋址開(kāi)銷(xiāo)。HDFS尋址開(kāi)銷(xiāo)不僅包括磁盤(pán)尋道開(kāi)銷(xiāo),還包括數(shù)據(jù)塊的定位開(kāi)銷(xiāo)。因此,HDFS在文件塊大小設(shè)置上要遠(yuǎn)遠(yuǎn)大于普通文件系統(tǒng),以期在處理大規(guī)模文件時(shí)能夠獲得更好的性能。HDFS在塊的大小的設(shè)計(jì)上明顯要大于普通文件系統(tǒng)。18相關(guān)概念--塊HDFS采用抽象的塊概念可以帶來(lái)以下幾個(gè)明顯的好處:支持大規(guī)模文件存儲(chǔ)。簡(jiǎn)化系統(tǒng)設(shè)計(jì)。適合數(shù)據(jù)備份。19相關(guān)概念--名稱(chēng)節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)名稱(chēng)節(jié)點(diǎn)

負(fù)責(zé)管理分布式文件系統(tǒng)的命名空間,保存了兩個(gè)核心的數(shù)據(jù)結(jié)構(gòu),即FsImage和EditLog。數(shù)據(jù)節(jié)點(diǎn)

是分布式文件系統(tǒng)HDFS的工作節(jié)點(diǎn),負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)和讀取,會(huì)根據(jù)客戶端或者名稱(chēng)節(jié)點(diǎn)的調(diào)度來(lái)進(jìn)行數(shù)據(jù)的存儲(chǔ)和檢索,并且向名稱(chēng)節(jié)點(diǎn)定期發(fā)送自己所存儲(chǔ)的塊的列表。每個(gè)數(shù)據(jù)節(jié)點(diǎn)中的數(shù)據(jù)會(huì)被保存在各自節(jié)點(diǎn)的本地Linux文件系統(tǒng)中。20相關(guān)概念--第二名稱(chēng)節(jié)點(diǎn)如果EditLog很大,就會(huì)導(dǎo)致整個(gè)過(guò)程變得非常緩慢,使得名稱(chēng)節(jié)點(diǎn)在啟動(dòng)過(guò)程中長(zhǎng)期處于“安全模式”,無(wú)法正常對(duì)外提供寫(xiě)操作,影響了用戶的使用。為了有效解決EditLog逐漸變大帶來(lái)的問(wèn)題,HDFS在設(shè)計(jì)中采用了第二名稱(chēng)節(jié)點(diǎn)。21相關(guān)概念--第二名稱(chēng)節(jié)點(diǎn)第二名稱(chēng)節(jié)點(diǎn)是HDFS架構(gòu)的一個(gè)重要組成部分,具有兩個(gè)方面的功能:首先,可以完成EditLog與FsImage的合并操作,減小EditLog文件大小,縮短名稱(chēng)節(jié)點(diǎn)重啟時(shí)間;其次,可以作為名稱(chēng)節(jié)點(diǎn)的“檢查點(diǎn)”,保存名稱(chēng)節(jié)點(diǎn)中的元數(shù)據(jù)信息。具體如下。223.HDFS體系結(jié)構(gòu)HDFS采用了主從(Master/Slave)結(jié)構(gòu)模型,一個(gè)HDFS集群包括一個(gè)名稱(chēng)節(jié)點(diǎn)和若干個(gè)數(shù)據(jù)節(jié)點(diǎn)。23HDFS體系結(jié)構(gòu)每個(gè)數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)實(shí)際上是保存在本地Linux文件系統(tǒng)中的。每個(gè)數(shù)據(jù)節(jié)點(diǎn)會(huì)周期性地向名稱(chēng)節(jié)點(diǎn)發(fā)送“心跳”信息,報(bào)告自己的狀態(tài),沒(méi)有按時(shí)發(fā)送心跳信息的數(shù)據(jù)節(jié)點(diǎn)會(huì)被標(biāo)記為“宕機(jī)”,不會(huì)再給它分配任何I/O請(qǐng)求。24HDFS命名空間管理HDFS的命名空間包含目錄、文件和塊。命名空間管理是指命名空間支持對(duì)HDFS中的目錄、文件和塊做類(lèi)似文件系統(tǒng)的創(chuàng)建、修改、刪除等基本操作。在當(dāng)前的HDFS體系結(jié)構(gòu)中,在整個(gè)HDFS集群中只有一個(gè)命名空間,并且只有唯一一個(gè)名稱(chēng)節(jié)點(diǎn),該節(jié)點(diǎn)負(fù)責(zé)對(duì)這個(gè)命名空間進(jìn)行管理。HDFS使用的是傳統(tǒng)的分級(jí)文件體系,因此用戶可以像使用普通文件系統(tǒng)一樣,創(chuàng)建、刪除目錄和文件,在目錄間轉(zhuǎn)移文件、重命名文件等。25通信協(xié)議HDFS是一個(gè)部署在集群上的分布式文件系統(tǒng),因此很多數(shù)據(jù)需要通過(guò)網(wǎng)絡(luò)進(jìn)行傳輸。所有的HDFS通信協(xié)議都是構(gòu)建在TCP/IP協(xié)議基礎(chǔ)之上的??蛻舳送ㄟ^(guò)一個(gè)可配置的端口向名稱(chēng)節(jié)點(diǎn)主動(dòng)發(fā)起TCP連接,并使用客戶端協(xié)議與名稱(chēng)節(jié)點(diǎn)進(jìn)行交互。名稱(chēng)節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)之間則使用數(shù)據(jù)節(jié)點(diǎn)協(xié)議進(jìn)行交互??蛻舳伺c數(shù)據(jù)節(jié)點(diǎn)的交互是通過(guò)RPC(RemoteProcedureCall)來(lái)實(shí)現(xiàn)的。26客戶端客戶端是用戶操作HDFS最常用的方式,HDFS在部署時(shí)都提供了客戶端。不過(guò)需要說(shuō)明的是,嚴(yán)格來(lái)說(shuō),客戶端并不算是HDFS的一部分??蛻舳丝梢灾С执蜷_(kāi)、讀取、寫(xiě)入等常見(jiàn)的操作,并且提供了類(lèi)似Shell的命令行方式來(lái)訪問(wèn)HDFS中的數(shù)據(jù)。27HDFS體系結(jié)構(gòu)的局限性HDFS只設(shè)置唯一一個(gè)名稱(chēng)節(jié)點(diǎn),這樣做雖然大大簡(jiǎn)化了系統(tǒng)設(shè)計(jì),但也帶來(lái)了一些明顯的局限性,具體如下。(1)命名空間的限制。名稱(chēng)節(jié)點(diǎn)是保存在內(nèi)存中的,因此名稱(chēng)節(jié)點(diǎn)能夠容納對(duì)象(文件、塊)的個(gè)數(shù)會(huì)受到內(nèi)存空間大小的限制。(2)性能的瓶頸。整個(gè)分布式文件系統(tǒng)的吞吐量受限于單個(gè)名稱(chēng)節(jié)點(diǎn)的吞吐量。(3)隔離問(wèn)題。由于集群中只有一個(gè)名稱(chēng)節(jié)點(diǎn),只有一個(gè)命名空間,因此無(wú)法對(duì)不同應(yīng)用程序進(jìn)行隔離。(4)集群的可用性。一旦這個(gè)唯一的名稱(chēng)節(jié)點(diǎn)發(fā)生故障,會(huì)導(dǎo)致整個(gè)集群變得不可用。284.HDFS的存儲(chǔ)原理作為一個(gè)分布式文件系統(tǒng),為了保證系統(tǒng)的容錯(cuò)性和可用性,HDFS采用了多副本方式對(duì)數(shù)據(jù)進(jìn)行冗余存儲(chǔ),通常一個(gè)數(shù)據(jù)塊的多個(gè)副本會(huì)被分布到不同的數(shù)據(jù)節(jié)點(diǎn)上,數(shù)據(jù)塊1被分別存放到數(shù)據(jù)節(jié)點(diǎn)A和C上,數(shù)據(jù)塊2被存放在數(shù)據(jù)節(jié)點(diǎn)A和B上。29數(shù)據(jù)的冗余存儲(chǔ)這種多副本方式具有以下3個(gè)優(yōu)點(diǎn):(1)加快數(shù)據(jù)傳輸速度。當(dāng)多個(gè)客戶端需要同時(shí)訪問(wèn)同一個(gè)文件時(shí),可以讓各個(gè)客戶端分別從不同的數(shù)據(jù)塊副本中讀取數(shù)據(jù),這就大大加快了數(shù)據(jù)傳輸速度。(2)容易檢查數(shù)據(jù)錯(cuò)誤。HDFS的數(shù)據(jù)節(jié)點(diǎn)之間通過(guò)網(wǎng)絡(luò)傳輸數(shù)據(jù),采用多個(gè)副本可以很容易判斷數(shù)據(jù)傳輸是否出錯(cuò)。(3)保證數(shù)據(jù)的可靠性。即使某個(gè)數(shù)據(jù)節(jié)點(diǎn)出現(xiàn)故障失效,也不會(huì)造成數(shù)據(jù)丟失。30數(shù)據(jù)存取策略數(shù)據(jù)存取策略包括數(shù)據(jù)存放、數(shù)據(jù)讀取和數(shù)據(jù)復(fù)制等方面,它在很大程度上會(huì)影響到整個(gè)分布式文件系統(tǒng)的讀寫(xiě)性能,是分布式文件系統(tǒng)的核心內(nèi)容。31數(shù)據(jù)存取策略—數(shù)據(jù)存放為了提高數(shù)據(jù)的可靠性與系統(tǒng)的可用性,以及充分利用網(wǎng)絡(luò)帶寬,HDFS采用了以機(jī)架(Rack)為基礎(chǔ)的數(shù)據(jù)存放策略。32數(shù)據(jù)存取策略—數(shù)據(jù)讀取HDFS提供了一個(gè)API可以確定一個(gè)數(shù)據(jù)節(jié)點(diǎn)所屬的機(jī)架ID,客戶端也可以調(diào)用API獲取自己所屬的機(jī)架ID。當(dāng)客戶端讀取數(shù)據(jù)時(shí),從名稱(chēng)節(jié)點(diǎn)獲得數(shù)據(jù)塊不同副本的存放位置列表,列表中包含了副本所在的數(shù)據(jù)節(jié)點(diǎn),可以調(diào)用API來(lái)確定客戶端和這些數(shù)據(jù)節(jié)點(diǎn)所屬的機(jī)架ID。33數(shù)據(jù)存取策略—數(shù)據(jù)復(fù)制HDFS的數(shù)據(jù)復(fù)制采用了流水線復(fù)制的策略,大大提高了數(shù)據(jù)復(fù)制過(guò)程的效率。當(dāng)客戶端要往HDFS中寫(xiě)入一個(gè)文件時(shí),這個(gè)文件會(huì)首先被寫(xiě)入本地,并被切分成若干個(gè)塊,每個(gè)塊的大小是由HDFS的設(shè)定值來(lái)決定的。每個(gè)塊都向HDFS集群中的名稱(chēng)節(jié)點(diǎn)發(fā)起寫(xiě)請(qǐng)求,名稱(chēng)節(jié)點(diǎn)會(huì)根據(jù)系統(tǒng)中各個(gè)數(shù)據(jù)節(jié)點(diǎn)的使用情況,選擇一個(gè)數(shù)據(jù)節(jié)點(diǎn)列表返回給客戶端,然后客戶端就把數(shù)據(jù)首先寫(xiě)入列表中的第一個(gè)數(shù)據(jù)節(jié)點(diǎn),同時(shí)把列表傳給第一個(gè)數(shù)據(jù)節(jié)點(diǎn)。34數(shù)據(jù)錯(cuò)誤與恢復(fù)HDFS具有較高的容錯(cuò)性,可以兼容廉價(jià)的硬件,它把硬件出錯(cuò)看成一種常態(tài),而不是異常,并設(shè)計(jì)了相應(yīng)的機(jī)制檢測(cè)數(shù)據(jù)錯(cuò)誤和進(jìn)行自動(dòng)恢復(fù),主要包括以下3種情形。35數(shù)據(jù)錯(cuò)誤與恢復(fù)名稱(chēng)節(jié)點(diǎn)出錯(cuò)

名稱(chēng)節(jié)點(diǎn)保存了所有的元數(shù)據(jù)信息,其中最核心的兩大數(shù)據(jù)結(jié)構(gòu)是FsImage和EditLog,如果這兩個(gè)文件發(fā)生損壞,那么整個(gè)HDFS實(shí)例將失效。Hadoop采用兩種機(jī)制來(lái)確保名稱(chēng)節(jié)點(diǎn)的安全:

第一,把名稱(chēng)節(jié)點(diǎn)上的元數(shù)據(jù)信息同步存儲(chǔ)到其他文件系統(tǒng)(比如遠(yuǎn)程掛載的網(wǎng)絡(luò)文件系統(tǒng)NFS)中;

第二,運(yùn)行一個(gè)第二名稱(chēng)節(jié)點(diǎn),當(dāng)名稱(chēng)節(jié)點(diǎn)宕機(jī)以后,可以把第二名稱(chēng)節(jié)點(diǎn)作為一種彌補(bǔ)措施,利用第二名稱(chēng)節(jié)點(diǎn)中的元數(shù)據(jù)信息進(jìn)行系統(tǒng)恢復(fù),但是從前面對(duì)第二名稱(chēng)節(jié)點(diǎn)的介紹中可以看出,這樣做仍然會(huì)丟失部分?jǐn)?shù)據(jù)。36數(shù)據(jù)錯(cuò)誤與恢復(fù)數(shù)據(jù)節(jié)點(diǎn)出錯(cuò)

每個(gè)數(shù)據(jù)節(jié)點(diǎn)會(huì)定期向名稱(chēng)節(jié)點(diǎn)發(fā)送“心跳”信息,向名稱(chēng)節(jié)點(diǎn)報(bào)告自己的狀態(tài)。當(dāng)數(shù)據(jù)節(jié)點(diǎn)發(fā)生故障,或者網(wǎng)絡(luò)發(fā)生斷網(wǎng)時(shí),名稱(chēng)節(jié)點(diǎn)就無(wú)法收到來(lái)自一些數(shù)據(jù)節(jié)點(diǎn)的“心跳”信息,這時(shí)這些數(shù)據(jù)節(jié)點(diǎn)就會(huì)被標(biāo)記為“宕機(jī)”,節(jié)點(diǎn)上面的所有數(shù)據(jù)都會(huì)被標(biāo)記為“不可讀”,名稱(chēng)節(jié)點(diǎn)不會(huì)再給它們發(fā)送任何I/O請(qǐng)求。37數(shù)據(jù)錯(cuò)誤與恢復(fù)數(shù)據(jù)出錯(cuò)

網(wǎng)絡(luò)傳輸和磁盤(pán)錯(cuò)誤等因素都會(huì)造成數(shù)據(jù)錯(cuò)誤??蛻舳嗽谧x取到數(shù)據(jù)后,會(huì)采用md5和sha1對(duì)數(shù)據(jù)塊進(jìn)行校驗(yàn),以確定讀取到正確的數(shù)據(jù)。在文件被創(chuàng)建時(shí),客戶端就會(huì)對(duì)每一個(gè)文件塊進(jìn)行信息摘錄,并把這些信息寫(xiě)入同一個(gè)路徑的隱藏文件里面。385.HDFS的讀寫(xiě)過(guò)程在介紹HDFS的數(shù)據(jù)讀寫(xiě)過(guò)程之前,需要簡(jiǎn)單介紹一下相關(guān)的類(lèi)。FileSystem是一個(gè)通用文件系統(tǒng)的抽象基類(lèi),可以被分布式文件系統(tǒng)繼承,所有可能使用Hadoop文件系統(tǒng)的代碼都要使用到這個(gè)類(lèi)。Hadoop為FileSystem這個(gè)抽象類(lèi)提供了多種具體的實(shí)現(xiàn),DistributedFileSystem就是FileSystem在HDFS文件系統(tǒng)中的實(shí)現(xiàn)。FileSystem的open()方法返回的是一個(gè)輸入流FSDataInputStream對(duì)象,在HDFS文件系統(tǒng)中具體的輸入流就是DFSInputStream;FileSystem中的create()方法返回的是一個(gè)輸出流FSDataOutputStream對(duì)象,在HDFS文件系統(tǒng)中具體的輸出流就是DFSOutputStream。39讀數(shù)據(jù)的過(guò)程客戶端連續(xù)調(diào)用open()、read()、close()讀取數(shù)據(jù)時(shí),HDFS內(nèi)部的執(zhí)行過(guò)程:40讀數(shù)據(jù)的過(guò)程(1)客戶端通過(guò)FileSystem.open()打開(kāi)文件,相應(yīng)地,在HDFS文件系統(tǒng)中DistributedFileSystem具體實(shí)現(xiàn)了FileSystem。(2)在DFSInputStream的構(gòu)造函數(shù)中,輸入流通過(guò)ClientProtocal.getBlockLocations()遠(yuǎn)程調(diào)用名稱(chēng)節(jié)點(diǎn),獲得文件開(kāi)始部分?jǐn)?shù)據(jù)塊的保存位置。41讀數(shù)據(jù)的過(guò)程(3)獲得輸入流FSDataInputStream后,客戶端調(diào)用read()函數(shù)開(kāi)始讀取數(shù)據(jù)。輸入流根據(jù)前面的排序結(jié)果,選擇距離客戶端最近的數(shù)據(jù)節(jié)點(diǎn)建立連接并讀取數(shù)據(jù)。(4)數(shù)據(jù)從該數(shù)據(jù)節(jié)點(diǎn)讀到客戶端;當(dāng)該數(shù)據(jù)塊讀取完畢時(shí),F(xiàn)SDataInputStream關(guān)閉和該數(shù)據(jù)節(jié)點(diǎn)的連接。42讀數(shù)據(jù)的過(guò)程(5)輸入流通過(guò)getBlockLocations()方法查找下一個(gè)數(shù)據(jù)塊(如果客戶端緩存中已經(jīng)包含了該數(shù)據(jù)塊的位置信息,

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論