分布式文件存儲(chǔ)系統(tǒng)研究及應(yīng)用_第1頁(yè)
分布式文件存儲(chǔ)系統(tǒng)研究及應(yīng)用_第2頁(yè)
分布式文件存儲(chǔ)系統(tǒng)研究及應(yīng)用_第3頁(yè)
分布式文件存儲(chǔ)系統(tǒng)研究及應(yīng)用_第4頁(yè)
分布式文件存儲(chǔ)系統(tǒng)研究及應(yīng)用_第5頁(yè)
已閱讀5頁(yè),還剩31頁(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)介

分布式存儲(chǔ)系統(tǒng)研究和應(yīng)用實(shí)踐二〇一二年二月摘要物質(zhì)、能量和信息是自然科學(xué)研究的三個(gè)根本對(duì)象,處理、傳輸和存儲(chǔ)是信息計(jì)算的三大根本任務(wù)。隨著網(wǎng)絡(luò)技術(shù)及信息處理技術(shù)的不斷開展,個(gè)人數(shù)據(jù)和企業(yè)數(shù)據(jù)的產(chǎn)生量呈現(xiàn)爆炸性膨脹的趨勢(shì),IT系統(tǒng)正面臨著海量數(shù)據(jù)存儲(chǔ)本錢高、管理困難、可靠性低的問(wèn)題,為了充分利用資源,減少重復(fù)的投資,數(shù)據(jù)存儲(chǔ)作為IT系統(tǒng)的主要架構(gòu)和根底設(shè)施之一,逐步被作為一個(gè)完整的系統(tǒng)從IT系統(tǒng)中獨(dú)立出來(lái),分布式存儲(chǔ)系統(tǒng)因?yàn)榫哂泻A繑?shù)據(jù)存儲(chǔ)、高擴(kuò)展性、高性能、高可靠性、高可用性的特點(diǎn),目前正被作為企業(yè)海量數(shù)據(jù)存儲(chǔ)方案被業(yè)界所廣泛討論和應(yīng)用。因此對(duì)于分布式存儲(chǔ)系統(tǒng)的研究不僅緊跟目前開展的趨勢(shì),而且具有較高的應(yīng)用價(jià)值。本文基于對(duì)分布式存儲(chǔ)系統(tǒng)的研究,旨在通過(guò)在網(wǎng)絡(luò)環(huán)境下構(gòu)建具有高傳輸性能、高可靠性、高可用性的網(wǎng)絡(luò)分布式文件系統(tǒng),通過(guò)網(wǎng)絡(luò)數(shù)據(jù)流方式實(shí)現(xiàn)對(duì)海量文件系統(tǒng)中的數(shù)據(jù)進(jìn)行存儲(chǔ)和訪問(wèn),解決大規(guī)模非結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)、查詢、高性能讀取、高容錯(cuò)性的問(wèn)題,為IT系統(tǒng)提供高性能、高可靠性、高可用性的存儲(chǔ)應(yīng)用效勞,并為今后的分布式計(jì)算研究提供技術(shù)根底。本文闡述的主要內(nèi)容如下:分布式架構(gòu)的相關(guān)理論以及分布式存儲(chǔ)系統(tǒng)的應(yīng)用現(xiàn)狀,介紹了分布式存儲(chǔ)系統(tǒng)概念;然后引入開源工程Hadoop的HDFS分布式文件系統(tǒng),接著對(duì)HDFS關(guān)鍵運(yùn)行機(jī)制進(jìn)行了詳細(xì)分析;并在此根底上,通過(guò)搭建基于HDFS0.23版本的實(shí)驗(yàn)環(huán)境進(jìn)行實(shí)際的測(cè)試驗(yàn)證,采集實(shí)驗(yàn)數(shù)據(jù),并對(duì)實(shí)驗(yàn)結(jié)果作出進(jìn)一步的分析總結(jié),得到理論和實(shí)際結(jié)合的第一手資料;最后,通過(guò)結(jié)合實(shí)際需求,在對(duì)醫(yī)學(xué)影像中心業(yè)務(wù)分析的根底上,對(duì)醫(yī)學(xué)影像中心存儲(chǔ)體系、功能結(jié)構(gòu)及運(yùn)行環(huán)境進(jìn)行了設(shè)計(jì)和規(guī)劃。關(guān)鍵詞:分布式存儲(chǔ)系統(tǒng)、HDFS、Hadoop緒論背景說(shuō)明IDC的一項(xiàng)預(yù)測(cè)曾指出,“數(shù)字宇宙〞〔digitaluniverse〕工程統(tǒng)計(jì)得出,2006年的數(shù)據(jù)總量為0.18ZB,并預(yù)測(cè)在2011年,數(shù)據(jù)量將到達(dá)1.8ZB。1ZB等于10的21次方字節(jié),或等于1000EB,1,000,000PB,或者大家更熟悉的10億TB的數(shù)據(jù)。這相當(dāng)于世界上每人一個(gè)磁盤驅(qū)動(dòng)器所能夠容納的數(shù)據(jù)的數(shù)量級(jí)。在如此強(qiáng)大的需求下,對(duì)海量存儲(chǔ)容量、高性能、高平安性、高可用性、可擴(kuò)展性、可管理性的存儲(chǔ)的要求不斷提高。關(guān)于磁盤存儲(chǔ)目前的情況是,磁盤存儲(chǔ)容量快速增加的同時(shí),其訪問(wèn)速度-磁盤數(shù)據(jù)讀取速度卻未能與時(shí)俱進(jìn)。目前,普通的1TB磁盤,其傳輸速率約為100MB/S左右,寫入則更慢,而10年前,10G的磁盤,其傳輸速率也有66M/s,即便換成基于閃存的SSD固態(tài)硬盤,也只是將讀取速度提高3倍、寫入速度提高1.5倍而已,甚至最先進(jìn)的光纖通道硬盤,和內(nèi)存的讀取和寫入數(shù)據(jù)的速率相比也不在一個(gè)數(shù)量級(jí)上。一個(gè)簡(jiǎn)單的減少磁盤讀取時(shí)間的方法就是同時(shí)從多個(gè)磁盤上讀取數(shù)據(jù),假設(shè),我們擁有100個(gè)磁盤,每個(gè)磁盤存儲(chǔ)1%的數(shù)據(jù),并行讀取,所需要的讀取時(shí)間,也相當(dāng)于原來(lái)的1%左右。這種方法稱之為條帶化存儲(chǔ)〔Strip〕,是RAID〔RedundantArrayofIndependentDiskes,獨(dú)立磁盤冗余陣列〕技術(shù)的一項(xiàng)重要特性,通過(guò)使用一組磁盤同時(shí)進(jìn)行I/O操作,從而獲得更大的I/O吞度量,并依靠存儲(chǔ)冗余信息〔鏡像+奇偶校驗(yàn)〕來(lái)保障數(shù)據(jù)的平安性。例如RAID10模式,數(shù)據(jù)塊被分別以位或字節(jié)為單位進(jìn)行分割并且并行讀/寫,同時(shí),為每一塊磁盤作磁盤鏡像進(jìn)行冗余,既保證了最高的讀寫存儲(chǔ)性能,又通過(guò)鏡像保護(hù)了數(shù)據(jù),缺點(diǎn)是磁盤利用率比較低。設(shè)置RAID10至少需要安裝4塊硬盤,當(dāng)把4塊磁盤設(shè)置成RAID10后,每一對(duì)磁盤被設(shè)置成鏡像,每一對(duì)磁盤之間被設(shè)置成條帶以便數(shù)據(jù)快速傳輸。下列圖為RAID10的數(shù)據(jù)分布及鏡像示意。網(wǎng)絡(luò)存儲(chǔ)應(yīng)用除了個(gè)人PC機(jī)的本地存儲(chǔ),企業(yè)的大多數(shù)的存儲(chǔ)應(yīng)用,都是基于局域網(wǎng)或者廣域網(wǎng)的文件共享和存儲(chǔ),目前很多簡(jiǎn)易的局域網(wǎng)內(nèi)的文件共享和存儲(chǔ)應(yīng)用都是基于文件效勞器,主要的功能是提供網(wǎng)絡(luò)用戶訪問(wèn)共享文件,通常是C/S模式,基于FTP或TCP/IP連接。這樣的存儲(chǔ)效勞器,在訪問(wèn)的頂峰期,單機(jī)IO負(fù)載很大,不能充分使用網(wǎng)絡(luò)帶寬,而且擴(kuò)展性差,可靠性和容錯(cuò)能力需要依靠硬件來(lái)完成,比方RAID的磁盤陣列。隨著網(wǎng)絡(luò)技術(shù)的開展,網(wǎng)絡(luò)的帶寬已經(jīng)超過(guò)了磁盤的帶寬,現(xiàn)在,很多存儲(chǔ)系統(tǒng)方案采用網(wǎng)絡(luò)存儲(chǔ)的技術(shù)來(lái)解決傳統(tǒng)存儲(chǔ)的問(wèn)題,針對(duì)I/O是整個(gè)網(wǎng)絡(luò)系統(tǒng)效率低下的瓶頸問(wèn)題,最有效地方法是將數(shù)據(jù)從通用的效勞器中別離出來(lái),進(jìn)行集中管理,形成所謂的存儲(chǔ)網(wǎng)絡(luò)。其中又有兩種不同的實(shí)現(xiàn)手段,NAS〔網(wǎng)絡(luò)附加存儲(chǔ)〕和SAN(存儲(chǔ)器網(wǎng)絡(luò)),兩者之間的區(qū)別在于,NAS是每個(gè)訪問(wèn)客戶端通過(guò)網(wǎng)絡(luò)共享協(xié)議使用同一個(gè)文件管理系統(tǒng),而SAN在每個(gè)訪問(wèn)客戶端都有個(gè)文件管理系統(tǒng)。FC硬盤是普通的SATA硬盤的本錢是的十倍,耗電量也是SATA硬盤的十倍,但是只提供1/10的密度,NAS和SAN雖然解決了存儲(chǔ)速度和可靠性的問(wèn)題,但是其高昂的本錢和復(fù)雜的管理問(wèn)題局限了其應(yīng)用范圍。針對(duì)效勞器的I/O效率和網(wǎng)絡(luò)訪問(wèn)的問(wèn)題,通過(guò)分布式系統(tǒng)通過(guò)在不同的節(jié)點(diǎn)間實(shí)現(xiàn)共享,提供多個(gè)訪問(wèn)點(diǎn)提高性能,來(lái)實(shí)現(xiàn)各個(gè)節(jié)點(diǎn)的高效、一致的數(shù)據(jù)共享來(lái)解決。分布式存儲(chǔ)相關(guān)理論分布式系統(tǒng)概念在網(wǎng)絡(luò)根底設(shè)施及效勞器性能不斷成熟和開展的背景下,分布式系統(tǒng)架構(gòu)越來(lái)越多的為人所關(guān)注,分布式系統(tǒng)架構(gòu)以傳統(tǒng)信息處理架構(gòu)無(wú)法比較的優(yōu)勢(shì)特性,正在成為企業(yè)實(shí)現(xiàn)提高效率、提高靈活性、降低本錢的重要選擇。分布式系統(tǒng)〔DistributedSystem〕是建立在網(wǎng)絡(luò)之上的支持分布式處理的軟件系統(tǒng)。正是因?yàn)檐浖奶匦?,所以分布式系統(tǒng)具有高度的內(nèi)聚性和透明性。所謂的內(nèi)聚性是指每一個(gè)分布節(jié)點(diǎn)高度自治,有獨(dú)立的程序進(jìn)行管理。透明性是指每一個(gè)分布節(jié)點(diǎn)對(duì)用戶的應(yīng)用來(lái)說(shuō)都是透明的,看不出是本地還是遠(yuǎn)程。在一個(gè)分布式系統(tǒng)中,一組獨(dú)立的計(jì)算資源展現(xiàn)給用戶的是一個(gè)統(tǒng)一的整體,就好似是一個(gè)系統(tǒng)似的。系統(tǒng)擁有多種通用的物理和邏輯資源,可以動(dòng)態(tài)的分配任務(wù),分散的物理和邏輯資源通過(guò)計(jì)算機(jī)網(wǎng)絡(luò)實(shí)現(xiàn)信息交換。在傳統(tǒng)網(wǎng)絡(luò)系統(tǒng)中,這種統(tǒng)一性、模型以及其中的軟件都不存在。用戶看到的是實(shí)際的機(jī)器,計(jì)算機(jī)網(wǎng)絡(luò)并沒(méi)有使這些機(jī)器看起來(lái)是統(tǒng)一的。如果這些機(jī)器有不同的硬件或者不同的操作系統(tǒng),那么,這些差異對(duì)于用戶來(lái)說(shuō)都是完全可見(jiàn)的。分布式系統(tǒng)和傳統(tǒng)網(wǎng)絡(luò)系統(tǒng)的共同點(diǎn)是:多數(shù)分布式系統(tǒng)是建立在網(wǎng)絡(luò)之上的,所以分布式系統(tǒng)與傳統(tǒng)網(wǎng)絡(luò)系統(tǒng)在物理結(jié)構(gòu)上是根本相同的。他們的區(qū)別在于:分布式系統(tǒng)的設(shè)計(jì)思想和網(wǎng)絡(luò)系統(tǒng)是不同的。網(wǎng)絡(luò)系統(tǒng)要求網(wǎng)絡(luò)用戶在使用網(wǎng)絡(luò)資源時(shí)首先必須了解網(wǎng)絡(luò)資源〔比方:計(jì)算機(jī)的功能與配置、軟件資源、網(wǎng)絡(luò)文件結(jié)構(gòu)等情況〕;分布式系統(tǒng)是以全局方式管理系統(tǒng)資源的,它可以任意調(diào)度網(wǎng)絡(luò)資源,并且調(diào)度過(guò)程是“透明〞的,在利用分布式系統(tǒng)的過(guò)程中,用戶并不會(huì)意識(shí)到有多個(gè)處理器的存在,這個(gè)系統(tǒng)就像是一個(gè)處理器一樣。分布式存儲(chǔ)系統(tǒng)概念由此而知,分布式存儲(chǔ)系統(tǒng)是指通過(guò)分布式技術(shù),將網(wǎng)絡(luò)中不同節(jié)點(diǎn)上的存儲(chǔ)設(shè)備通過(guò)分布式應(yīng)用軟件集合起來(lái)協(xié)同工作,共同對(duì)外提供數(shù)據(jù)存儲(chǔ)和業(yè)務(wù)訪問(wèn)功能的一個(gè)系統(tǒng)。分布式存儲(chǔ)系統(tǒng)的最大特點(diǎn)是,數(shù)據(jù)分散存儲(chǔ)在分布式存儲(chǔ)系統(tǒng)的各個(gè)獨(dú)立節(jié)點(diǎn)上,供用戶透明的存取。分布式存儲(chǔ)系統(tǒng)采用可擴(kuò)展的系統(tǒng)結(jié)構(gòu),利用多臺(tái)存儲(chǔ)效勞器分擔(dān)存儲(chǔ)負(fù)荷,利用位置效勞器定位存儲(chǔ)信息,它不但提高了系統(tǒng)的可靠性、可用性和存取效率,還易于擴(kuò)展。分布式存儲(chǔ)系統(tǒng)的應(yīng)用現(xiàn)狀以高性能、高容量為主要特性的分布式存儲(chǔ)系統(tǒng),必須滿足以下4個(gè)條件1、應(yīng)用于網(wǎng)絡(luò)環(huán)境中;2、單個(gè)文件數(shù)據(jù)分布存放在不同的節(jié)點(diǎn)上;3、支持多個(gè)終端多個(gè)進(jìn)程并發(fā)存取;4、提供統(tǒng)一的目錄空間和訪問(wèn)名稱;只有這樣,考慮到目前網(wǎng)絡(luò)總帶寬超過(guò)單個(gè)磁盤帶寬的特點(diǎn),支持多個(gè)進(jìn)程在多個(gè)磁盤上并發(fā)存取,增加文件系統(tǒng)的帶寬,來(lái)提高存儲(chǔ)的性能,并且通過(guò)動(dòng)態(tài)增減分布節(jié)點(diǎn),來(lái)實(shí)現(xiàn)整個(gè)存儲(chǔ)系統(tǒng)容量的動(dòng)態(tài)擴(kuò)展性。分布式存儲(chǔ)系統(tǒng)因?yàn)槠涓呷萘?、高性能、高并發(fā)性以及低本錢的特性而被眾多IT企業(yè)特別是互聯(lián)網(wǎng)效勞提供企業(yè)所廣泛關(guān)注和支持。下列圖為一局部常用的云存儲(chǔ)產(chǎn)品,可謂是種類繁多、琳瑯滿目。隨著寬帶網(wǎng)絡(luò)的開展,用戶數(shù)量的不斷增加,CDN〔Contentdeliverynetwork〕內(nèi)容分發(fā)、P2P、數(shù)據(jù)壓縮技術(shù)的廣泛運(yùn)用,以及分布式技術(shù)的完善,分布式存儲(chǔ)〔云存儲(chǔ)〕在技術(shù)上已經(jīng)趨于成熟。從廠商的解決方案來(lái)看,面對(duì)目前互聯(lián)網(wǎng)應(yīng)用PB級(jí)的海量存儲(chǔ)的存儲(chǔ)需求,頻繁的數(shù)據(jù)傳輸,都是通過(guò)應(yīng)用分布式存儲(chǔ)系統(tǒng),實(shí)現(xiàn)在普通PC機(jī)上部署節(jié)點(diǎn),通過(guò)系統(tǒng)架構(gòu)設(shè)計(jì)提供強(qiáng)大的容錯(cuò)能力,針對(duì)大型的、分布式的、大量數(shù)據(jù)訪問(wèn)的應(yīng)用給用戶提供總體性能最高的效勞。分布式存儲(chǔ)系統(tǒng)架構(gòu)分析目前,分布式系統(tǒng)的應(yīng)用體系架構(gòu),主要有兩種實(shí)現(xiàn)類型,一種是中心化〔Centralization〕,一種是去中心化〔Decentralization〕。中心化體系架構(gòu)中心化體系結(jié)構(gòu),顧名思義,就是系統(tǒng)中含有某些“中央節(jié)點(diǎn)“。中心化體系類似于我們網(wǎng)絡(luò)拓?fù)渲械男切屯負(fù)洌靡粋€(gè)節(jié)點(diǎn)作為中心節(jié)點(diǎn),其他節(jié)點(diǎn)直接與中心節(jié)點(diǎn)相連構(gòu)成的網(wǎng)絡(luò),中心節(jié)點(diǎn)維護(hù)了整個(gè)網(wǎng)絡(luò)的元數(shù)據(jù)信息,任何對(duì)系統(tǒng)的分布式請(qǐng)求都要經(jīng)過(guò)中心節(jié)點(diǎn),中心節(jié)點(diǎn)通過(guò)處理后,給各個(gè)節(jié)點(diǎn)分配任務(wù),再由分配到任務(wù)的各個(gè)節(jié)點(diǎn)處理完成后,直接將結(jié)果返回到目標(biāo)位置,因此,中心節(jié)點(diǎn)相當(dāng)復(fù)雜,通信的負(fù)載也是最大的,而各個(gè)節(jié)點(diǎn)的負(fù)載比較小。中心化的結(jié)構(gòu)對(duì)于系統(tǒng)的可擴(kuò)展性有較大的影響,因?yàn)槟莻€(gè)〞中心“很可能會(huì)成為瓶頸。在互聯(lián)網(wǎng)上,中心化的結(jié)構(gòu)還是比較常見(jiàn)的,例如,某個(gè)新聞網(wǎng)站。邏輯上,所有的用戶都會(huì)通過(guò)訪問(wèn)同一個(gè)網(wǎng)址來(lái)獲得效勞。當(dāng)然,這背后早就不再是一個(gè)效勞器提供效勞了。大致的體系架構(gòu)如下列圖所示:聯(lián)邦化體系結(jié)構(gòu)在中心化體系結(jié)構(gòu)的根底上延伸出一種聯(lián)邦式的體系架構(gòu)來(lái)通過(guò)對(duì)中心節(jié)點(diǎn)進(jìn)行水平擴(kuò)展的方式解決決單個(gè)中心化體系結(jié)構(gòu)的局限性的問(wèn)題。因此,聯(lián)邦化體系結(jié)構(gòu)雖然解決了“熱點(diǎn)〞的問(wèn)題,但是不能完全解決單點(diǎn)故障問(wèn)題,如果某個(gè)分區(qū)的中心節(jié)點(diǎn)失效,其管理的相應(yīng)文件將不能訪問(wèn),但是通常,中心節(jié)點(diǎn)都會(huì)配置有副中心節(jié)點(diǎn),當(dāng)主中心節(jié)點(diǎn)失效后,副中心節(jié)點(diǎn)將會(huì)接管。本次論文中要重點(diǎn)論述的分布式存儲(chǔ)系統(tǒng)——HDFS中采用了這種聯(lián)邦化的架構(gòu),NameNode相當(dāng)于一個(gè)分區(qū)主節(jié)點(diǎn),每個(gè)NameNode加上一個(gè)BlockPool形成一個(gè)NamesapceVolumn〔命名空間卷〕,相當(dāng)于磁盤文件系統(tǒng)的一個(gè)邏輯卷,各個(gè)邏輯卷加起來(lái)呈現(xiàn)的相當(dāng)于整個(gè)硬盤。去中心化體系架構(gòu)在這種結(jié)構(gòu)中,相對(duì)于中心化架構(gòu),不再存在某類中央節(jié)點(diǎn),總體上講,每個(gè)節(jié)點(diǎn)的功能都是類似的或者說(shuō)對(duì)稱的,類似于我們網(wǎng)絡(luò)拓?fù)渲械沫h(huán)型拓?fù)洹?duì)于去中心化結(jié)構(gòu)而言,最重要的問(wèn)題之一就是如何把這些節(jié)點(diǎn)組織到一個(gè)網(wǎng)絡(luò)中。一般而言,系統(tǒng)中的一個(gè)節(jié)點(diǎn)不可能知道系統(tǒng)中所有的節(jié)點(diǎn),它只能知道在這個(gè)網(wǎng)絡(luò)中自己的鄰居并與這些鄰居直接交互。去中心化體系結(jié)構(gòu),根據(jù)系統(tǒng)維護(hù)方式,又可以分為兩類:結(jié)構(gòu)化網(wǎng)絡(luò)和非結(jié)構(gòu)化網(wǎng)絡(luò)。結(jié)構(gòu)化網(wǎng)絡(luò)網(wǎng)絡(luò)是通過(guò)一個(gè)確定的過(guò)程建立起來(lái)的,節(jié)點(diǎn)數(shù)據(jù)的劃分都通過(guò)哈希算法進(jìn)行切分分配,尋址采用DHT(DistributedHashTable,分布式哈希表)方式〔HASH表的應(yīng)用類似于Oracle的HASH分區(qū)概念,通過(guò)HASH對(duì)數(shù)據(jù)進(jìn)行散列分區(qū)〕,節(jié)點(diǎn)間通過(guò)Gossip協(xié)議進(jìn)行通訊,使網(wǎng)絡(luò)到達(dá)去中心化,提高系統(tǒng)可用性,在這種系統(tǒng)中,各個(gè)節(jié)點(diǎn)構(gòu)成一個(gè)邏輯的環(huán)。非結(jié)構(gòu)化網(wǎng)絡(luò)在非結(jié)構(gòu)化的網(wǎng)絡(luò)中,網(wǎng)絡(luò)的建立帶有更多的隨機(jī)性。每個(gè)節(jié)點(diǎn)都維護(hù)這一個(gè)局部視圖〔一個(gè)包含n個(gè)節(jié)點(diǎn)的表〕,這個(gè)視圖中的節(jié)點(diǎn)就是它的鄰居。它通過(guò)與鄰居不斷地交換視圖內(nèi)容來(lái)更新自己的視圖。在此種結(jié)構(gòu)中,因?yàn)檎麄€(gè)體系中的節(jié)點(diǎn)都是對(duì)等,根據(jù)其動(dòng)態(tài)組織的特點(diǎn),所以對(duì)等節(jié)點(diǎn)可以隨意的參加或者離開網(wǎng)絡(luò),所以,整個(gè)結(jié)構(gòu)是一個(gè)自組織的動(dòng)態(tài)網(wǎng)絡(luò),因此該體系結(jié)構(gòu)必須控制數(shù)據(jù)的一致性,確保整個(gè)網(wǎng)絡(luò)中的所有數(shù)據(jù)可以實(shí)現(xiàn)數(shù)據(jù)同步。正因?yàn)槿ブ行幕募軜?gòu)具有數(shù)據(jù)動(dòng)態(tài)一致性的特點(diǎn),所以不僅可以做為文件存儲(chǔ)系統(tǒng),還可以作為鍵值對(duì)〔Key-Value〕的分布式緩存系統(tǒng)進(jìn)行應(yīng)用。大致的體系架構(gòu)如下列圖所示:中心化體系結(jié)構(gòu)與去中心化體系結(jié)構(gòu)的比較中心化體系結(jié)構(gòu)與去中心化體系結(jié)構(gòu)各有優(yōu)缺點(diǎn),如下:中心化體系結(jié)構(gòu)優(yōu)點(diǎn):一致性管理方便,可以直接對(duì)節(jié)點(diǎn)進(jìn)行查詢;缺點(diǎn):存在訪問(wèn)的“熱點(diǎn)〞現(xiàn)象,單臺(tái)效勞器會(huì)形成瓶頸,容易造成單點(diǎn)故障,單點(diǎn)故障會(huì)影響個(gè)系統(tǒng)的可用性;去中心化體系結(jié)構(gòu)優(yōu)點(diǎn):消除了單點(diǎn)故障,可用性高;缺點(diǎn):一致性管理復(fù)雜,依賴節(jié)點(diǎn)間的網(wǎng)絡(luò)通訊,交換機(jī)故障所導(dǎo)致的分割,依然會(huì)造成故障,不能直接查詢;綜合來(lái)看,中心化體系結(jié)構(gòu)最大優(yōu)勢(shì)是結(jié)構(gòu)簡(jiǎn)單、管理方便,查詢效率高,去中心化體系結(jié)構(gòu)最大的優(yōu)勢(shì)是可用性高,可擴(kuò)展性高。下表比較了3種體系結(jié)構(gòu)的綜合性能,比較結(jié)果如下表所示:比較中心化聯(lián)邦化去中心化可擴(kuò)展性低中高可用性中中高可維護(hù)性高中低動(dòng)態(tài)一致性低低高節(jié)點(diǎn)查詢效率高高低執(zhí)行效率高高低“中心化〞與“去中心化〞混合架構(gòu)在實(shí)際的使用中,中心化結(jié)構(gòu)和無(wú)中心化結(jié)構(gòu)都有各自的問(wèn)題,所以,實(shí)際的系統(tǒng)通常是混合結(jié)構(gòu)的。例如著名的Emule〔電驢〕和BitTorrent系統(tǒng)。Emule和BitTorrent都是基于的P2P技術(shù)的文件共享軟件,它們與傳統(tǒng)的文件共享方式的區(qū)別是:共享文件不是在集中的效勞器上等待用戶端來(lái)下載,而是分散在所有參與者的硬盤上,所有參與者組成一個(gè)虛擬網(wǎng)絡(luò)。在Emule中也存在一些效勞器,不過(guò)這些效勞器不再存放文件,而是存放這些共享文件的目錄地址,客戶端從效勞器處得到或搜索到共享文件的地址,然后自動(dòng)從別的客戶端進(jìn)行下載,參與的客戶越多,下載的速度越快。“中心化〞與“去中心化〞間的選擇對(duì)于兩種架構(gòu)設(shè)計(jì)的優(yōu)劣,目前在網(wǎng)絡(luò)上還存在很多爭(zhēng)議,有人甚至認(rèn)為去中心化的設(shè)計(jì)思想甚至是一種缺陷,為什么這么說(shuō)呢?去中心化的設(shè)計(jì)相對(duì)于中心化設(shè)計(jì)的最大好處,也是其最大的優(yōu)點(diǎn)是有極佳的伸縮性,因?yàn)槿ブ行幕喈?dāng)于無(wú)政府化,不用去向中心去登記和注銷,從事物的兩面性而言,有利必有弊,客戶端的每個(gè)查詢都會(huì)涉及到多個(gè)節(jié)點(diǎn)的響應(yīng),并產(chǎn)生不必要的網(wǎng)絡(luò)IO,這里講得查詢,主要是基于DHT分布式HASH表的查詢,這種設(shè)計(jì)在巨型、頻繁伸縮的網(wǎng)絡(luò),比方Emule、Bittorrent這種網(wǎng)絡(luò)是有其特殊意義的。由此可見(jiàn),去中心化的分布式存儲(chǔ)方案,從HighPerformance上講并不是最正確的企業(yè)分布式存儲(chǔ)方案。HDFS分布式存儲(chǔ)系統(tǒng)研究HSDF系統(tǒng)架構(gòu)和設(shè)計(jì)要點(diǎn)HDFS的特點(diǎn)HDFS〔HadoopDistributedFileSystem〕,是一個(gè)設(shè)計(jì)用來(lái)保存大數(shù)據(jù)量的數(shù)據(jù)的分布式文件系統(tǒng)〔PB級(jí)甚至是EB級(jí)〕,并提供快速訪問(wèn)這些數(shù)據(jù)的能力,數(shù)據(jù)通過(guò)冗余的方式保存在多臺(tái)機(jī)器上,以來(lái)保存對(duì)失敗的容錯(cuò)性和并行應(yīng)用的高度可用性。HDFS和現(xiàn)有的網(wǎng)絡(luò)文件系統(tǒng)相似,是一個(gè)運(yùn)行在普通的硬件之上的分布式網(wǎng)絡(luò)文件系統(tǒng),然而它與普通網(wǎng)絡(luò)文件系統(tǒng)也存在著一定的差異。HDFS具有高容錯(cuò)性,可以部署在低本錢的硬件之上,同時(shí)HDFS放松了對(duì)POSIX的需求,使其可以以流的形式訪問(wèn)文件數(shù)據(jù),從而提供高吞吐量地對(duì)應(yīng)用程序的數(shù)據(jù)進(jìn)行訪問(wèn),適合大數(shù)據(jù)集的應(yīng)用程序,比方:MapReduce的分布式計(jì)算。HDFS的設(shè)計(jì)相對(duì)網(wǎng)絡(luò)文件系統(tǒng),具有高性能、高可靠性、高可用性、高可擴(kuò)展性的特點(diǎn),主要表現(xiàn)在以下幾個(gè)方面:HFDS設(shè)計(jì)用來(lái)保存非常大的數(shù)據(jù)量信息,就需要將數(shù)據(jù)分布到大量的機(jī)器上;HFDS的數(shù)據(jù)保存是可靠的,如果集群中的某些機(jī)器工作不正常,數(shù)據(jù)仍然是可用的;通過(guò)簡(jiǎn)單添加一些機(jī)器,提供快速,可擴(kuò)展的數(shù)據(jù)訪問(wèn)能力,使得HDFS能效勞于更多的客戶端;在HDFS上的應(yīng)用與一般的應(yīng)用不同,它們主要是以流式讀為主,做批量處理,比之關(guān)注數(shù)據(jù)訪問(wèn)的低延遲問(wèn)題,更關(guān)鍵的在于數(shù)據(jù)訪問(wèn)的高吞吐量;HDFS與HadoopMapReduce能很好地集成,它在可能的情況下,能使數(shù)據(jù)讀取、計(jì)算本地化;HDFS的系統(tǒng)架構(gòu)HDFS采用master/slave架構(gòu),HDFS的架構(gòu)示意圖如下:從圖中可以看出,一個(gè)HDFS集群是有一個(gè)Namenode和一定數(shù)目的Datanode組成。NameNode名稱節(jié)點(diǎn)Namenode是一個(gè)中心效勞器,是HDFS的中樞,負(fù)責(zé)管理文件系統(tǒng)的目錄名字空間信息〔namespace〕和客戶端對(duì)文件的訪問(wèn),并且管理所有的DataNode;DataNode數(shù)據(jù)節(jié)點(diǎn)Datanode在HDFS中一般是一個(gè)節(jié)點(diǎn)一個(gè),負(fù)責(zé)管理節(jié)點(diǎn)上它們附帶的存儲(chǔ)的Block〔數(shù)據(jù)塊〕。在HDFS內(nèi)部,文件不是放在一塊磁盤上,一個(gè)文件其實(shí)分成一個(gè)或多個(gè)block〔數(shù)據(jù)塊〕,這些block存儲(chǔ)在Datanode集合中不同的DataNode上,NameNode記錄有block對(duì)應(yīng)在不同的DataNode上的映射關(guān)系。從圖中可以看到NameNode接受客戶端的元數(shù)據(jù)請(qǐng)求,然后對(duì)DataNode發(fā)出BlockOps〔塊操作〕指令,文件的創(chuàng)立、刪除和復(fù)制操作,同時(shí)決定block到具體Datanode節(jié)點(diǎn)的映射。Datanode在Namenode的指揮下進(jìn)行block的創(chuàng)立、刪除和復(fù)制。NameNode是整個(gè)集群的中樞可以形象的比喻為勞務(wù)中介或包工頭,NameNode在線只有一個(gè)可用,NameNode主要負(fù)責(zé):管理HDFS集群中文件系統(tǒng)的名字空間〔Namespace〕翻開文件系統(tǒng)、關(guān)閉文件系統(tǒng)、重命名文件或者目錄等;管理客戶端對(duì)HDFS集群中的文件系統(tǒng)中的文件的訪問(wèn)實(shí)際上文件以塊的形式存儲(chǔ)在Datanode上,文件系統(tǒng)客戶端向Namenode請(qǐng)求所要執(zhí)行操作的文件塊〔該塊存儲(chǔ)在指定的Dadanode數(shù)據(jù)結(jié)點(diǎn)上〕,然后通過(guò)與Datanode結(jié)點(diǎn)交互來(lái)完成文件讀寫的操作。也就是說(shuō),Namenode結(jié)點(diǎn)還負(fù)責(zé)確定指定的文件塊到具體的Datanode結(jié)點(diǎn)的映射關(guān)系。管理Datanode結(jié)點(diǎn)的狀態(tài)報(bào)告包括Datanode結(jié)點(diǎn)的健康狀態(tài)報(bào)告和其所在結(jié)點(diǎn)上數(shù)據(jù)塊狀態(tài)報(bào)告,以便能夠及時(shí)處理失效的數(shù)據(jù)結(jié)點(diǎn)。DataNode用于存儲(chǔ)數(shù)據(jù)在HDFS集群中,DataNode〔數(shù)據(jù)節(jié)點(diǎn)〕可以形象的比喻為農(nóng)民工,一般是一臺(tái)節(jié)點(diǎn)效勞器對(duì)應(yīng)一個(gè)DataNode實(shí)例,DataNode的任務(wù)是:負(fù)責(zé)管理它所在結(jié)點(diǎn)上存儲(chǔ)的數(shù)據(jù)的讀寫Datanode數(shù)據(jù)結(jié)點(diǎn)進(jìn)程還要在Namenode的統(tǒng)一指揮調(diào)度下完成對(duì)文件塊的創(chuàng)立、刪除、復(fù)制等操作,當(dāng)與Namenode交互過(guò)程中收到了可以執(zhí)行文件塊的文件塊操作的命令后,才開始讓文件系統(tǒng)客戶端執(zhí)行指定的操作。向Namenode結(jié)點(diǎn)報(bào)告狀態(tài)每個(gè)Datanode結(jié)點(diǎn)會(huì)周期性地向Namenode發(fā)送心跳信號(hào)和文件塊狀態(tài)報(bào)告,以便Namenode獲取到工作集群中Datanode結(jié)點(diǎn)狀態(tài)的全局視圖,從而掌握它們的狀態(tài)。如果存在Datanode結(jié)點(diǎn)失效的情況時(shí),Namenode會(huì)調(diào)度其它Datanode執(zhí)行失效結(jié)點(diǎn)上文件塊的復(fù)制處理,保證文件塊的副本數(shù)到達(dá)規(guī)定數(shù)量。執(zhí)行數(shù)據(jù)的流水線復(fù)制〔產(chǎn)生數(shù)據(jù)冗余〕當(dāng)文件系統(tǒng)客戶端從Namenode效勞器進(jìn)程獲取到要進(jìn)行復(fù)制的數(shù)據(jù)塊列表〔列表中包含指定副本的存放位置,亦即某個(gè)Datanode結(jié)點(diǎn)〕后,會(huì)首先將客戶端緩存的文件塊復(fù)制到第一個(gè)Datanode結(jié)點(diǎn)上,并且由第一個(gè)Datanode向第二個(gè)Datanode結(jié)點(diǎn)復(fù)制,……,如此下去完成文件塊及其塊副本的流水線復(fù)制。HDFS的設(shè)計(jì)要點(diǎn)HDFS基于GoogleFileSystem的高可擴(kuò)展、高可用、高性能、面向網(wǎng)絡(luò)效勞的設(shè)計(jì),是通過(guò)塊結(jié)構(gòu)的文件系統(tǒng)設(shè)計(jì)來(lái)實(shí)現(xiàn)的:在HDFS中的單個(gè)文件被分成相同大小的塊,這些塊被分布到HDFS網(wǎng)絡(luò)中的多臺(tái)數(shù)據(jù)節(jié)點(diǎn)〔DataNode〕的機(jī)器上,一個(gè)文件可由多個(gè)塊組成,它們并不需要放到同一臺(tái)機(jī)器上。保存每個(gè)塊的機(jī)器是由中心效勞器-名稱節(jié)點(diǎn)〔NameNode〕通過(guò)負(fù)載均衡隨機(jī)選擇的,因此訪問(wèn)一個(gè)文件需要多臺(tái)機(jī)器協(xié)作。使用多臺(tái)機(jī)器保存一個(gè)文件,這些機(jī)器中任何一臺(tái)崩潰都會(huì)導(dǎo)致文件不可訪問(wèn),HDFS通過(guò)將每塊復(fù)制到多臺(tái)機(jī)器〔默認(rèn)3臺(tái)〕的方式來(lái)保證HDFS的高可用性。HDFS中默認(rèn)使用塊大小為64MB,這使得HDFS減少了對(duì)每個(gè)文件元數(shù)據(jù)的存儲(chǔ)量,另外,通過(guò)把大量數(shù)據(jù)連續(xù)化存放在磁盤上,就可以快速地流式讀取數(shù)據(jù)。這種設(shè)計(jì)的結(jié)果是HDFS傾向于處理大文件。HDFS文件數(shù)據(jù)是以一次寫入,屢次讀取的方式訪問(wèn)的,元數(shù)據(jù)結(jié)構(gòu)〔文件名,目錄名〕會(huì)被大量客戶端同時(shí)修改,所以元數(shù)據(jù)結(jié)構(gòu)信息不適合進(jìn)行同步,因?yàn)楣?jié)點(diǎn)和節(jié)點(diǎn)之間的同步是相當(dāng)消耗資源的。HDFS可靠性和性能主要通過(guò)數(shù)據(jù)塊的副本來(lái)實(shí)現(xiàn),并且HDFS采用一種稱之為Rack-aware〔機(jī)架感知〕的策略來(lái)改良數(shù)據(jù)的可靠性、有效性和網(wǎng)絡(luò)帶寬的利用。比方:不同的機(jī)架間的兩臺(tái)機(jī)器的通訊需要通過(guò)交換機(jī),顯然,同一個(gè)機(jī)架內(nèi)的兩個(gè)節(jié)點(diǎn)間的帶寬回避不同機(jī)架上的兩臺(tái)機(jī)器帶寬要大。在通常副本數(shù)為3的情況下,HDFS的策略將一個(gè)副本存放在本地機(jī)架上,一個(gè)副本放在同一個(gè)機(jī)架上的另一個(gè)節(jié)點(diǎn),最后一個(gè)副本放在不同機(jī)架上的一個(gè)節(jié)點(diǎn)。在讀取時(shí),為了降低整體的帶寬消耗和讀延時(shí),如果客戶端同一個(gè)機(jī)架上有一個(gè)副本,那么就讀該副本。HDFS健壯性的主要目標(biāo)是實(shí)現(xiàn)在失敗情況下的數(shù)據(jù)存儲(chǔ)可靠性,常見(jiàn)的三種失?。篘amenodefailures,Datanodefailures和網(wǎng)絡(luò)分割〔networkpartitions)。硬盤數(shù)據(jù)錯(cuò)誤、心跳檢測(cè)和重新復(fù)制每個(gè)Datanode節(jié)點(diǎn)都向Namenode周期性地發(fā)送心跳包。Namenode在一段時(shí)間內(nèi)收不到Datanode的心跳包,則認(rèn)為這個(gè)Datanode死掉了,存儲(chǔ)在這個(gè)Datanode上的數(shù)據(jù)塊無(wú)法訪問(wèn),Namenode開始不斷查詢哪些數(shù)據(jù)塊需要復(fù)制。一旦出現(xiàn)Datanode死掉或者副本中斷或者Datanode磁盤故障,都要開始進(jìn)行數(shù)據(jù)重新復(fù)制。數(shù)據(jù)完整性當(dāng)一份HDFS文件建立的時(shí)候,會(huì)生成這份文件的校驗(yàn)和,保存在HDFS命名空間的一個(gè)獨(dú)立的隱藏文件夾中,客戶端拷貝文件時(shí),收到文件后就去匹配這些校驗(yàn)和看文件是否完整。如果不完整,則從另外一個(gè)Datanode重新拷貝。負(fù)載均衡HDFS中非常容易出現(xiàn)機(jī)器與機(jī)器之間磁盤利用率不平衡的情況,比方HDFS中添加新的數(shù)據(jù)節(jié)點(diǎn)。當(dāng)HDFS出現(xiàn)不平衡狀況的時(shí)候,將引發(fā)很多問(wèn)題,比方,機(jī)器之間無(wú)法到達(dá)更好的網(wǎng)絡(luò)帶寬使用率,機(jī)器磁盤無(wú)法利用等等。一旦某個(gè)Datanode存的數(shù)據(jù)量低于某個(gè)閾值,通過(guò)HDFS的Rebalancer程序自動(dòng)的把其它節(jié)點(diǎn)上的數(shù)據(jù)拷貝過(guò)來(lái),使得HDFS到達(dá)一個(gè)平衡的狀態(tài)。元數(shù)據(jù)事務(wù)日志和檢查點(diǎn)對(duì)于任何對(duì)文件系統(tǒng)元數(shù)據(jù)產(chǎn)生修改的操作,Namenode都會(huì)使用一種稱為EditLog的事務(wù)日志記錄下來(lái)。例如,在HDFS中創(chuàng)立一個(gè)文件,Namenode就會(huì)在Editlog中插入一條記錄來(lái)表示;整個(gè)文件系統(tǒng)的名字空間,包括數(shù)據(jù)塊到文件的映射、文件的屬性等,都存儲(chǔ)在一個(gè)稱為FsImage的二進(jìn)制文件中,這個(gè)文件也是放在Namenode所在的本地文件系統(tǒng)上,該文件中將每一個(gè)文件或者目錄的信息視為一個(gè)記錄,每條記錄中包括該文件〔或目錄〕的名稱,大小,user,group,mtime,ctime等等信息,Namespace重啟或宕機(jī)的時(shí)候,就是根據(jù)讀取這個(gè)FsImage文件中的信息來(lái)重構(gòu)Namespace目錄樹結(jié)構(gòu)。但是,F(xiàn)simage始終是磁盤上的一個(gè)文件,不可能時(shí)時(shí)刻刻都跟Namenode內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)保持同步,而是每過(guò)一段時(shí)間更新一次Fsimage文件,以此來(lái)保持Fsimage跟Namenode內(nèi)存的同步。而在一個(gè)新Fsimage和上一個(gè)Fsimage中間的Namenode操作,就會(huì)被記錄在Editlog中,所以,F(xiàn)sImage和Editlog是HDFS的核心數(shù)據(jù)結(jié)構(gòu)。這些文件如果損壞了,整個(gè)HDFS實(shí)例都將失效。由于NameNode只在啟動(dòng)的時(shí)候融合FsImage和Editlog文件,所以,隨著時(shí)間的增長(zhǎng),對(duì)于一個(gè)繁忙的HDFS網(wǎng)絡(luò),EditLog會(huì)變得越來(lái)越大,造成下一次NameNode啟動(dòng)時(shí)間會(huì)變得越來(lái)越長(zhǎng)。HDFS通過(guò)以下幾種方法去解決以上問(wèn)題:SecondaryNameNodeSecondaryNameNode用來(lái)定期合并FsImage和Editlog,把EditLog文件控制在一個(gè)限度下,SecondaryNameNode將最新的檢查點(diǎn)存儲(chǔ)在于PrimaryNameNode相同方式目錄下的目錄下。這樣,檢查點(diǎn)的image總是可以準(zhǔn)備被NameNode讀取。如果PrimaryNameNode掛掉了,硬盤數(shù)據(jù)需要時(shí)間恢復(fù)或者不能恢復(fù)了,這時(shí)候可以通過(guò)將SecondaryNameNode的CheckPoint文件到PrimaryNameNode的fs.checkpoint.dir指向的文件夾目錄下,〔目前自動(dòng)重啟或在另一臺(tái)機(jī)器上做Namenode故障轉(zhuǎn)移的功能還沒(méi)實(shí)現(xiàn)〕。CheckpointNode〔檢查點(diǎn)〕CheckPointNode是SecondaryNameNode的改良替代版,CheckpointNode周期性的創(chuàng)立NameSpace的檢查點(diǎn)。它在活潑的NameNode上下載Fsimage和editlog,然后本地的把它們?nèi)诤显谝黄?,然后將新的鏡像上傳給NameNode。BackupNode〔備份節(jié)點(diǎn)〕這個(gè)結(jié)點(diǎn)的模式有點(diǎn)像mysql中的主從結(jié)點(diǎn)復(fù)制功能,NameNode可以實(shí)時(shí)的將日志傳送給BackupNode,而SecondaryNameNode是每隔一段時(shí)間去NameNode下載FsImage和Editlog文件,而BackupNode是實(shí)時(shí)的得到操作日志,然后將操作合并到Fsimage里。當(dāng)NameNode有日志時(shí),不僅會(huì)寫一份到本地editslog的日志文件,同時(shí)會(huì)向BackupNode的網(wǎng)絡(luò)流中寫一份,當(dāng)流緩沖到達(dá)閥值時(shí),將會(huì)寫入到BackupNode結(jié)點(diǎn)上,BackupNode收到后就會(huì)進(jìn)行合并操作,這樣來(lái)完成低延遲的日志復(fù)制功能。HDFS的CheckPoint過(guò)程如下列圖所示:HDFS的高性能和高可用性的設(shè)計(jì)使得它局限于某些應(yīng)用范圍,HDFS為此作出了一些權(quán)衡:應(yīng)用程序要使用流式讀取文件,更多的考慮到了數(shù)據(jù)批處理,而不是用戶交互處理,所以不支持定位到文件的任一位置;為了簡(jiǎn)化了數(shù)據(jù)一致性問(wèn)題,實(shí)現(xiàn)高吞吐量的數(shù)據(jù)訪問(wèn),適合一次寫入屢次讀取,不支持附加〔Append〕讀寫以更新文件;文件很大,流式讀取,所以系統(tǒng)不提供本地緩存機(jī)制;HDFS關(guān)鍵運(yùn)行流程解析下面就HDFS的幾個(gè)關(guān)鍵運(yùn)行流程進(jìn)行解析:格式化HDFS部署好了之后并不能馬上使用,首先要對(duì)配置的文件系統(tǒng)進(jìn)行格式化。這里的格式化指的是對(duì)HDFS的一些去除與準(zhǔn)備工作,HDFS中的NameNode主要被用來(lái)管理整個(gè)分布式文件系統(tǒng)的命名空間(實(shí)際上就是目錄和文件)的元數(shù)據(jù)信息,所以,NameNode會(huì)持久化這些數(shù)據(jù)為一個(gè)稱為FsImage的二進(jìn)制文件中,并保存到本地的文件系統(tǒng)中,同時(shí)為了保證數(shù)據(jù)的可靠性,還參加了稱之為Editlog的操作日志,這兩個(gè)文件分別存在配置文件的目錄下,和分別下創(chuàng)立文件fsimage、fstime、VERSION、image/fsimage,文件的用途如下:fsimage:存儲(chǔ)命名空間(實(shí)際上就是目錄和文件)的元數(shù)據(jù)信息;edits:用來(lái)存儲(chǔ)對(duì)命名空間操作的日志信息,實(shí)現(xiàn)NameNode節(jié)點(diǎn)的恢復(fù);fstime:用來(lái)存儲(chǔ)checkpoint的時(shí)間;VERSION:用來(lái)存儲(chǔ)NameNode版本信息;/image/fsimage:上一次提交前的fsimage文件;啟動(dòng)過(guò)程在HDFS整個(gè)系統(tǒng)中,包括了一臺(tái)NameNode節(jié)點(diǎn)和假設(shè)干個(gè)DataNode節(jié)點(diǎn),HDFS的啟動(dòng)過(guò)程就是一個(gè)NameNode節(jié)點(diǎn)以及所有DataNode節(jié)點(diǎn)的啟動(dòng)過(guò)程;其中,NameNode的啟動(dòng)方式有:format、regular、upgrade、rollback、finalize、importCheckpoint六種,DataNode的啟動(dòng)方式有:regular、rollback兩種;正常的啟動(dòng)都是regular方式,NameNode節(jié)點(diǎn)一定要在其它的任何DataNode節(jié)點(diǎn)之前啟動(dòng),而且,在NameNode節(jié)點(diǎn)啟動(dòng)之后,其它的DataNode也不能馬上就啟動(dòng)。NameNode啟動(dòng)步驟如下:?jiǎn)?dòng)RPCServer;讀取fsimage文件,讀取editlog文件,并進(jìn)行合并,加載FSImage到內(nèi)存,開啟Server遠(yuǎn)程調(diào)用效勞;進(jìn)入平安模式,等待DataNode節(jié)點(diǎn)注冊(cè);統(tǒng)計(jì)DataNode節(jié)點(diǎn)上報(bào)的BlockReport,一定時(shí)間間隔沒(méi)有新的注冊(cè)和報(bào)告,就離開平安模式,開始效勞;NameNode的啟動(dòng)流程如下:DataNode注冊(cè)HDFS啟動(dòng)時(shí),DataNode節(jié)點(diǎn)要向NameNode節(jié)點(diǎn)注冊(cè),一是告訴NameNode節(jié)點(diǎn)自己提供效勞的網(wǎng)絡(luò)地址端口,二是獲取NameNode節(jié)點(diǎn)對(duì)自己的管理與控制。NameNode節(jié)點(diǎn)作為中心效勞器要來(lái)收集所有的DataNode的當(dāng)前工作情況,并以此來(lái)負(fù)責(zé)整個(gè)集群的負(fù)載均衡與任務(wù)的合理安排調(diào)度。DataNode節(jié)點(diǎn)通過(guò)調(diào)用專門的協(xié)議來(lái)向NameNode節(jié)點(diǎn)進(jìn)行注冊(cè),發(fā)送數(shù)據(jù)傳輸/交換的效勞地址端口,DataNode節(jié)點(diǎn)的存儲(chǔ)器全局編號(hào),查詢DataNode節(jié)點(diǎn)當(dāng)前狀態(tài)信息的端口號(hào),DataNode節(jié)點(diǎn)提供ClientDatanodeProtocol效勞端口號(hào)這4種信息。NameNode接受到注冊(cè)信息后的處理步驟如下:驗(yàn)證DataNode的版本是否一致;檢查DataNode是否允許添加到HDFS集群中;將DataNode的描述信息和它對(duì)應(yīng)的storageID做一個(gè)映射并保存起來(lái);注冊(cè)信息作為一次心跳被記錄;該DataNode節(jié)點(diǎn)被參加到heartbeats集合中,NameNode實(shí)時(shí)監(jiān)測(cè)該DataNode節(jié)點(diǎn)當(dāng)前是否存活;在DataNode節(jié)點(diǎn)注冊(cè)成功之后,DataNode會(huì)將在啟動(dòng)時(shí),掃描其保存在所配置的目錄下所保存的所有文件塊,組織成Blockreport發(fā)送給NameNode,NameNode在接收到一個(gè)datanode的blockReport后,將這些接收到的blocks插入到BlocksMap表中,NameNode從report中獲知當(dāng)前report上來(lái)的是哪個(gè)DataNode的塊信息,此后,DataNode定期的向NameNode節(jié)點(diǎn)發(fā)送心跳包,來(lái)告訴它自己當(dāng)前工作是正常的。在NameNode節(jié)點(diǎn)有一個(gè)后臺(tái)工作線程會(huì)定期的檢測(cè)哪兒數(shù)據(jù)節(jié)點(diǎn)沒(méi)有按時(shí)發(fā)送心跳包,對(duì)于那些沒(méi)有按時(shí)發(fā)送心跳包的數(shù)據(jù)節(jié)點(diǎn)就認(rèn)為它們是不可用的,并去除與它們相關(guān)的信息。DataNode注冊(cè)的流入如下列圖所示:心跳連接分布式的架構(gòu)中,心跳連接〔Heartbeat〕有著至關(guān)重要的作用,系統(tǒng)通過(guò)Heartbeat維持著master和slave之間,或者slave與slave之間的關(guān)系,讓master了解slave的狀態(tài),讓slave從master處獲取最新命令,或者讓各個(gè)slave了解其他slave的狀態(tài)。在HDFS中,Datanode通過(guò)定期的向Namenode發(fā)送心跳,告訴當(dāng)前Datanode的狀態(tài)信息,順便告訴Namenode自己還活著,而Namenode通過(guò)對(duì)Datanode的心跳的答復(fù)發(fā)送一些命令信息。HDFS中NameNode接收到DataNode的Heartbeat后的處理步驟如下:首先對(duì)DataNode的身份進(jìn)行檢查,版本信息,注冊(cè)信息;更新NameNode中關(guān)于該DataNode的狀態(tài)信息,比方總空間,使用空間,空閑空間等等;查詢?cè)揇ataNode相應(yīng)的BLOCK的狀態(tài),生成對(duì)DataNode的命令列表,比方刪除損壞BLOCK,增加副本個(gè)數(shù)不夠的block等等;檢查當(dāng)前的分布式更新狀態(tài);將生成的命令反響給相應(yīng)的DataNode;Heartbeat處理完畢;寫入文件HDFS作為面向網(wǎng)絡(luò)效勞的存儲(chǔ)系統(tǒng),是基于網(wǎng)絡(luò)I/O數(shù)據(jù)流的文件操作,不同于通常的文件I/O數(shù)據(jù)流操作,在HDFS中,寫入文件涉及到3個(gè)方面:寫入客戶端、NameNode和DataNode,寫入的流程示意圖如下:寫入步驟如下:客戶端通過(guò)調(diào)用文件系統(tǒng)API的Create方法來(lái)請(qǐng)求創(chuàng)立文件;通過(guò)對(duì)namenode發(fā)出rpc請(qǐng)求,在namenode的namespace里面創(chuàng)立一個(gè)新的文件,但是,這時(shí)候并不關(guān)聯(lián)任何的塊。Namenode進(jìn)行很多檢查來(lái)保證不存在要?jiǎng)?chuàng)立的文件已經(jīng)存在于文件系統(tǒng)中,還有檢查是否有相應(yīng)的權(quán)限來(lái)創(chuàng)立文件;客戶端開始寫數(shù)據(jù)。開發(fā)庫(kù)會(huì)將文件切分成多個(gè)包packets,并在內(nèi)部以中間隊(duì)列〔dataqueue〕的形式管理這些packets,并向Namenode申請(qǐng)新的blocks,獲取用來(lái)存儲(chǔ)副本〔replicas〕的適宜的datanodes列表,列表的大小根據(jù)在Namenode中對(duì)replication副本數(shù)的設(shè)置而定。這些DataNodes組成一個(gè)流水線〔PipeLine〕,開發(fā)庫(kù)把packet以流的方式寫入第一個(gè)datanode,該datanode把該packet存儲(chǔ)之后,再將其傳遞給在此pipeline中的下一個(gè)datanode,直到最后一個(gè)datanode,這種寫數(shù)據(jù)的方式呈流水線的形式。最后一個(gè)datanode成功存儲(chǔ)之后會(huì)返回一個(gè)ackpacket,在pipeline里傳遞至客戶端,在客戶端的開發(fā)庫(kù)內(nèi)部維護(hù)著"ackqueue",成功收到datanode返回的ackpacket后會(huì)從"ackqueue"移除相應(yīng)的packet。如果傳輸過(guò)程中,有某個(gè)datanode出現(xiàn)了故障,那么當(dāng)前的pipeline會(huì)被關(guān)閉,出現(xiàn)故障的datanode會(huì)從當(dāng)前的pipeline中移除,剩余的block會(huì)繼續(xù)剩下的datanode中繼續(xù)以pipeline的形式傳輸,同時(shí)Namenode會(huì)分配一個(gè)新的datanode,保持副本〔replicas〕設(shè)定的數(shù)量。讀取文件在HDFS中文件是分塊存儲(chǔ)的,每一個(gè)塊還有多個(gè)備份,同時(shí)不同的塊的備份被存在不同的DataNode節(jié)點(diǎn)上,讀取HDFS中的一個(gè)文件的時(shí)候,必須搞清楚這個(gè)文件由哪些塊組成,這個(gè)操作就涉及到對(duì)NameNode的訪問(wèn),因?yàn)镹ameNode存儲(chǔ)了文件-塊序列的映射信息,客戶端通過(guò)映射信息得到實(shí)際數(shù)據(jù)的存儲(chǔ)位置,然后與DataNode進(jìn)行交互執(zhí)行文件數(shù)據(jù)的讀取操作。讀取的流程示意圖如下:讀取的步驟如下:客戶端通過(guò)用調(diào)用文件系統(tǒng)API的Create方法來(lái)請(qǐng)求翻開文件,NameNode會(huì)視情況返回文件的局部或者全部數(shù)據(jù)塊列表;對(duì)于每一個(gè)數(shù)據(jù)塊,NameNode節(jié)點(diǎn)返回保存數(shù)據(jù)塊的數(shù)據(jù)節(jié)點(diǎn)的地址;開發(fā)庫(kù)返回網(wǎng)絡(luò)數(shù)據(jù)流給客戶端,用來(lái)讀取數(shù)據(jù)??蛻舳苏{(diào)用數(shù)據(jù)流的read()函數(shù)開始讀取數(shù)據(jù)。數(shù)據(jù)流連接保存此文件第一個(gè)數(shù)據(jù)塊的最近的數(shù)據(jù)節(jié)點(diǎn)。Data從數(shù)據(jù)節(jié)點(diǎn)讀到客戶端;當(dāng)此數(shù)據(jù)塊讀取完畢時(shí),數(shù)據(jù)流關(guān)閉和此數(shù)據(jù)節(jié)點(diǎn)的連接,然后連接此文件下一個(gè)數(shù)據(jù)塊的最近的數(shù)據(jù)節(jié)點(diǎn);當(dāng)讀取完列表的Block后,且文件讀取還沒(méi)有結(jié)束,客戶端開發(fā)庫(kù)會(huì)繼續(xù)向NameNode獲取下一批的Block列表;當(dāng)客戶端讀取完畢數(shù)據(jù)的時(shí)候,調(diào)用close函數(shù);在讀取數(shù)據(jù)的過(guò)程中,讀取完一個(gè)Block都會(huì)CheckSum驗(yàn)證,如果讀取塊驗(yàn)證失敗,客戶端會(huì)通知NameNode,嘗試連接包含此數(shù)據(jù)塊的下一個(gè)數(shù)據(jù)節(jié)點(diǎn);如果客戶端在與DataNode通信出現(xiàn)錯(cuò)誤,則嘗試連接包含此數(shù)據(jù)塊的下一個(gè)數(shù)據(jù)節(jié)點(diǎn);失敗的數(shù)據(jù)節(jié)點(diǎn)將被記錄,以后不再連接;刪除文件用戶或者應(yīng)用刪除某個(gè)文件,這個(gè)文件并沒(méi)有立刻從HDFS中刪除。相反,HDFS將這個(gè)文件重命名,并轉(zhuǎn)移到/trash目錄。當(dāng)文件還在/trash目錄時(shí),該文件可以被迅速地恢復(fù)。文件在/trash中保存的時(shí)間是可配置的,當(dāng)超過(guò)這個(gè)時(shí)間,Namenode就會(huì)將該文件從namespace中刪除。文件的刪除,也將釋放關(guān)聯(lián)該文件的數(shù)據(jù)塊。數(shù)據(jù)校驗(yàn)HDFS中的數(shù)據(jù)塊有可能是損壞的,這個(gè)損壞可能是由于Datanode的存儲(chǔ)設(shè)備錯(cuò)誤、網(wǎng)絡(luò)錯(cuò)誤或者軟件bug造成的,HDFS為了保證數(shù)據(jù)的可靠性,在數(shù)據(jù)實(shí)際存儲(chǔ)之前都會(huì)校驗(yàn)數(shù)據(jù)的CheckSum,當(dāng)客戶端通過(guò)流水線寫入文件到DataNode,最后一個(gè)DataNode會(huì)負(fù)責(zé)檢查CheckSum,當(dāng)客戶端讀取文件時(shí),也會(huì)將下載的塊的校驗(yàn)和與DataNode上的校驗(yàn)和進(jìn)行比較。因?yàn)镠DFS保存有同一個(gè)block的多個(gè)備份,所以它可以用好的副本來(lái)替換損壞的數(shù)據(jù)副本。如果某個(gè)客戶端在讀取數(shù)據(jù)時(shí)檢測(cè)到數(shù)據(jù)錯(cuò)誤,它會(huì)向NameNode上報(bào)信息告知具體的badblock還有DataNode,NameNode會(huì)把指定的block標(biāo)記為"corrupt",之后的客戶端就不會(huì)再被定位到此block,此block也不會(huì)再被復(fù)制到其它DataNode上,之后NameNode會(huì)調(diào)度一個(gè)此block的正常副本,以保證負(fù)載平衡,這之后,損壞的block副本會(huì)被刪除。HDFS測(cè)試與分析測(cè)試目的測(cè)試HDFS的IO性能,高吞吐量,高可靠性,并比照與FTP傳輸方式進(jìn)行性能分析。測(cè)試環(huán)境配置項(xiàng)詳細(xì)HDFS測(cè)試集群配置項(xiàng)Hadoop0.23虛擬機(jī)CPU:1CPU內(nèi)存:1024MB硬盤:30GB網(wǎng)卡:100MbpsOS:RedHatEnterpriseServer6.1(Kernel2.63.32-131.0.15.el6.i686)節(jié)點(diǎn)設(shè)置NameNode×1;DataNode×8,因?yàn)樘摂M機(jī)緣故,網(wǎng)卡全部為100M;NameNode(80)DataNode1〔81〕DataNode2〔82〕DataNode3〔83〕DataNode4〔84〕DataNode5〔85〕DataNode6〔86〕DataNode7〔87〕DataNode8〔88〕HDFS設(shè)置副本數(shù)=3BlockSize=64MB〔128MB〕FTP測(cè)試效勞器配置項(xiàng)FTP站點(diǎn)Internet信息效勞(IIS)管理器

MicrosoftCorporation版本:6.0虛擬機(jī)CPU:1CPU內(nèi)存:1024MB硬盤:30GB網(wǎng)卡:100MbpsOS:windowsserver2003測(cè)試客戶端A類:網(wǎng)卡100MbpsB類:網(wǎng)卡1Gbps測(cè)試/監(jiān)控工具集群端MRTG(MultiRouterTrafficGrapher)測(cè)試客戶端IOMeterFTP客戶端CuteFTP8Professional備注8bps=1Byte/s1Gbps=128MB/s100Mbps=12.8MB/S以下所有的測(cè)試數(shù)據(jù)網(wǎng)絡(luò)吞吐量單位均為MB因?yàn)闇y(cè)試的時(shí)候存在硬件條件等資源的缺乏,故在對(duì)高并發(fā)的測(cè)試結(jié)果僅提供方向性的指導(dǎo),如果需要更加精確的數(shù)據(jù)則需要更加復(fù)雜和大范圍的測(cè)試測(cè)試環(huán)境網(wǎng)絡(luò)拓?fù)鋱D如下:測(cè)試度量DataNode個(gè)數(shù):8測(cè)試樣本文件大?。?2MB、256MB、512MB、1GB讀并發(fā)數(shù):1、4寫并發(fā)數(shù):1最大客戶端數(shù):2測(cè)試結(jié)果與分析寫入文件測(cè)試測(cè)試〔1〕在8臺(tái)DataNode,BlockSize=64MB的情況下,在單臺(tái)Windows客戶端通過(guò)調(diào)用HDFSAPI,分別寫入32MB、256MB、512MB、1GB固定大小的文件。我們記錄下寫入不同文件所花費(fèi)的時(shí)間。〔2〕一臺(tái)FTP效勞器,配置使用默認(rèn)配置,上傳工具使用CuteFTP8Professional,分別寫入32MB、256MB、512MB、1GB固定大小的文件。我們記錄下寫入不同文件所花費(fèi)的時(shí)間。HDFS與FTP寫入文件時(shí)間比照由上圖可以看出,在各種大小不同文件的寫入時(shí)間比照上,可以看出HDFS相對(duì)于FTP的寫入效率要低一點(diǎn),所以相對(duì)于FTP方式來(lái)說(shuō),HDFS在文件的寫入效率上不占優(yōu)勢(shì),這也符合之前我們HDFS的研究結(jié)論,因?yàn)槲募ㄟ^(guò)客戶端上傳給HDFS后,還需要對(duì)文件進(jìn)行分塊、復(fù)制備份等操作,不如FTP處理方式單一,在一定程度上對(duì)損耗了文件的寫入性能。單客戶端讀取文件測(cè)試〔1〕在8臺(tái)DataNode,BlockSize=64MB的情況下,在單臺(tái)Windows客戶端通過(guò)調(diào)用HDFSAPI,分別讀取32MB、256MB、512MB、1GB大小的文件,我們記錄整個(gè)過(guò)程所花費(fèi)的時(shí)間?!?〕一臺(tái)FTP效勞器,配置使用默認(rèn)配置,在單臺(tái)客戶端的情況下,下載工具使用CuteFTP8Professional,分別讀取32MB、256MB、512MB、1GB大小的文件,我們記錄整個(gè)過(guò)程所花費(fèi)的時(shí)間。〔3〕HDFS與FTP讀取花費(fèi)時(shí)間比照從上圖中,我們可以得出這樣的結(jié)論,在單臺(tái)客戶端的讀取情況下,HDFS的時(shí)間花費(fèi)少于FTP文件共享的方式,并且隨著讀取文件的加大,HDFS的優(yōu)勢(shì)越明顯文件大小1GB512MB256MB32MBFTP(MB/S)99911HDFS(MB/S)12121011他們讀取文件的平均速度上來(lái)看,HDFS更加接近于效勞器的網(wǎng)卡上行速率(12.5MB/S),和客戶端的網(wǎng)卡下行速度(12.5MB/S),說(shuō)明HDFS在文件讀取的時(shí)候更加充分利用了網(wǎng)絡(luò)IO。多客戶端讀取文件測(cè)試上面我們通過(guò)單個(gè)客戶端,沒(méi)有并發(fā)的情況下,進(jìn)行了寫入和讀取效率測(cè)試。那么在多客戶端并發(fā)訪問(wèn)的情況下,會(huì)發(fā)生什么情況呢?下面的測(cè)試就是,在多客戶端讀取文件的情況下,測(cè)試HDFS和FTP方式是否能到達(dá)客戶端的IO最大值,及多并發(fā)的情況下,網(wǎng)絡(luò)io的使用率HDFS客戶端=4,文件大小分別32MB,256MB,512MB,1GB,取每個(gè)客戶端讀取同樣大小文件花費(fèi)時(shí)間的平均值FTP客戶端=4,文件大小分別32MB,256MB,512MB,1GB,取每個(gè)客戶端讀取同樣大小文件花費(fèi)時(shí)間的平均值Hdfs在4個(gè)客戶端的情況下hdfs花費(fèi)的時(shí)間比FTP花費(fèi)的時(shí)間要少的多,并且隨文件的增大這HDFS讀取文件的優(yōu)勢(shì)越加明顯。接下來(lái)我們?cè)購(gòu)目蛻舳宋募螺d速率分析一下,HDFS與FTP之間的性能差異,究竟有多大。我們就拿1G文件的讀取速率來(lái)進(jìn)行比照。A、B、C、D是4臺(tái)客戶端的編號(hào)。分析從以上的測(cè)試結(jié)果,可以看出:1、在客戶端并發(fā)讀取文件的情況下,HDFS方式的性能表現(xiàn)遠(yuǎn)遠(yuǎn)超過(guò)FTP方式。2、FTP每臺(tái)傳輸速度速率比較平均,總帶寬使用為9.28MB/S〔4臺(tái)客戶端的帶寬之和〕,這是因?yàn)槊颗_(tái)客戶端讀取文件的時(shí)候都是訪問(wèn)的同一臺(tái)FTP效勞器所以,F(xiàn)TP效勞器的帶寬〔出口帶寬是100MB/S〕成了客戶端讀取速度的最大障礙。3、HDFS的數(shù)據(jù)吞吐量為37.81MB/S37.81=10.237.81=10.22+8.57+9.35+9.67理論值為50MB/s=12.5MB/s×4同時(shí),從集群中各臺(tái)機(jī)器上通過(guò)MRTG采集的網(wǎng)絡(luò)輸入/輸出數(shù)據(jù),可以看出,局部DataNode會(huì)到達(dá)當(dāng)前網(wǎng)絡(luò)的最大速率〔如:DataNode2、DataNode4、DataNode6〕。針對(duì)HDFS的分塊策略對(duì)文件讀取速度的影響,我們又通過(guò)實(shí)驗(yàn)驗(yàn)證了不同的分塊大小對(duì)HDFS讀取速度的影響程度??蛻舳?4,文件大小=1GB,BlockSize=128MB,取每個(gè)客戶端讀取時(shí)間為了盡可能的防止2個(gè)客戶端同時(shí)讀取DataNode的情況,通過(guò)調(diào)整配置,將分塊大小設(shè)置為128MB,測(cè)試文件樣本為1GB大小文件,這樣,文件將被拆分成8塊,與DataNode的數(shù)量相同,這樣在同一順序下,同時(shí)兩臺(tái)客戶端同時(shí)訪問(wèn)一臺(tái)DataNode的幾率最小,模擬的讀取效果如下列圖:小文件讀取測(cè)試從前面的研究中〔見(jiàn)章〕,我們得出這么這么一個(gè)結(jié)論,“HDFS傾向于處理大文件〞。但是我們實(shí)際應(yīng)用中,可能會(huì)要求用分布式文件系統(tǒng)來(lái)存儲(chǔ)海量的小文件,于是我們又設(shè)計(jì)了512KB,1MB,1.5MB,2MB四個(gè)小文件數(shù)據(jù)樣本,進(jìn)行了單客戶端文件讀取測(cè)試,用于測(cè)試HDFS和FTP相比在讀取小文件上的性能究竟如何。我們將HDFS的blocksize為1MB。為了得到更加精確的數(shù)據(jù)采用批量下載采用文件夾得方式,分別讀取文件夾下的所有文件;ftp直接讀取,HDFS通過(guò)調(diào)用API對(duì)指定文件夾下的文件進(jìn)行遍歷讀取的方式,其中:采用文件夾得方式,分別讀取文件夾下的所有文件;ftp直接讀取,HDFS通過(guò)調(diào)用API對(duì)指定文件夾下的文件進(jìn)行遍歷讀取〔1〕40個(gè)512KB文件〔2〕10個(gè)1MB文件〔3〕10個(gè)1.5MB文件〔4〕10個(gè)2MB文件進(jìn)行批量下載,每個(gè)文件的平均下載時(shí)間為總時(shí)間除以文件個(gè)數(shù)。測(cè)試結(jié)果如下:從這個(gè)圖中我們可以看出,HDFS在1.5MB以下的文件的時(shí)候相對(duì)于FTP讀取相同的文件大小花費(fèi)的時(shí)間要多一些,但是在1.5MB之后花費(fèi)的時(shí)間開始比FTP少;在文件較小的時(shí)候網(wǎng)絡(luò)IO的使用效率表現(xiàn)不明顯,在數(shù)據(jù)量加大的情況下,越顯明顯,就好比100Mbps的網(wǎng)絡(luò)和1Gbps的網(wǎng)絡(luò)傳1Mb的文件一樣,在時(shí)間上感覺(jué)不到明顯的差距,而在文件較小的時(shí)候HDFS的效勞器NameNode的響應(yīng)時(shí)間相對(duì)于FTP較長(zhǎng),并且隨著文件數(shù)量的增加這一現(xiàn)象越顯明顯(我們這里所說(shuō)的增加是以萬(wàn)為單位,因?yàn)樗械奈募窂蕉际欠旁贜ameNode的內(nèi)存中,文件越多,占用的內(nèi)存越大反響越慢)??煽啃詼y(cè)試從前面的研究中可以的得出“HDFS可靠性和性能主要通過(guò)數(shù)據(jù)塊的副本來(lái)實(shí)現(xiàn)〞〔見(jiàn)3.1.5章〕,在單一的DataNode出現(xiàn)故障不能效勞時(shí),NameNode會(huì)協(xié)調(diào)其他存儲(chǔ)了相同數(shù)據(jù)副本的DataNode來(lái)提供剩余的數(shù)據(jù),所以可靠性測(cè)試的主要方式是觀察在BlockSize為64M,備份數(shù)量為3的情況下,不同大小的文件在上傳后在HDFS上的數(shù)據(jù)塊分布情況。如果數(shù)據(jù)塊〔Block〕分布均勻的話,HDFS就能提供理論上的高可靠性,同時(shí)網(wǎng)絡(luò)帶寬也能得到更好的利用。我們選擇的數(shù)據(jù)樣本為,1GB、512MB、128MB、32MB文件,通過(guò)觀察的發(fā)現(xiàn)Block在8臺(tái)DataNode上的分布情況如下:從以上圖表,可以看出文件越大,經(jīng)過(guò)64MB分塊劃分后,Block數(shù)量也越多,在整個(gè)HDFS中的DataNode上也分布的越均勻。在實(shí)驗(yàn)中通過(guò)中斷DataNode3上的網(wǎng)絡(luò)連接,使其退出效勞,而后經(jīng)過(guò)重新連接,參加效勞后,會(huì)發(fā)現(xiàn)原來(lái)在DataNode3上的Block在整個(gè)副本數(shù)設(shè)置為3的集群中存在4個(gè)副本,這是因?yàn)镠DFS集群因某臺(tái)DataNode退役,造成數(shù)據(jù)塊副本數(shù)缺乏,為了保證可靠性,HDFS內(nèi)部協(xié)調(diào)所有DataNode,保證集群中任一Block的副本數(shù)都維持在設(shè)置的平安數(shù)目。測(cè)試總結(jié)從以上實(shí)驗(yàn)結(jié)果和分項(xiàng)分析,總結(jié)如下:HDFS的讀取性能明顯優(yōu)于寫入性能,寫入過(guò)程因?yàn)橐?jīng)過(guò)分布式處理以及數(shù)據(jù)冗余的處理,寫入過(guò)程較讀取過(guò)程復(fù)雜,對(duì)資源和性能的消耗也要多一些,所以HDFS集群更適合數(shù)據(jù)“一次寫入,屢次讀取“的情況;在讀取的時(shí)候,HDFS在響應(yīng)客戶端請(qǐng)求時(shí),會(huì)衡量集群的負(fù)載情況,經(jīng)過(guò)均衡處理后,返回最適宜的DataNode列表給客戶端,盡可能減少訪問(wèn)“熱點(diǎn)“的出現(xiàn);HDFS的讀取速度受分塊和DataNode數(shù)量的影響,所以應(yīng)該根據(jù)實(shí)際的DataNode規(guī)模大小以及所需存儲(chǔ)文件在多數(shù)情況下大小,選擇設(shè)置分塊的大小進(jìn)行調(diào)整和優(yōu)化;在HDFS中的一個(gè)DataNode失效退役或某一數(shù)據(jù)塊損壞后,HDFS為了可靠性考慮,DataNode通過(guò)心跳連接,發(fā)布狀態(tài)信息之后,HDFS集群會(huì)收集并自動(dòng)檢查每個(gè)分塊的復(fù)本數(shù)和有效性,在集群中,當(dāng)正常的復(fù)本數(shù)小于設(shè)置的副本數(shù)時(shí),HDFS將自動(dòng)進(jìn)行協(xié)同調(diào)整,將在其他DataNode上正常的副本復(fù)制到其他正常工作的DataNode上,保持整個(gè)集群的穩(wěn)定性和可靠性;HDFS的缺乏以及改良策略HDFS作為目前比較優(yōu)秀的分布式存儲(chǔ)系統(tǒng),在具有高性能、高可靠性、高可用性、高可擴(kuò)展性的優(yōu)點(diǎn)的同時(shí),還存在了一些缺乏,比方:為了簡(jiǎn)化數(shù)據(jù)的一致性問(wèn)題,目前HDFS不支持文件的添加;不支持?jǐn)?shù)據(jù)自動(dòng)均衡,即當(dāng)某個(gè)Datanode節(jié)點(diǎn)上的空閑空間低于特定的臨界點(diǎn),那么就會(huì)啟動(dòng)一個(gè)方案自動(dòng)地將數(shù)據(jù)從一個(gè)Datanode搬移到空閑的Datanode。當(dāng)對(duì)某個(gè)文件的請(qǐng)求突然增加,那么也可能啟動(dòng)一個(gè)方案創(chuàng)立該文件新的副本,并分布到集群中以滿足應(yīng)用的要求;HDFS的下載策略是順序下載數(shù)據(jù)塊,不支持?jǐn)帱c(diǎn)續(xù)傳;目前不支持快照,即當(dāng)數(shù)據(jù)損壞時(shí),無(wú)法恢復(fù)到過(guò)去某一個(gè)正確的時(shí)間點(diǎn);不適合大量小文件讀取,HDFS中文件的元數(shù)據(jù)信息需要占用NameNode的150字節(jié)的運(yùn)行內(nèi)存和存儲(chǔ)空間,過(guò)多的小文件會(huì)大量消耗NameNode的存儲(chǔ)空間和運(yùn)行內(nèi)存,而且因?yàn)閴K太多,塊的尋址時(shí)間很可能比數(shù)據(jù)傳輸時(shí)間還要長(zhǎng)。并行讀取其中,針對(duì)HDFS順序下載的策略對(duì)性能的影響較大并且有改良的空間,HDFS客戶端下載文件時(shí),會(huì)從NameNode獲取所有數(shù)據(jù)塊的下載地址,當(dāng)客戶端下載某個(gè)數(shù)據(jù)塊時(shí),只是與存在有該數(shù)據(jù)塊的一個(gè)DataNode建立連接并下載,如果一個(gè)下載概率大得熱點(diǎn)文件的數(shù)據(jù)塊存儲(chǔ)在低帶寬的DataNode上,顯然,順序下載的策略會(huì)導(dǎo)致DataNode的負(fù)載不均衡,嘗試通過(guò)與所有存儲(chǔ)該數(shù)據(jù)塊的DataNode建立連接,使用一種并行下載的策略從這些DataNode上下載,以提高數(shù)據(jù)塊的下載效率,并可以進(jìn)一步實(shí)現(xiàn)文件的斷點(diǎn)續(xù)傳。大致思路如下:獲得HDFS的BlockSize分塊大??;通過(guò)調(diào)用NameNode方法,獲取下載文件大小fileLength;將下載文件大小,按照BlockSize拆分成Round〔fileLength/BlockSize〕+1個(gè)數(shù)組,數(shù)組記錄每個(gè)分塊的開始位置和結(jié)束位置[StartPos,EndPos];在本地創(chuàng)立一個(gè)FileLength大小的空文件;通過(guò)多線程,并行下載每個(gè)Block,每個(gè)塊在空文件指定的StartPos位置上進(jìn)行寫入;壓縮處理通過(guò)將原始數(shù)據(jù)進(jìn)行壓縮后進(jìn)行寫入,讀出數(shù)據(jù)時(shí)進(jìn)行解壓縮,將會(huì)節(jié)省大量的磁盤空間和網(wǎng)絡(luò)帶寬。數(shù)據(jù)壓縮大致的如下兩種策略:在客戶端在寫入文件的時(shí)候進(jìn)行壓縮,讀取文件的時(shí)候進(jìn)行解壓縮操作;在DataNode接受到block后,對(duì)block文件進(jìn)行壓縮,發(fā)送Block時(shí),翻開Block時(shí)進(jìn)行解壓;其中,在客戶端進(jìn)行壓縮的策略給HDFS帶來(lái)的額外開銷最小,因?yàn)閴嚎s/解壓縮處理的最大開銷是CPU的開銷,而將CPU的開銷分散在各個(gè)客戶端上,對(duì)HDFS整體的影響幾乎沒(méi)有。小文件優(yōu)化對(duì)于小文件的處理可以通過(guò)以下幾種方案進(jìn)行優(yōu)化:小文件打包歸檔Hadoop提供了HarFile、SequenceFile、MapFile三種方式對(duì)小文件進(jìn)行歸檔處理,原理就是將多個(gè)小文件打包合并成一個(gè)大文件,打包后的文件由索引和存儲(chǔ)兩大局部組成,索引局部記錄了原有的目錄結(jié)構(gòu)和文件狀態(tài),小文件和文件包通過(guò)構(gòu)建的索引維護(hù)映射關(guān)系。HarFile、SequenceFile、MapFile結(jié)構(gòu)示意圖如下:文件名映射地址通過(guò)將文件名映射到文件的物理地址,簡(jiǎn)化文件訪問(wèn)流程,提高讀寫效率,目前,淘寶文件系統(tǒng)(TFS-TaobaoFileSystem)就是采用這種方式以滿足淘寶網(wǎng)內(nèi)部各項(xiàng)應(yīng)用中的海量小文件的處理。在TFS中,將大量的小文件合并成為一個(gè)大文件,這個(gè)大文件稱為塊(Block),DataServer進(jìn)程會(huì)給Block中的每個(gè)文件分配一個(gè)ID(FileID,該ID在每個(gè)Block中唯一),并將每個(gè)文件在Block中的信息存放在和Block對(duì)應(yīng)的Index文件中。TFS不像HDS那樣NameNode需要存儲(chǔ)文件名與Blockid,Blockid與DataNode的映射,而只需要存放<filename,blockid,offset,length>的映射以及<blockid,datanode>的映射。這樣一來(lái)元數(shù)據(jù)信息就會(huì)減少很多,從而解決HDFS的NameNode的瓶頸問(wèn)題。TFS的文件名由塊號(hào)和文件號(hào)通過(guò)某種對(duì)應(yīng)關(guān)系組成,最大長(zhǎng)度為18字節(jié)。文件名固定以T開始,第二字節(jié)為該集群的編號(hào)(可以在配置項(xiàng)中指定,取值范圍1~9)。余下的字節(jié)由BlockID和FileID通過(guò)一定的編碼方式得到。文件名由客戶端程序進(jìn)行編碼和解碼,它映射方式如下列圖:TFS客戶程序在讀文件的時(shí)候通過(guò)將文件名轉(zhuǎn)換為BlockID和FileID信息,然后可以在NameServer取得該塊所在DataServer的信息〔如果客戶端有該Block與DataServer的緩存,則直接從緩存中取〕,然后與DataServer進(jìn)行讀取操作。TFS的整個(gè)讀取過(guò)程如下列圖所示:中央節(jié)點(diǎn)水平擴(kuò)展因?yàn)镠DFS處理海量小文件的主要瓶頸在于NameNode,所以采用聯(lián)邦化的體系結(jié)構(gòu),將NameNode進(jìn)行水平擴(kuò)展,并將BlockSize調(diào)小,增加NameNode數(shù)量,形成多個(gè)邏輯分區(qū)卷,減少塊的尋址時(shí)間,關(guān)于聯(lián)邦化體系結(jié)構(gòu)的詳細(xì)內(nèi)容請(qǐng)參考《 聯(lián)邦化體系結(jié)構(gòu)》。分布式存儲(chǔ)系統(tǒng)在區(qū)域影像中心的應(yīng)用設(shè)想隨著國(guó)際國(guó)內(nèi)區(qū)域醫(yī)療信息整合和共享系統(tǒng)的建設(shè)和不斷開展,區(qū)域化醫(yī)療影像中心作為區(qū)域醫(yī)療臨床信息共享系統(tǒng)的重要組成局部,對(duì)區(qū)域醫(yī)療信息系統(tǒng)的建設(shè)起著舉足輕重的作用,區(qū)域化醫(yī)療影像中心的主要建設(shè)目標(biāo),是實(shí)現(xiàn)區(qū)域內(nèi)各個(gè)集團(tuán)醫(yī)院、醫(yī)院、社區(qū)衛(wèi)生效勞站之間,醫(yī)療影像數(shù)據(jù)的共享、交換、調(diào)閱和存儲(chǔ)。其中,分布在各醫(yī)院的影像數(shù)據(jù)源,產(chǎn)生的數(shù)據(jù)量巨大,一家市級(jí)醫(yī)院每日的數(shù)據(jù)生成量以GB計(jì),一年以TB計(jì)算,如果采用專用的存儲(chǔ)設(shè)備勢(shì)必造成數(shù)據(jù)中心造價(jià)昂貴,維護(hù)本錢巨大的問(wèn)題,分布式存儲(chǔ)系統(tǒng)一次寫入,屢次讀取效率高的特性,可以很大程度滿足區(qū)域化醫(yī)療影像中心系統(tǒng)海量數(shù)據(jù)存儲(chǔ)以及高性能、高吞吐量的數(shù)據(jù)傳輸?shù)膽?yīng)用要求。影像中心總體建設(shè)目標(biāo)、范圍與考量因素區(qū)域影像數(shù)據(jù)中心的總體建設(shè)目標(biāo)主要表達(dá)在:區(qū)域內(nèi)醫(yī)療機(jī)構(gòu)的數(shù)字化醫(yī)療影像及報(bào)告的聯(lián)網(wǎng)、存儲(chǔ)、歸檔和互相調(diào)閱;逐步建立區(qū)域內(nèi)全面數(shù)字化影像診斷系統(tǒng);影像數(shù)據(jù)包括:CT、MR、DSA、RF、CR、病理、腦電圖等影像檢查的報(bào)告和圖像;為了滿足聯(lián)網(wǎng)、存儲(chǔ)、歸檔和互相調(diào)閱的目標(biāo)要求,核心考量的因素有:網(wǎng)絡(luò)帶寬問(wèn)題;海量數(shù)據(jù)存儲(chǔ)量問(wèn)題;整個(gè)架構(gòu)的可擴(kuò)展性;整個(gè)架構(gòu)的高可用性;查詢的統(tǒng)一性;數(shù)據(jù)特點(diǎn)及存儲(chǔ)需求分析區(qū)域影像數(shù)據(jù)中心的主要數(shù)據(jù)來(lái)源是各個(gè)醫(yī)院終端醫(yī)療影像設(shè)備產(chǎn)生的影像文件,影像文件少則幾百KB,多則幾十MB。相比其他醫(yī)院信息系統(tǒng)〔如HIS〕而言,PACS系統(tǒng)的數(shù)據(jù)呈現(xiàn)專用數(shù)據(jù)格式、單個(gè)文件體積小、單位時(shí)間產(chǎn)生的數(shù)據(jù)量大等特點(diǎn)。綜合考慮醫(yī)療影像數(shù)據(jù)存儲(chǔ)和應(yīng)用系統(tǒng)的需求,對(duì)區(qū)域影像數(shù)據(jù)中心存儲(chǔ)的需求分析如下:大容量存儲(chǔ)因?yàn)殚喥驮\斷的需要,對(duì)醫(yī)療影像圖片的質(zhì)量和精度有較高的要求,每張圖片的容量從幾百KB到幾十MB不等,所以整個(gè)系統(tǒng)的存儲(chǔ)容量非常巨大。高數(shù)據(jù)吞吐量因?yàn)閿?shù)據(jù)中心面對(duì)大量的應(yīng)用連接以及高容量的文件傳輸,不僅對(duì)網(wǎng)絡(luò)的帶寬和數(shù)據(jù)傳輸數(shù)量都有很高的要求;高可靠性和高可用性因?yàn)獒t(yī)療影像數(shù)據(jù)中心作為整個(gè)區(qū)域醫(yī)療臨床信息共享系統(tǒng)的關(guān)鍵應(yīng)用,需要很高的可靠性和可用性保障;高可擴(kuò)展性隨著醫(yī)療影像數(shù)據(jù)中心的不斷應(yīng)用,對(duì)存儲(chǔ)的需求量也會(huì)不斷的增大,這就要求數(shù)據(jù)中心的存儲(chǔ)系統(tǒng)可以方便可靠地在線擴(kuò)展。傳統(tǒng)存儲(chǔ)方案面臨的問(wèn)題針對(duì)數(shù)據(jù)中心的數(shù)據(jù)特點(diǎn)及存儲(chǔ)需求,傳統(tǒng)的存儲(chǔ)解決方案是采用存儲(chǔ)區(qū)域網(wǎng)絡(luò)〔SAN-StorageAreaNetwork〕來(lái)實(shí)現(xiàn),其中又區(qū)分為FC-SAN〔基于光纖通道的存儲(chǔ)區(qū)域網(wǎng)絡(luò)〕和IP-SAN〔基于TPC/IP的存儲(chǔ)區(qū)域網(wǎng)絡(luò)〕。SAN通過(guò)專用的硬件實(shí)現(xiàn)高數(shù)據(jù)吞吐量、高I/O傳輸率,并通過(guò)磁盤陣列存儲(chǔ)Raid實(shí)現(xiàn)高可靠性和高可用性。但是,針對(duì)醫(yī)療影像數(shù)據(jù)中心的建設(shè),基于傳統(tǒng)的網(wǎng)絡(luò)存儲(chǔ)設(shè)備方案面臨以下幾個(gè)問(wèn)題:建設(shè)本錢高區(qū)域醫(yī)療影像的數(shù)據(jù)量到達(dá)數(shù)百TB甚至PB級(jí),采用傳統(tǒng)存儲(chǔ)架構(gòu)〔如FCSAN、IP_SAN、NAS等〕的建造本錢極高,而且維護(hù)復(fù)雜;傳輸帶寬存在瓶頸即使是高性能的IP-SAN或FC-SAN,由于應(yīng)用連接數(shù)量和文件數(shù)量的限制,其網(wǎng)絡(luò)總帶寬和處理能力也難以到達(dá)PB級(jí)別數(shù)據(jù)的處理和傳輸要求;擴(kuò)展性差目前傳統(tǒng)的網(wǎng)絡(luò)存儲(chǔ)設(shè)備的升級(jí)、擴(kuò)容、數(shù)據(jù)遷移,過(guò)程復(fù)雜,本錢高昂;針對(duì)以上幾點(diǎn)問(wèn)題,分布式的架構(gòu)是比較適宜的,分布式架構(gòu)可以有效解決了中心化影像數(shù)據(jù)中心,建設(shè)本錢和維護(hù)本錢巨大〔大型存儲(chǔ)、高帶寬網(wǎng)絡(luò)、高性能效勞器〕,傳輸帶寬瓶頸、架構(gòu)封閉,擴(kuò)展困難,集成復(fù)雜的問(wèn)題。分布式存儲(chǔ)方案的優(yōu)勢(shì)分布式存儲(chǔ)方案相對(duì)于傳統(tǒng)網(wǎng)絡(luò)存儲(chǔ)方案具有以下優(yōu)勢(shì):建設(shè)本錢低分布式存儲(chǔ)方案所構(gòu)建的存儲(chǔ)集群,運(yùn)行于普通硬件〔普通PC效勞器+SATA硬盤〕上,不需要購(gòu)置昂貴的專用設(shè)備〔SAN交換機(jī)+磁盤陣列+iSCSI硬盤〕,降低了投入本錢,躲避了投資風(fēng)險(xiǎn);傳統(tǒng)的網(wǎng)絡(luò)存儲(chǔ)方案需要配備專業(yè)人員進(jìn)行維護(hù),而且硬件和軟件需要不斷的更新?lián)Q代,維護(hù)本錢高昂,分布式存儲(chǔ)的升級(jí)維護(hù)和故障處理簡(jiǎn)單,并且分布式存儲(chǔ)的硬件更新和維護(hù)不會(huì)影響效勞的正常使用;傳輸帶寬高分布式存儲(chǔ)方案在大型網(wǎng)站應(yīng)用以及云存儲(chǔ)方面的應(yīng)用實(shí)踐證明,分布式存儲(chǔ)適用于大數(shù)據(jù)量和高并發(fā)訪問(wèn)的高性能的數(shù)據(jù)訪問(wèn),并且分布式存儲(chǔ)可以通過(guò)對(duì)存儲(chǔ)集群規(guī)模的擴(kuò)展提高總的傳輸帶寬;擴(kuò)展性高分布式存儲(chǔ)方案能夠?qū)崿F(xiàn)海量數(shù)據(jù)的存儲(chǔ),具有良好的在線擴(kuò)容能力,當(dāng)存儲(chǔ)容量缺乏時(shí),可以擴(kuò)展集群節(jié)點(diǎn)的存儲(chǔ)空間容量或集群節(jié)點(diǎn)數(shù)量,而不必中斷業(yè)務(wù)的運(yùn)行,并且通過(guò)中心節(jié)點(diǎn)的水平擴(kuò)展,優(yōu)化存取性能;結(jié)合IHEXDS-I的思考區(qū)域化醫(yī)療影像中心方案需要采用集中存儲(chǔ)和發(fā)布各醫(yī)院機(jī)構(gòu)終端的醫(yī)療影像的方式到區(qū)域醫(yī)療影像共享交換的目的,大體流程如下:各個(gè)醫(yī)療機(jī)構(gòu)終端的影像設(shè)備或者信息系統(tǒng)直接將影像發(fā)送到數(shù)據(jù)中心;各個(gè)醫(yī)療機(jī)構(gòu)的閱片工作站通過(guò)數(shù)據(jù)中心查詢/提取需要的影像,數(shù)據(jù)中心提供整個(gè)區(qū)域影像的注冊(cè)、發(fā)布、查詢和提取效勞;集成醫(yī)療環(huán)境〔IntegrationHealthCareEnterprise,IHE〕在2004年公布了跨企業(yè)級(jí)文檔共享技術(shù)框架〔Cross-EnterpriseDocumentSharing,XDS〕,IHE根據(jù)影像信息共享交換的需求,在XDS技術(shù)框架的根底上,于2005年提出了XDS-I技術(shù)框架,IHEXDS-I〔IntegrationHealthCareEnterpriseCross-EnterpriseDocumentSharing〕-區(qū)域影像共享交換技術(shù)框架的核心思想就是分布式存儲(chǔ)和集中式影像文檔索引,這種架構(gòu)可以減

溫馨提示

  • 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)論