大數(shù)據(jù)培訓(xùn)講解_第1頁
大數(shù)據(jù)培訓(xùn)講解_第2頁
大數(shù)據(jù)培訓(xùn)講解_第3頁
大數(shù)據(jù)培訓(xùn)講解_第4頁
大數(shù)據(jù)培訓(xùn)講解_第5頁
已閱讀5頁,還剩114頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

大數(shù)據(jù)培訓(xùn)講義2013-6大數(shù)據(jù)培訓(xùn)講解大數(shù)據(jù)培訓(xùn)講義2013-6大數(shù)據(jù)培訓(xùn)講解1目錄大數(shù)據(jù)起源Hadoop1.0Hadoop2.0商用環(huán)境大數(shù)據(jù)培訓(xùn)講解目錄大數(shù)據(jù)起源Hadoop1.0Hadoop2.0商用環(huán)境大2大數(shù)據(jù)起源-Google三篇GoogleMapReduceGoogle分布式文件系統(tǒng)GFSGoolge分布式結(jié)構(gòu)化數(shù)據(jù)表BigTable大數(shù)據(jù)培訓(xùn)講解大數(shù)據(jù)起源-Google三篇GoogleMapReduce3三個層面上的基本構(gòu)思如何對付大數(shù)據(jù)處理:分而治之

對相互間不具有計算依賴關(guān)系的大數(shù)據(jù),實現(xiàn)并行最自然的辦法就是采取分而治之的策略上升到抽象模型:Mapper與Reducer

MPI等并行計算方法缺少高層并行編程模型,為了克服這一缺陷,MapReduce借鑒了Lisp函數(shù)式語言中的思想,用Map和Reduce兩個函數(shù)提供了高層的并行編程抽象模型上升到構(gòu)架:統(tǒng)一構(gòu)架,為程序員隱藏系統(tǒng)層細節(jié)

MPI等并行計算方法缺少統(tǒng)一的計算框架支持,程序員需要考慮數(shù)據(jù)存儲、劃分、分發(fā)、結(jié)果收集、錯誤恢復(fù)等諸多細節(jié);為此,MapReduce設(shè)計并提供了統(tǒng)一的計算框架,為程序員隱藏了絕大多數(shù)系統(tǒng)層面的處理細節(jié)GoogleMapReduce的基本模型和處理思想大數(shù)據(jù)培訓(xùn)講解三個層面上的基本構(gòu)思GoogleMapReduce的基本模4GoogleMapReduce的基本模型和處理思想大數(shù)據(jù)分而治之

大數(shù)據(jù)計算任務(wù)子任務(wù)子任務(wù)子任務(wù)子任務(wù)……任務(wù)劃分計算結(jié)果結(jié)果合并大數(shù)據(jù)培訓(xùn)講解GoogleMapReduce的基本模型和處理思想大數(shù)據(jù)分5建立Map和Reduce抽象模型典型的流式大數(shù)據(jù)問題的特征大量數(shù)據(jù)記錄/元素進行重復(fù)處理對每個數(shù)據(jù)記錄/元素作感興趣的處理、獲取感興趣的中間結(jié)果信息排序和整理中間結(jié)果以利后續(xù)處理收集整理中間結(jié)果產(chǎn)生最終結(jié)果輸出MapReduce關(guān)鍵思想:為大數(shù)據(jù)處理過程中的兩個主要處理階段

提煉為一種抽象的操作機制GoogleMapReduce的基本模型和處理思想大數(shù)據(jù)培訓(xùn)講解建立Map和Reduce抽象模型MapReduce關(guān)鍵思想:6建立Map和Reduce抽象模型借鑒函數(shù)式程序設(shè)計語言Lisp中的思想,定義了Map和Reduce兩個抽象的操作函數(shù):map:(k1;v1)

[(k2;v2)]reduce:

(k2;[v2])

[(k3;v3)]特點:描述了對一組數(shù)據(jù)處理的兩個階段的抽象操作GoogleMapReduce的基本模型和處理思想大數(shù)據(jù)培訓(xùn)講解建立Map和Reduce抽象模型GoogleMapRedu7上升到構(gòu)架--自動并行化并隱藏低層細節(jié)海量數(shù)據(jù)存儲……數(shù)據(jù)劃分MapMapMapMap初始kv鍵值對初始kv鍵值對初始kv鍵值對初始kv鍵值對中間結(jié)果(k1,val)(k2,val)(k3,val)(k1,val)(k3,val)(k2,val)(k3,val)(k1,val)(k2,val)(k3,val)Barrier:AggregationandShuffleReduceReduceReduce(k1,values)(k2,values)(k3,values)計算結(jié)果(K1,val)(K2,val)(K3,val)GoogleMapReduce的基本模型和處理思想大數(shù)據(jù)培訓(xùn)講解上升到構(gòu)架--自動并行化并隱藏低層細節(jié)海量數(shù)據(jù)存儲……數(shù)據(jù)劃8Barrier(good,1)(good,1)(good,2)(good,1)PartitionerPartitionerPartitionerPartitioner(is,1)(is,1)(is,1)(has,1)(weather,1)(weather,1)(weather,1)(the,1)(today,1)(today,1)上升到構(gòu)架--自動并行化并隱藏低層細節(jié)海量數(shù)據(jù)存儲計算結(jié)果……數(shù)據(jù)劃分Map初始kv鍵值對初始kv鍵值對初始kv鍵值對初始kv鍵值對MapMapMap中間結(jié)果(the,1)(weather,1)(is,1)(good,1)CombinerCombinerCombinerCombiner(the,1)(weather,1)(is,1)(good,1)(today,1)(is,1)(good,1)(good,1)(weather,1)(is,1)(good,1)(today,1)(has,1)(good,1)(weather,1)(today,1)(is,1)(good,1)(good,2)(weather,1)(is,1)(today,1)(has,1)(good,1)(weather,1)ReduceReduceReduce(good,5)(is,3)(has,1)(weather,3)(the,1)(today,2)Combiner和PartitionerGoogleMapReduce的基本模型和處理思想大數(shù)據(jù)培訓(xùn)講解Barrier(good,1)PartitionerPar9GoogleMapReduce并行處理的基本過程

1.有一個待處理的大數(shù)據(jù),被劃分為大小相同的數(shù)據(jù)塊(如64MB),與與此相應(yīng)的用戶作業(yè)程序2.系統(tǒng)中有一個負責調(diào)度的主節(jié)點(Master),以與數(shù)據(jù)Map和Reduce工作節(jié)點(Worker)GoogleMapReduce的基本模型和處理思想大數(shù)據(jù)培訓(xùn)講解GoogleMapReduce并行處理的基本過程1.有一個10GoogleMapReduce并行處理的基本過程

3.用戶作業(yè)程序提交給主節(jié)點4.主節(jié)點為作業(yè)程序?qū)ふ液团鋫淇捎玫腗ap節(jié)點,并將程序傳送給map節(jié)點5.主節(jié)點也為作業(yè)程序?qū)ふ液团鋫淇捎玫腞educe節(jié)點,并將程序傳送給Reduce節(jié)點GoogleMapReduce的基本模型和處理思想大數(shù)據(jù)培訓(xùn)講解GoogleMapReduce并行處理的基本過程3.用戶作11GoogleMapReduce并行處理的基本過程

6.主節(jié)點啟動每個Map節(jié)點執(zhí)行程序,每個map節(jié)點盡可能讀取本地或本機架的數(shù)據(jù)進行計算7.每個Map節(jié)點處理讀取的數(shù)據(jù)塊,并做一些數(shù)據(jù)整理工作(combining,sorting等)并將中間結(jié)果存放在本地;同時通知主節(jié)點計算任務(wù)完成并告知中間結(jié)果數(shù)據(jù)存儲位置GoogleMapReduce的基本模型和處理思想大數(shù)據(jù)培訓(xùn)講解GoogleMapReduce并行處理的基本過程6.主節(jié)點12GoogleMapReduce并行處理的基本過程

8.主節(jié)點等所有Map節(jié)點計算完成后,開始啟動Reduce節(jié)點運行;Reduce節(jié)點從主節(jié)點所掌握的中間結(jié)果數(shù)據(jù)位置信息,遠程讀取這些數(shù)據(jù)9.Reduce節(jié)點計算結(jié)果匯總輸出到一個結(jié)果文件即獲得整個處理結(jié)果GoogleMapReduce的基本模型和處理思想大數(shù)據(jù)培訓(xùn)講解GoogleMapReduce并行處理的基本過程8.主節(jié)點13GoogleMapReduce并行處理的基本過程

完整計算過程GoogleMapReduce的基本模型和處理思想大數(shù)據(jù)培訓(xùn)講解GoogleMapReduce并行處理的基本過程完整計算過14存儲位置的計算策略策略

MapReduce的master在調(diào)度Map任務(wù)時會考慮輸入文件的位置信息,盡量將一個Map任務(wù)調(diào)度在包含相關(guān)輸入數(shù)據(jù)拷貝的機器上執(zhí)行;如果上述努力失敗了,master將嘗試在保存有輸入數(shù)據(jù)拷貝的機器附近的機器上執(zhí)行Map任務(wù)(例如,分配到一個和包含輸入數(shù)據(jù)的機器在一個switch里的worker機器上執(zhí)行)。當在一個足夠大的cluster集群上運行大型MapReduce操作的時候,大部分的輸入數(shù)據(jù)都能從本地機器讀取,因此消耗非常少的網(wǎng)絡(luò)帶寬。。GoogleMapReduce的基本模型和處理思想大數(shù)據(jù)培訓(xùn)講解存儲位置的計算策略GoogleMapReduce的基本模型15失效處理主節(jié)點失效主節(jié)點中會周期性地設(shè)置檢查點(checkpoint),檢查整個計算作業(yè)的執(zhí)行情況,一旦某個任務(wù)失效,可以從最近有效的檢查點開始重新執(zhí)行,避免從頭開始計算的時間浪費。工作節(jié)點失效工作節(jié)點失效是很普遍發(fā)生的,主節(jié)點會周期性地給工作節(jié)點發(fā)送檢測命令,如果工作節(jié)點沒有回應(yīng),這認為該工作節(jié)點失效,主節(jié)點將終止該工作節(jié)點的任務(wù)并把失效的任務(wù)重新調(diào)度到其它工作節(jié)點上重新執(zhí)行GoogleMapReduce的基本模型和處理思想大數(shù)據(jù)培訓(xùn)講解失效處理GoogleMapReduce的基本模型和處理思想16CounterMapReduce庫使用計數(shù)器統(tǒng)計不同事件發(fā)生次數(shù)。比如,用戶可能想統(tǒng)計已經(jīng)處理了多少個單詞、已經(jīng)索引的多少篇文檔。這些計數(shù)器的值周期性的從各個單獨的worker機器上傳遞給master(附加在ping的應(yīng)答包中傳遞)。master把執(zhí)行成功的Map和Reduce任務(wù)的計數(shù)器值進行累計,當MapReduce操作完成之后,返回給用戶代碼GoogleMapReduce的基本模型和處理思想大數(shù)據(jù)培訓(xùn)講解CounterGoogleMapReduce的基本模型和處17

帶寬優(yōu)化問題

大量的鍵值對數(shù)據(jù)在傳送給Reduce節(jié)點時會引起較大的通信帶寬開銷。解決方案每個Map節(jié)點處理完成的中間鍵值隊將由combiner做一個合并壓縮,即把那些鍵名相同的鍵值對歸并為一個鍵名下的一組數(shù)值。(good,1)(weather,1)(is,1)(good,1)(good,2)(weather,1)(is,1)combinerGoogleMapReduce的基本模型和處理思想大數(shù)據(jù)培訓(xùn)講解帶寬優(yōu)化(good,1)(good,2)combi18

計算優(yōu)化問題Reduce節(jié)點必須要等到所有Map節(jié)點計算計算才能開始執(zhí)行,因此,如果有一個計算量大、或者由于某個問題導(dǎo)致很慢結(jié)束的Map節(jié)點,則會成為嚴重的“拖后腿者”。解決方案把一個Map計算任務(wù)讓多個Map節(jié)點同時做,取最快完成者的計算結(jié)果。根據(jù)Google的測試,使用了這個冗余Map節(jié)點計算方法以后,計算任務(wù)性能提高40%多!GoogleMapReduce的基本模型和處理思想大數(shù)據(jù)培訓(xùn)講解計算優(yōu)化根據(jù)Google的測試,使用了這個冗余Map節(jié)點計算19

用數(shù)據(jù)分區(qū)解決數(shù)據(jù)相關(guān)性問題問題

一個Reduce節(jié)點上的計算數(shù)據(jù)可能會來自多個Map節(jié)點,因此,為了在進入Reduce節(jié)點計算之前,需要把屬于一個Reduce節(jié)點的數(shù)據(jù)歸并到一起。解決方案在Map階段進行了Combining以后,可以根據(jù)一定的策略對Map輸出的中間結(jié)果進行分區(qū)(partitioning),這樣既可解決以上數(shù)據(jù)相關(guān)性問題避免Reduce計算過程中的數(shù)據(jù)通信。例如:有一個巨大的數(shù)組,其最終結(jié)果需要排序,每個Map節(jié)點數(shù)據(jù)處理好后,為了避免在每個Reduce節(jié)點本地排序完成后還需要進行全局排序,我們可以使用一個分區(qū)策略如:(d%R),d為數(shù)據(jù)大小,R為Reduce節(jié)點的個數(shù),則可根據(jù)數(shù)據(jù)的大小將其劃分到指定數(shù)據(jù)范圍的Reduce節(jié)點上,每個Reduce將本地數(shù)據(jù)拍好序后即為最終結(jié)果GoogleMapReduce的基本模型和處理思想大數(shù)據(jù)培訓(xùn)講解用數(shù)據(jù)分區(qū)解決數(shù)據(jù)相關(guān)性問題例如:有一個巨大的數(shù)組,其最終結(jié)20目錄GoogleMapReduce的基本工作原理分布式文件系統(tǒng)GFS的基本工作原理分布式結(jié)構(gòu)化數(shù)據(jù)表BigTable大數(shù)據(jù)培訓(xùn)講解目錄GoogleMapReduce的基本工作原理分布式文件21基本問題海量數(shù)據(jù)怎么存儲?數(shù)據(jù)存儲可靠性怎么解決?當前主流的分布文件系統(tǒng)有:RedHat的GFSIBM的GPFSSun的Lustre等主要用于對硬件設(shè)施要求很高的高性能計算或大型數(shù)據(jù)中心;價格昂貴且缺少完整的數(shù)據(jù)存儲容錯解決方案如Lustre只對元數(shù)據(jù)管理提供容錯處理,但對于具體的分布存儲節(jié)點,可靠性完全依賴于這些分布節(jié)點采用RAID或存儲區(qū)域網(wǎng)(SAN)技術(shù)提供容錯,一旦分布節(jié)點失效,數(shù)據(jù)就無法恢復(fù)。GoogleGFS文件系統(tǒng)大數(shù)據(jù)培訓(xùn)講解基本問題GoogleGFS文件系統(tǒng)大數(shù)據(jù)培訓(xùn)講解22GoogleGFS的基本設(shè)計原則GoogleGFS是一個基于分布式集群的大型分布式文件系統(tǒng),為MapReduce計算框架提供低層數(shù)據(jù)存儲和數(shù)據(jù)可靠性支撐;GFS是一個構(gòu)建在分布節(jié)點本地文件系統(tǒng)之上的一個邏輯上文件系統(tǒng),它將數(shù)據(jù)存儲在物理上分布的每個節(jié)點上,但通過GFS將整個數(shù)據(jù)形成一個邏輯上整體的文件?!璆oogleGFSGoogleMapReduceMapReduceApplicationsGoogleGFS文件系統(tǒng)大數(shù)據(jù)培訓(xùn)講解GoogleGFS的基本設(shè)計原則……GoogleGFSG23GoogleGFS的基本設(shè)計原則廉價本地磁盤分布存儲

各節(jié)點本地分布式存儲數(shù)據(jù),優(yōu)點是不需要采用價格較貴的集中式磁盤陣列,容量可隨節(jié)點數(shù)增加自動增加多數(shù)據(jù)自動備份解決可靠性

采用廉價的普通磁盤,把磁盤數(shù)據(jù)出錯視為常態(tài),用自動多數(shù)據(jù)備份存儲解決數(shù)據(jù)存儲可靠性問題為上層的MapReduce計算框架提供支撐GFS作為向上層MapReduce執(zhí)行框架的底層數(shù)據(jù)存儲支撐,負責處理所有的數(shù)據(jù)自動存儲和容錯處理,因而上層框架不需要考慮低層的數(shù)據(jù)存儲和數(shù)據(jù)容錯問題GoogleGFS文件系統(tǒng)大數(shù)據(jù)培訓(xùn)講解GoogleGFS的基本設(shè)計原則GoogleGFS文件系24GoogleGFS的基本構(gòu)架和工作原理

CitefromGhemawatetal.(SOSP2003)GFSMasterChunkServerGoogleGFS文件系統(tǒng)大數(shù)據(jù)培訓(xùn)講解GoogleGFS的基本構(gòu)架和工作原理Citefrom25GoogleGFS的工作原理GFSMasterMaster上保存了GFS文件系統(tǒng)的三種元數(shù)據(jù)

:命名空間(NameSpace),即整個分布式文件系統(tǒng)的目錄結(jié)構(gòu)

Chunk與文件名的映射表Chunk副本的位置信息,每一個Chunk默認有3個副本GFSMaster前兩種元數(shù)據(jù)可通過操作日志提供容錯處理能力;第3個元數(shù)據(jù)直接保存在ChunkServer上,Master啟動或ChunkServer注冊時自動完成在ChunkServer上元數(shù)據(jù)的生成;因此,當Master失效時,只要ChunkServer數(shù)據(jù)保存完好,可迅速恢復(fù)Master上的元數(shù)據(jù)。GoogleGFS文件系統(tǒng)大數(shù)據(jù)培訓(xùn)講解GoogleGFS的工作原理GFSMaster前兩種元數(shù)26GoogleGFS的工作原理GFSChunkServer即用來保存大量實際數(shù)據(jù)的數(shù)據(jù)服務(wù)器。GFS中每個數(shù)據(jù)塊劃分缺省為64MB每個數(shù)據(jù)塊會分別在3個(缺省情況下)不同的地方復(fù)制副本;對每一個數(shù)據(jù)塊,僅當3個副本都更新成功時,才認為數(shù)據(jù)保存成功。當某個副本失效時,Master會自動將正確的副本數(shù)據(jù)進行復(fù)制以保證足夠的副本數(shù)GFS上存儲的數(shù)據(jù)塊副本,在物理上以一個本地的Linux操作系統(tǒng)的文件形式存儲,每一個數(shù)據(jù)塊再劃分為64KB的子塊,每個子快有一個32位的校驗和,讀數(shù)據(jù)時會檢查校驗和以保證使用為失效的數(shù)據(jù)。ChunkServerGoogleGFS文件系統(tǒng)大數(shù)據(jù)培訓(xùn)講解GoogleGFS的工作原理當某個副本失效時,Master27GoogleGFS的工作原理Chunk位置信息Master服務(wù)器并不保存持久化保存哪個Chunk服務(wù)器存有指定Chunk的副本的信息。Master服務(wù)器只是在啟動的時候輪詢Chunk服務(wù)器以獲取這些信息。Master服務(wù)器能夠保證它持有的信息始終是最新的,因為它控制了所有的Chunk位置的分配,而且通過周期性的心跳信息監(jiān)控Chunk服務(wù)器的狀態(tài)。ChunkServerGoogleGFS文件系統(tǒng)大數(shù)據(jù)培訓(xùn)講解GoogleGFS的工作原理ChunkServerGoog28GoogleGFS的工作原理數(shù)據(jù)訪問工作過程1.在程序運行前,數(shù)據(jù)已經(jīng)存儲在GFS文件系統(tǒng)中;程序?qū)嵭袝r應(yīng)用程序會告訴GFSServer所要訪問的文件名或者數(shù)據(jù)塊索引是什么GoogleGFS文件系統(tǒng)大數(shù)據(jù)培訓(xùn)講解GoogleGFS的工作原理1.在程序運行前,數(shù)據(jù)已經(jīng)存儲29GoogleGFS的工作原理數(shù)據(jù)訪問工作過程2.GFSServer根據(jù)文件名會數(shù)據(jù)塊索引在其文件目錄空間中查找和定位該文件或數(shù)據(jù)塊,并找數(shù)據(jù)塊在具體哪些ChunkServer上;將這些位置信息回送給應(yīng)用程序GoogleGFS文件系統(tǒng)大數(shù)據(jù)培訓(xùn)講解GoogleGFS的工作原理2.GFSServer根據(jù)文30GoogleGFS的工作原理數(shù)據(jù)訪問工作過程3.應(yīng)用程序根據(jù)GFSServer返回的具體Chunk數(shù)據(jù)塊位置信息,直接訪問相應(yīng)的ChunkServerGoogleGFS文件系統(tǒng)大數(shù)據(jù)培訓(xùn)講解GoogleGFS的工作原理3.應(yīng)用程序根據(jù)GFSServ31GoogleGFS的工作原理數(shù)據(jù)訪問工作過程4.應(yīng)用程序根據(jù)GFSServer返回的具體Chunk數(shù)據(jù)塊位置信息直接讀取指定位置的數(shù)據(jù)進行計算處理GoogleGFS文件系統(tǒng)大數(shù)據(jù)培訓(xùn)講解GoogleGFS的工作原理4.應(yīng)用程序根據(jù)GFSServ32GoogleGFS的工作原理數(shù)據(jù)訪問工作過程特點:應(yīng)用程序訪問具體數(shù)據(jù)時部需要經(jīng)過GFSMaster,因此,避免了Master成為訪問瓶頸并發(fā)訪問:由于一個大數(shù)據(jù)會存儲在不同的ChunkServer中,應(yīng)用程序可實現(xiàn)并發(fā)訪問GoogleGFS文件系統(tǒng)大數(shù)據(jù)培訓(xùn)講解GoogleGFS的工作原理特點:應(yīng)用程序訪問具體數(shù)據(jù)時部33GoogleGFS的工作原理GFS租約機制設(shè)計租約機制的目的是為了最小化Master節(jié)點的管理負擔。租約的初始超時設(shè)置為60秒。不過,只要Chunk被修改了,主Chunk就可以申請更長的租期,通常會得到Master節(jié)點的確認并收到租約延長的時間。這些租約延長請求和批準的信息通常都是附加在Master節(jié)點和Chunk服務(wù)器之間的心跳消息中來傳遞。GoogleGFS文件系統(tǒng)大數(shù)據(jù)培訓(xùn)講解GoogleGFS的工作原理GoogleGFS文件系統(tǒng)大34GoogleGFS的工作原理數(shù)據(jù)流為了提高網(wǎng)絡(luò)效率,GFS采取了把數(shù)據(jù)流和控制流分開的措施。在控制流從客戶機到主Chunk、然后再到所有二級副本的同時,數(shù)據(jù)以管道的方式,順序的沿著一個精心選擇的Chunk服務(wù)器鏈推送。我們的目標是充分利用每臺機器的帶寬,避免網(wǎng)絡(luò)瓶頸和高延時的連接,最小化推送所有數(shù)據(jù)的延時。GoogleGFS文件系統(tǒng)大數(shù)據(jù)培訓(xùn)講解GoogleGFS的工作原理GoogleGFS文件系統(tǒng)大35GoogleGFS的工作原理數(shù)據(jù)完整性

GFS把每個Chunk都分成64KB大小的塊。每個塊都對應(yīng)一個32位的Checksum。和其它元數(shù)據(jù)一樣,Checksum與其它的用戶數(shù)據(jù)是分開的,并且保存在內(nèi)存和硬盤上,同時也記錄操作日志。對于讀操作來說,在把數(shù)據(jù)返回給客戶端或者其它的Chunk服務(wù)器之前,Chunk服務(wù)器會校驗讀取操作涉與的范圍內(nèi)的塊的Checksum。因此Chunk服務(wù)器不會把錯誤數(shù)據(jù)傳遞到其它的機器上。如果發(fā)生某個塊的Checksum不正確,Chunk服務(wù)器返回給請求者一個錯誤信息,并且通知Master服務(wù)器這個錯誤。作為回應(yīng),請求者應(yīng)當從其它副本讀取數(shù)據(jù),Master服務(wù)器也會從其它副本克隆數(shù)據(jù)進行恢復(fù)。當一個新的副本就緒后,Master服務(wù)器通知副本錯誤的Chunk服務(wù)器刪掉錯誤的副本。GoogleGFS文件系統(tǒng)大數(shù)據(jù)培訓(xùn)講解GoogleGFS的工作原理GoogleGFS文件系統(tǒng)大36GoogleGFS的工作原理Chunk副本的3種機制創(chuàng)建:當Master節(jié)點創(chuàng)建一個Chunk時,它會選擇在哪里放置初始的空的副本。Master節(jié)點會考慮幾個因素。(1)GFS希望在低于平均硬盤使用率的Chunk服務(wù)器上存儲新的副本。這樣的做法最終能夠平衡Chunk服務(wù)器之間的硬盤使用率。(2)GFS希望限制在每個Chunk服務(wù)器上”最近”的Chunk創(chuàng)建操作的次數(shù)。雖然創(chuàng)建操作本身是廉價的,但是創(chuàng)建操作也意味著隨之會有大量的寫入數(shù)據(jù)的操作,因為Chunk在Writer真正寫入數(shù)據(jù)的時候才被創(chuàng)建,而在我們的”追加一次,讀取多次”的工作模式下,Chunk一旦寫入成功之后就會變?yōu)橹蛔x的了。(3)GFS希望把Chunk的副本分布在多個機架之間。GoogleGFS文件系統(tǒng)大數(shù)據(jù)培訓(xùn)講解GoogleGFS的工作原理GoogleGFS文件系統(tǒng)大37GoogleGFS的工作原理Chunk副本的3種機制重新復(fù)制:當Chunk的有效副本數(shù)量少于用戶指定的復(fù)制因數(shù)的時候,Master節(jié)點會重新復(fù)制它。這可能是由幾個原因引起的:一個Chunk服務(wù)器不可用了,Chunk服務(wù)器報告它所存儲的一個副本損壞了,Chunk服務(wù)器的一個磁盤因為錯誤不可用了,或者Chunk副本的復(fù)制因數(shù)提高了。每個需要被重新復(fù)制的Chunk都會根據(jù)幾個因素進行排序。一個因素是Chunk現(xiàn)有副本數(shù)量和復(fù)制因數(shù)相差多少。例如,丟失兩個副本的Chunk比丟失一個副本的Chunk有更高的優(yōu)先級。另外,GFS優(yōu)先重新復(fù)制活躍(live)文件的Chunk而不是最近剛被刪除的文件的Chunk。最后,為了最小化失效的Chunk對正在運行的應(yīng)用程序的影響,我們提高會阻塞客戶機程序處理流程的Chunk的優(yōu)先級。Master節(jié)點選擇優(yōu)先級最高的Chunk,然后命令某個Chunk服務(wù)器直接從可用的副本”克隆”一個副本出來。選擇新副本的位置的策略和創(chuàng)建時類似:平衡硬盤使用率、限制同一臺Chunk服務(wù)器上的正在進行的克隆操作的數(shù)量、在機架間分布副本。為了防止克隆產(chǎn)生的網(wǎng)絡(luò)流量大大超過客戶機的流量,Master節(jié)點對整個集群和每個Chunk服務(wù)器上的同時進行的克隆操作的數(shù)量都進行了限制。另外,Chunk服務(wù)器通過調(diào)節(jié)它對源Chunk服務(wù)器讀請求的頻率來限制它用于克隆操作的帶寬。GoogleGFS文件系統(tǒng)大數(shù)據(jù)培訓(xùn)講解GoogleGFS的工作原理GoogleGFS文件系統(tǒng)大38GoogleGFS的工作原理Chunk副本的3種機制重新負載均衡:最后,Master服務(wù)器周期性地對副本進行重新負載均衡:它檢查當前的副本分布情況,然后移動副本以便更好的利用硬盤空間、更有效的進行負載均衡。而且在這個過程中,Master服務(wù)器逐漸的填滿一個新的Chunk服務(wù)器,而不是在短時間內(nèi)用新的Chunk填滿它,以至于過載。新副本的存儲位置選擇策略和上面討論的相同。另外,Master節(jié)點必須選擇哪個副本要被移走。通常情況,Master節(jié)點移走那些剩余空間低于平均值的Chunk服務(wù)器上的副本,從而平衡系統(tǒng)整體的硬盤使用率。GoogleGFS文件系統(tǒng)大數(shù)據(jù)培訓(xùn)講解GoogleGFS的工作原理GoogleGFS文件系統(tǒng)大39GoogleGFS的工作原理過期失效的副本檢測當Chunk服務(wù)器失效時,Chunk的副本有可能因錯失了一些修改操作而過期失效。Master節(jié)點保存了每個Chunk的版本號,用來區(qū)分當前的副本和過期副本。無論何時,只要Master節(jié)點和Chunk簽訂一個新的租約,它就增加Chunk的版本號,然后通知最新的副本。Master節(jié)點和這些副本都把新的版本號記錄在它們持久化存儲的狀態(tài)信息中。這個動作發(fā)生在任何客戶機得到通知以前,因此也是對這個Chunk開始寫之前。如果某個副本所在的Chunk服務(wù)器正好處于失效狀態(tài),那么副本的版本號就不會被增加。Master節(jié)點在這個Chunk服務(wù)器重新啟動,并且向Master節(jié)點報告它擁有的Chunk的集合以與相應(yīng)的版本號的時候,就會檢測出它包含過期的Chunk。如果Master節(jié)點看到一個比它記錄的版本號更高的版本號,Master節(jié)點會認為它和Chunk服務(wù)器簽訂租約的操作失敗了,因此會選擇更高的版本號作為當前的版本號。Master節(jié)點在例行的垃圾回收過程中移除所有的過期失效副本。在此之前,Master節(jié)點在回復(fù)客戶機的Chunk信息請求的時候,簡單的認為那些過期的塊根本就不存在。另外一重保障措施是,Master節(jié)點在通知客戶機哪個Chunk服務(wù)器持有租約、或者指示Chunk服務(wù)器從哪個Chunk服務(wù)器進行克隆時,消息中都附帶了Chunk的版本號??蛻魴C或者Chunk服務(wù)器在執(zhí)行操作時都會驗證版本號以確??偸窃L問當前版本的數(shù)據(jù)。GoogleGFS文件系統(tǒng)大數(shù)據(jù)培訓(xùn)講解GoogleGFS的工作原理GoogleGFS文件系統(tǒng)大40GoogleGFS的基本構(gòu)架和工作原理GFS的系統(tǒng)管理技術(shù)大規(guī)模集群安裝技術(shù):如何在一個成千上萬個節(jié)點的集群上迅速部署GFS,升級管理和維護等故障檢測技術(shù):GFS是構(gòu)建在不可靠的廉價計算機之上的文件系統(tǒng),節(jié)點數(shù)多,故障頻繁,如何快速檢測、定位、恢復(fù)或隔離故障節(jié)點節(jié)點動態(tài)加入技術(shù):當新的節(jié)點加入時,需要能自動安裝和部署GFS節(jié)能技術(shù):服務(wù)器的耗電成本大于購買成本,Google為每個節(jié)點服務(wù)器配置了蓄電池替代UPS,大大節(jié)省了能耗。GoogleGFS文件系統(tǒng)大數(shù)據(jù)培訓(xùn)講解GoogleGFS的基本構(gòu)架和工作原理GoogleGFS41目錄GoogleMapReduceGoogle分布式文件系統(tǒng)GFSGoogle分布式結(jié)構(gòu)化數(shù)據(jù)表BigTable大數(shù)據(jù)培訓(xùn)講解目錄GoogleMapReduceGoogle分布式文件系42BigTable的基本作用和設(shè)計思想

GFS是一個文件系統(tǒng),難以提供對結(jié)構(gòu)化數(shù)據(jù)的存儲和訪問管理。為此,Google在GFS之上又設(shè)計了一個結(jié)構(gòu)化數(shù)據(jù)存儲和訪問管理系統(tǒng)—BigTable,為應(yīng)用程序提供比單純的文件系統(tǒng)更方便、更高層的數(shù)據(jù)操作能力Google的很多數(shù)據(jù),包括Web索引、衛(wèi)星圖像數(shù)據(jù)、地圖數(shù)據(jù)等都以結(jié)構(gòu)化形式存放在BigTable中BigTable提供了一定粒度的結(jié)構(gòu)化數(shù)據(jù)操作能力,主要解決一些大型媒體數(shù)據(jù)(Web文檔、圖片等)的結(jié)構(gòu)化存儲問題。但與傳統(tǒng)的關(guān)系數(shù)據(jù)庫相比,其結(jié)構(gòu)化粒度沒有那么高,也沒有事務(wù)處理等能力,因此,它并不是真正意義上的數(shù)據(jù)庫。GoogleBigTable大數(shù)據(jù)培訓(xùn)講解BigTable的基本作用和設(shè)計思想GoogleBigTa43BigTable設(shè)計動機和目標主要動機需要存儲多種數(shù)據(jù) Google提供的服務(wù)很多,序處理的數(shù)據(jù)類型也很多,如URL,網(wǎng)頁,圖片,地圖數(shù)據(jù),email,用戶的個性化設(shè)置等海量的服務(wù)請求Google是目前世界上最繁忙的系統(tǒng),因此,需要有高性能的請求和數(shù)據(jù)處理能力商用數(shù)據(jù)庫無法適用

在如此龐大的分布集群上難以有效部署商用數(shù)據(jù)庫系統(tǒng),且其難以承受如此巨量的數(shù)據(jù)存儲和操作需求GoogleBigTable大數(shù)據(jù)培訓(xùn)講解BigTable設(shè)計動機和目標GoogleBigTable44BigTable設(shè)計動機和目標主要設(shè)計目標廣泛的適用性:為一系列服務(wù)和應(yīng)用而設(shè)計的數(shù)據(jù)存儲系統(tǒng),可滿足對不同類型數(shù)據(jù)的存儲和操作需求很強的可擴展性:根據(jù)需要可隨時自動加入或撤銷服務(wù)器節(jié)點高吞吐量數(shù)據(jù)訪問:提供P級數(shù)據(jù)存儲能力,每秒數(shù)百萬次的訪問請求高可用性和容錯性:保證系統(tǒng)在各種情況下度能正常運轉(zhuǎn),服務(wù)不中斷自動管理能力:自動加入和撤銷服務(wù)器,自動負載平衡簡單性:系統(tǒng)設(shè)計盡量簡單以減少復(fù)雜性和出錯率GoogleBigTable大數(shù)據(jù)培訓(xùn)講解BigTable設(shè)計動機和目標GoogleBigTable45BigTable數(shù)據(jù)模型BigTable主要是一個分布式多維表,表中的數(shù)據(jù)通過:一個行關(guān)鍵字(rowkey)一個列關(guān)鍵字(columnkey)一個時間戳(timestamp)進行索引和查詢定位的。BigTable對存儲在表中的數(shù)據(jù)不做任何解釋,一律視為字符串,具體數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)有用戶自行定義。BigTable查詢模型

(row:string,column:string,time:int64)

結(jié)果數(shù)據(jù)字符串支持查詢、插入和刪除操作GoogleBigTable大數(shù)據(jù)培訓(xùn)講解BigTable數(shù)據(jù)模型GoogleBigTable大數(shù)據(jù)46BigTable數(shù)據(jù)模型BigTable數(shù)據(jù)存儲格式行(Row):大小不超過64KB的任意字符串。表中的數(shù)據(jù)都是根據(jù)行關(guān)鍵字進行排序的。n.www就是一個行關(guān)鍵字,指明一行存儲數(shù)據(jù)。URL地址倒排好處是:1)同一地址的網(wǎng)頁將被存儲在表中連續(xù)的位置,便于查找;2)倒排便于數(shù)據(jù)壓縮,可大幅提高數(shù)據(jù)壓縮率子表(Tablet):一個大表可能太大,不利于存儲管理,將在水平方向上被分為多個子表GoogleBigTable大數(shù)據(jù)培訓(xùn)講解BigTable數(shù)據(jù)模型GoogleBigTable大數(shù)據(jù)47BigTable數(shù)據(jù)模型BigTable數(shù)據(jù)存儲格式列(Column):BigTable將列關(guān)鍵字組織成為“列族”(columnfamily),每個族中的數(shù)據(jù)屬于同一類別,如anchor時一個列族,其下可有不同的表示一個個超鏈的列關(guān)鍵字。一個列族下的數(shù)據(jù)會被壓縮在一起存放。因此,一個列關(guān)鍵字可表示為:

族名:列名(family:qualifier)content、anchor都是族名;而和my.look.ca則是anchor族中的列名。GoogleBigTable大數(shù)據(jù)培訓(xùn)講解BigTable數(shù)據(jù)模型GoogleBigTable大數(shù)據(jù)48BigTable數(shù)據(jù)模型BigTable數(shù)據(jù)存儲格式時間戳(timestamp):很多時候同一個URL的網(wǎng)頁會不斷更新,而Google需要保存不同時間的網(wǎng)頁數(shù)據(jù),因此需要使用時間戳來加以區(qū)分。為了簡化不同版本的數(shù)據(jù)管理,BigTable提供給了兩種設(shè)置:保留最近的n個版本數(shù)據(jù)保留限定時間內(nèi)的所有不同版本數(shù)據(jù)GoogleBigTable大數(shù)據(jù)培訓(xùn)講解BigTable數(shù)據(jù)模型GoogleBigTable大數(shù)據(jù)49BigTable基本構(gòu)架BigTable主服務(wù)器BigTable客戶端BigTable客戶端程序庫BigTable子表服務(wù)器BigTable子表服務(wù)器BigTable子表服務(wù)器BigTable子表服務(wù)器……執(zhí)行元數(shù)據(jù)操作和負載平衡數(shù)據(jù)存儲和訪問操作數(shù)據(jù)存儲和訪問操作數(shù)據(jù)存儲和訪問操作數(shù)據(jù)存儲和訪問操作GFSChubby服務(wù)器(分布式鎖服務(wù))GoogleWorkQueue負責故障監(jiān)控和處理子表數(shù)據(jù)的存儲與日志元數(shù)據(jù)存儲與主服務(wù)器選擇GoogleBigTable大數(shù)據(jù)培訓(xùn)講解BigTable基本構(gòu)架BigTableBigTable客戶50BigTable基本構(gòu)架主服務(wù)器新子表分配:當一個新子表產(chǎn)

生時,主服務(wù)器通過加載命令

將其分配給一個空間足夠大的

子表服務(wù);創(chuàng)建新表、表合并

與較大子表的分裂都會產(chǎn)生新

的子表。子表監(jiān)控:通過Chubby完成。所有子表服務(wù)器基本信息被保存在Chubby中的服務(wù)器目錄中主服務(wù)器檢測這個目錄可獲取最新子表服務(wù)器的狀態(tài)信息。當子表服務(wù)器出現(xiàn)故障,主服務(wù)器將終止該子表服務(wù)器,并將其上的全部子表數(shù)據(jù)移動到其它子表服務(wù)器。負債均衡:當主服務(wù)器發(fā)現(xiàn)某個子表服務(wù)器負載過重時,將對自動對其進行負載均衡操作。GoogleBigTable大數(shù)據(jù)培訓(xùn)講解BigTable基本構(gòu)架GoogleBigTable大數(shù)據(jù)51BigTable基本構(gòu)架子表服務(wù)器BigTable中的數(shù)據(jù)都以子表形式保存在子表服務(wù)器上,客戶端程序也直接和子表服務(wù)器通信。分配:當一個新子表產(chǎn)子表服務(wù)器的主要問題包括子表的定位、分配、與子表數(shù)據(jù)的最終存儲。子表的基本存儲結(jié)構(gòu)SSTable

SSTable是BigTable內(nèi)部的基本存儲結(jié)構(gòu),以GFS文件形式存儲在GFS文件系統(tǒng)中。一個SSTable實際上對應(yīng)于GFS中的一個64MB的數(shù)據(jù)塊(Chunk)SSTable中的數(shù)據(jù)進一步劃分為64KB的子塊,因此一個SSTable可以有多達1千個這樣的子塊。為了維護這些子塊的位置信息,需要使用一個Index索引。Index64Kblock64Kblock64KblockSSTableGoogleBigTable大數(shù)據(jù)培訓(xùn)講解BigTable基本構(gòu)架Index64Kblock64K52BigTable基本構(gòu)架子表服務(wù)器子表數(shù)據(jù)格式

概念上子表是整個大表的多行數(shù)據(jù)劃分后構(gòu)成。而一個子表服務(wù)器上的子表將進一步由很多個SSTAble構(gòu)成,每個SSTable構(gòu)成最終的在底層GFS中的存儲單位。Index64Kblock64Kblock64KblockSSTableIndex64Kblock64Kblock64KblockSSTableTabletStart:aardvarkEnd:appleGoogleBigTable大數(shù)據(jù)培訓(xùn)講解BigTable基本構(gòu)架Index64Kblock64K53BigTable基本構(gòu)架子表服務(wù)器子表數(shù)據(jù)格式

一個SSTable還可以為不同的子表所共享,以避免同樣數(shù)據(jù)的重復(fù)存儲。

SSTableSSTableSSTableSSTableTabletaardvarkappleTabletapple_two_EboatGoogleBigTable大數(shù)據(jù)培訓(xùn)講解BigTable基本構(gòu)架SSTableSSTableSSTa54BigTable基本構(gòu)架子表服務(wù)器子表尋址子表地址以3級B+樹形式進行索引;首先從Chubby

服務(wù)器中取得根子表,由根子表找到二級索引

指標,最后獲取最終的SSTable的位置

GoogleBigTable大數(shù)據(jù)培訓(xùn)講解BigTable基本構(gòu)架GoogleBigTable大數(shù)據(jù)55BigTable基本構(gòu)架子表服務(wù)器MinorCompaction隨著寫操作的執(zhí)行,memtable的大小不斷增加。當memtable的尺寸到達一個門限值的時候,這個memtable就會被凍結(jié),然后創(chuàng)建一個新的memtable;被凍結(jié)住memtable會被轉(zhuǎn)換成SSTable,然后寫入GFS。GoogleBigTable大數(shù)據(jù)培訓(xùn)講解BigTable基本構(gòu)架GoogleBigTable大數(shù)據(jù)56BigTable基本構(gòu)架子表服務(wù)器MergingCompaction每一次MinorCompaction都會創(chuàng)建一個新的SSTable。通過定期在后臺執(zhí)行MergingCompaction過程合并文件,限制這類文件的數(shù)量。MergingCompaction過程讀取一些SSTable和memtable的內(nèi)容,合并成一個新的SSTable。MajorCompaction

MajorCompaction過程生成的SSTable不包含已經(jīng)刪除的信息或數(shù)據(jù)。Bigtable循環(huán)掃描它所有的Tablet,并且定期對它們執(zhí)行MajorCompaction。MajorCompaction機制允許Bigtable回收已經(jīng)刪除的數(shù)據(jù)占有的資源,并且確保BigTable能與時清除已經(jīng)刪除的數(shù)據(jù)。GoogleBigTable大數(shù)據(jù)培訓(xùn)講解BigTable基本構(gòu)架GoogleBigTable大數(shù)據(jù)57BigTable基本構(gòu)架優(yōu)化壓縮每個SSTable的塊(塊的大小由局部性群組的優(yōu)化參數(shù)定)都使用用戶指定的壓縮格式來壓縮。雖然分塊壓縮浪費了少量空間(相比于對整個SSTable進行壓縮,分塊壓縮壓縮率較低),但是,在只讀取SSTable的一小部分數(shù)據(jù)的時候就不必解壓整個文件了。使用了“兩遍”的、可定制的壓縮方式。第一遍采用BentleyandMcIlroy’s方式,這種方式在一個很大的掃描窗口里對常見的長字符串進行壓縮;第二遍是采用快速壓縮算法,即在一個16KB的小掃描窗口中尋找重復(fù)數(shù)據(jù)。兩個壓縮的算法都很快,在現(xiàn)在的機器上,壓縮的速率達到100-200MB/s,解壓的速率達到400-1000MB/s。GoogleBigTable大數(shù)據(jù)培訓(xùn)講解BigTable基本構(gòu)架GoogleBigTable大數(shù)據(jù)58BigTable基本構(gòu)架優(yōu)化Bloomfilter一個讀操作必須讀取構(gòu)成Tablet狀態(tài)的所有SSTable的數(shù)據(jù)。如果這些SSTable不在內(nèi)存中,那么就需要多次訪問硬盤。我們通過允許客戶程序?qū)μ囟ň植啃匀航M的SSTable指定Bloom過濾器,來減少硬盤訪問的次數(shù)。我們可以使用Bloom過濾器查詢一個SSTable是否包含了特定行和列的數(shù)據(jù)。對于某些特定應(yīng)用程序,我們只付出了少量的、用于存儲Bloom過濾器的內(nèi)存的代價,就換來了讀操作顯著減少的磁盤訪問的次數(shù)。使用Bloom過濾器也隱式的達到了當應(yīng)用程序訪問不存在的行或列時,大多數(shù)時候我們都不需要訪問硬盤的目的。GoogleBigTable大數(shù)據(jù)培訓(xùn)講解BigTable基本構(gòu)架GoogleBigTable大數(shù)據(jù)59BigTable基本構(gòu)架Bloomfilter原理如需要判斷一個元素是不是在一個集合中,我們通常做法是把所有元素保存下來,然后通過比較知道它是不是在集合內(nèi),鏈表、樹都是基于這種思路,當集合內(nèi)元素個數(shù)的變大,我們需要的空間和時間都線性變大,檢索速度也越來越慢。Bloomfilter采用的是哈希函數(shù)的方法,將一個元素映射到一個m長度的陣列上的一個點,當這個點是1時,那么這個元素在集合內(nèi),反之則不在集合內(nèi)。這個方法的缺點就是當檢測的元素很多的時候可能有沖突,解決方法就是使用k個哈希函數(shù)對應(yīng)k個點,如果所有點都是1的話,那么元素在集合內(nèi),如果有0的話,元素則不在集合內(nèi)。初始狀態(tài)時,BloomFilter是一個包含m位的位數(shù)組,每一位都置為0。GoogleBigTable大數(shù)據(jù)培訓(xùn)講解BigTable基本構(gòu)架初始狀態(tài)時,BloomFilter60BigTable基本構(gòu)架Bloomfilter為了表達S={x1,x2,…,xn}這樣一個n個元素的集合,BloomFilter使用k個相互獨立的哈希函數(shù)(HashFunction),它們分別將集合中的每個元素映射到{1,…,m}的范圍中。對任意一個元素x,第i個哈希函數(shù)映射的位置hi(x)就會被置為1(1≤i≤k)。注意,如果一個位置多次被置為1,那么只有第一次會起作用,后面幾次將沒有任何效果。在下圖中,k=3,且有兩個哈希函數(shù)選中同一個位置(從左邊數(shù)第五位)。在判斷y是否屬于這個集合時,我們對y應(yīng)用k次哈希函數(shù),如果所有hi(y)的位置都是1(1≤i≤k),那么我們就認為y是集合中的元素,否則就認為y不是集合中的元素。下圖中y1就不是集合中的元素。y2或者屬于這個集合,或者剛好是一個falsepositive。GoogleBigTable大數(shù)據(jù)培訓(xùn)講解BigTable基本構(gòu)架在判斷y是否屬于這個集合時,我們對y61目錄大數(shù)據(jù)起源Hadoop1.0Hadoop2.0商用環(huán)境大數(shù)據(jù)培訓(xùn)講解目錄大數(shù)據(jù)起源Hadoop1.0Hadoop2.0商用環(huán)境大62hadoopHadoop是一個開源的軟件框架,它支持數(shù)據(jù)密集型的分布式應(yīng)用,許可授權(quán)隸屬于Apachev2license.可以在成千上萬臺獨立的計算機上運行。Hadoop源自于Google的MapReduce和GoogleFileSystem(GFS)兩篇論文?,F(xiàn)在通常認為完整的ApacheHadoop‘平臺’由Hadoop內(nèi)核、MapReduce和HDFS組成,以與若干相關(guān)的項目——包括ApacheHive、ApacheHbase等等Hadoop介紹

大數(shù)據(jù)培訓(xùn)講解hadoopHadoop是一個開源的軟件框架,它支持數(shù)據(jù)密集63HDFS基本構(gòu)架對等于GFS

Master對等于GFS

ChunkServer應(yīng)用程序HDFS客戶端文件名或數(shù)據(jù)塊號數(shù)據(jù)塊號,數(shù)據(jù)塊位置HDFSNameNodeDataNode數(shù)據(jù)DataNode數(shù)據(jù)DataNode數(shù)據(jù)Hadoop的分布式文件系統(tǒng)HDFS大數(shù)據(jù)培訓(xùn)講解HDFS基本構(gòu)架對等于GFSMaster對等于GFSCh64HadoopMapReduce基本構(gòu)架與工作過程2.HadoopMapReduce的基本工作原理對等于GoogleMapReduce中的Master對等于GoogleMapReduce中的Worker大數(shù)據(jù)培訓(xùn)講解HadoopMapReduce基本構(gòu)架與工作過程2.Ha65datanodedaemonLinuxfilesystem…tasktrackerslavenodedatanodedaemonLinuxfilesystem…tasktrackerslavenodedatanodedaemonLinuxfilesystem…tasktrackerslavenodenamenodenamenodedaemonjobsubmissionnodejobtrackerHadoop介紹

HadoopMapReduce和HDFS數(shù)據(jù)存儲與計算節(jié)點構(gòu)架大數(shù)據(jù)培訓(xùn)講解datanodedaemonLinuxfilesyst66Hadoop1.0X86PC集群本機硬盤本機硬盤本機硬盤本機硬盤本機硬盤本機硬盤數(shù)據(jù)節(jié)點Datanode數(shù)據(jù)節(jié)點Datanode數(shù)據(jù)節(jié)點Datanode數(shù)據(jù)節(jié)點Datanode數(shù)據(jù)節(jié)點Datanode管理節(jié)點Datanode備份管理節(jié)點Datanode萬兆交換萬兆交換數(shù)據(jù)查詢(Hbase)運算與處理(Map-Reduce)數(shù)據(jù)提?。℉IVE)ETLOozieTaskTracker(MapTask)TaskTracker(MapTask)中間結(jié)果中間結(jié)果TaskTracker(ReduceTask)JobTracker任務(wù)調(diào)度任務(wù)調(diào)度狀態(tài)監(jiān)控狀態(tài)監(jiān)控任務(wù)管理調(diào)度管理Hadoop處理層-設(shè)備與拓撲處理層-軟件技術(shù)架構(gòu)SQL-Script列式存儲Hive架構(gòu)轉(zhuǎn)化為Map-Reduce程序列式索引大數(shù)據(jù)培訓(xùn)講解Hadoop1.0X86PC集群本機硬盤本機硬盤本機硬盤67Hadoop1.0架構(gòu)下的混搭處理中心X86PC集群本機硬盤本機硬盤本機硬盤本機硬盤本機硬盤本機硬盤數(shù)據(jù)節(jié)點Datanode數(shù)據(jù)節(jié)點Datanode數(shù)據(jù)節(jié)點Datanode數(shù)據(jù)節(jié)點Datanode數(shù)據(jù)節(jié)點Datanode管理節(jié)點Namenode備份管理節(jié)點Namenode萬兆交換萬兆交換數(shù)據(jù)查詢(Hbase)運算與處理(Map-Reduce)數(shù)據(jù)提?。℉IVE)ETL數(shù)據(jù)存儲:磁盤陣列數(shù)據(jù)計算:

數(shù)據(jù)服務(wù)器HadoopRDB&內(nèi)存庫RDB內(nèi)存數(shù)據(jù)庫處理層-設(shè)備與拓撲處理層-軟件技術(shù)架構(gòu)。主ID,億級查詢,毫秒級。次級索引查詢,秒級。外部提供noSql查詢方式。使用CoprocessorMR程序,滿足臨時性分析。。億級數(shù)據(jù),支持秒級查詢。支持SQL方式提取數(shù)據(jù)。支持數(shù)據(jù)匯總,數(shù)據(jù)提取的快速開發(fā)。通過MR開發(fā),滿足絕大部分數(shù)據(jù)處理需求。支持十億級,百億級的數(shù)據(jù)分析與開發(fā)。結(jié)合Mahout,滿足對大數(shù)據(jù)的分析需求。通過結(jié)合文本處理技術(shù),滿足非結(jié)構(gòu)化文本數(shù)據(jù)需求。OLTP與數(shù)據(jù)量較小的OLAP管理節(jié)點備份保證安全數(shù)據(jù)冗余參數(shù)設(shè)置,保障基礎(chǔ)數(shù)據(jù)安全實時數(shù)據(jù)查詢(Impala)。Jdbc/ODBC列式存儲HRegion-Server混搭架構(gòu)解決各類數(shù)據(jù)訪問需求基礎(chǔ)存儲(HDFS)滿足萬分之一秒訪問并行查詢調(diào)度查詢優(yōu)化器本機硬盤本機硬盤MPP萬兆交換ODSLinux:FSDW&DMDB-File。Jdbc/ODBC。支持SQL方式提取數(shù)據(jù)。支持關(guān)聯(lián)性查詢。對內(nèi)存有效利用。對網(wǎng)絡(luò)帶寬有依賴大數(shù)據(jù)培訓(xùn)講解Hadoop1.0架構(gòu)下的混搭處理中心X86PC集群本機68Hbase&HiveHBase原理復(fù)雜查詢和二級索引HBase與Hive集成大數(shù)據(jù)培訓(xùn)講解Hbase&HiveHBase原理復(fù)雜查詢和二級索引HB69HBase簡介HBase是分布式的、面向列的開源數(shù)據(jù)庫HBase是GoogleBigtable的開源實現(xiàn)底層基于Hadoop,HDFS為HBase提供高可靠性的底層存儲支持,MapReduce為HBase提供高性能的計算能力Zookeeper為HBase提供了穩(wěn)定服務(wù)和failover機制大數(shù)據(jù)培訓(xùn)講解HBase簡介HBase是分布式的、面向列的開源數(shù)據(jù)庫大數(shù)據(jù)70HBase簡介HBase中有兩張?zhí)厥獾腡able,-ROOT-和.META..META.:記錄了用戶表的Region信息,.META.可以有多個regoin-ROOT-:記錄了.META.表的Region信息,-ROOT-只有一個region?Zookeeper中記錄了-ROOT-表的locationClient訪問用戶數(shù)據(jù)之前需要首先訪問zookeeper,然后訪問-ROOT-表,接著訪問.META.表,最后才能找到用戶數(shù)據(jù)的位置去訪問,中間需要多次網(wǎng)絡(luò)操作,不過client端會做cache緩存。ZookeeperQuorum中除了存儲了-ROOT-表的地址和HMaster的地址,HRegionServer也會把自己以Ephemeral方式注冊到Zookeeper中,使得HMaster可以隨時感知到各個HRegionServer的健康狀態(tài)。HMaster沒有單點問題,HBase中可以啟動多個HMaster,通過Zookeeper的MasterElection機制保證總有一個Master運行當HRegionServer意外終止后,HMaster會通過Zookeeper感知到大數(shù)據(jù)培訓(xùn)講解HBase簡介HBase中有兩張?zhí)厥獾腡able,-ROOT71HBase數(shù)據(jù)模型RowKeycontentsanchorCMy.look.caTimestampvalueTimestampvalueTimestampvalueCn.wwwt3<html>…t8CNNt9CNN.comt5<html>…t6<html>…RowKey:table主鍵,HBase中記錄按照RowKey排序Timestamp:時間戳,HBase可以保存多版本的數(shù)據(jù)ColumnFamily,列簇,HBase中的集中存儲單元ColumnQualifier,與ColumnFamily一起標記某一列大數(shù)據(jù)培訓(xùn)講解HBase數(shù)據(jù)模型RowKeycontentsanchor72HFile結(jié)構(gòu)名稱字節(jié)數(shù)說明keyLength4表示Key所占的總字節(jié)數(shù)valueLength4表示Value所占的總字節(jié)數(shù)rowLength2表示rowKey所占的字節(jié)數(shù)rowrowLength數(shù)據(jù)的rowKeycolumnFamilyLength1表示列族名稱所占的字節(jié)數(shù)columnFamilycolumnFamilyLength列族名稱columnQualifier

列名與columnFamily一起標記唯一列timestamp8時間戳type1Key類型,比如是新增(Put),還是刪除(Delete)valuevalueLength列值KeyValue結(jié)構(gòu)說明Hfile結(jié)構(gòu):KeyValue結(jié)構(gòu):大數(shù)據(jù)培訓(xùn)講解HFile結(jié)構(gòu)名稱字節(jié)數(shù)說明keyLength73列存儲RowKey基本信息成績名字性別語文數(shù)學(xué)TimestampvalueTimestampvalueTimestampvalueTimestampvalue小明keyt1小明t2男t580t990t483t893t385t795文件1文件21724小明key4成績語文t5180大數(shù)據(jù)培訓(xùn)講解列存儲RowKey基本信息成績名字性別語文數(shù)學(xué)Timest74HBase系統(tǒng)架構(gòu)Client通過zookeeper與master通信進行管理類操作client與regionserver通信進行數(shù)據(jù)讀寫操作存儲-ROOT-表地址存儲HMaster的地址協(xié)調(diào)多個HMaster防止單點問題管理用戶對表的操作調(diào)整Region分布,負載均衡管理Regionsplit后的region重分布RegionServer宕機后region的遷移工作響應(yīng)用戶的I/O請求,向HDFS中讀寫文件大數(shù)據(jù)培訓(xùn)講解HBase系統(tǒng)架構(gòu)Client通過zookeeper與mas75HBase數(shù)據(jù)訪問流程clientzookeeper關(guān)鍵文件:/hbase/hbaseid集群ID,跟存儲在HDFS上的hbase.id文件中的一致/hbase/master服務(wù)器名稱/hbase/root-region-server持有-ROOT-表regions的regionserver的服務(wù)器名稱-ROOT-表記錄.META.的Region信息,該region永遠不split,只會有一個Region。表數(shù)據(jù)結(jié)構(gòu):rowkey:

存儲.META.的region的名稱columnFamily:共一個,為“info”columnQualifier共三個包含:regioninfo:保存region的信息,包括name、startkey、 endkey等信息server:該region所在RegionServerserverstartcord:region所在RegionServer啟動時間RowKeyinforegioninfoserverserverstartcord.META.,,1NAME=>'.META.,,1',STARTKEY=>'',ENDKEY=>'',ENCODED=>1028785192,}cloud204:600201371430827702UserTable,100,1371430844857.de0b50NAME=>UserTable,100,1371430844857.de0b50',STARTKEY=>‘100',ENDKEY=>‘200',ENCODED=>de0b50,}cloud199:600201371430844857.META.表記錄用戶表的Region信息:表數(shù)據(jù)結(jié)構(gòu)與-ROOT-相似:rowkey:

存儲用戶表的region的名稱columnFamily:共一個,為“info”columnQualifier共三個包含:regioninfo:保存region的信息,包括name、startkey、 endkey等信息server:該region所在RegionServerserverstartcord:region所在RegionServer啟動時間大數(shù)據(jù)培訓(xùn)講解HBase數(shù)據(jù)訪問流程clientzookeeper關(guān)鍵文件76HRegionServer結(jié)構(gòu)每個HRegion對應(yīng)Table中的Region,由多個HStore組成HBase中的集中的存儲單元,對應(yīng)Table中的ColumnFamily,由MemStore和StoreFile組成HRegionServer:包含多個HRegion大數(shù)據(jù)培訓(xùn)講解HRegionServer結(jié)構(gòu)每個HRegion對應(yīng)Tabl77HRegionServer結(jié)構(gòu)大數(shù)據(jù)培訓(xùn)講解HRegionServer結(jié)構(gòu)大數(shù)據(jù)培訓(xùn)講解78Region合并和分割HStore存儲是HBase存儲的核心了,其中由兩部分組成,一部分是MemStore,一部分是StoreFiles。1.MemStore是SortedMemoryBuffer,用戶寫入的數(shù)據(jù)首先會放入MemStore,當MemStore滿了以后會Flush成一個StoreFile(底層實現(xiàn)是HFile).2.當StoreFile文件數(shù)量增長到一定閾值,會觸發(fā)Compact合并操作,將多個StoreFiles合并成一個StoreFile,合并過程中會進行版本合并和數(shù)據(jù)刪除,因此可以看出HBase其實只有增加數(shù)據(jù),所有的更新和刪除操作都是在后續(xù)的compact過程中進行的,這使得用戶的寫操作只要進入內(nèi)存中就可以立即返回,保證了HBaseI/O的高性能。3.當StoreFilesCompact后,會逐步形成越來越大的StoreFile,當單個StoreFile大小超過一定閾值后,會觸發(fā)Split操作,同時把當前RegionSplit成2個Region,父Region會下線,新Split出的2個孩子Region會被HMaster分配到相應(yīng)的HRegionServer上,使得原先1個Region的壓力得以分流到2個Region上。大數(shù)據(jù)培訓(xùn)講解Region合并和分割HStore存儲是HBase存儲的核心79HStore中數(shù)據(jù)寫入流程PUTFlushCompactSplitClient端PUT數(shù)據(jù)數(shù)據(jù)寫入MemStore中MemStore寫滿后執(zhí)行flush數(shù)據(jù)被flush為StoreFileStoreFile數(shù)量增長到閥值,觸發(fā)Compact操作多個StoreFile合并成一個StoreFile版本合并,數(shù)據(jù)刪除Region大小達到閥值,執(zhí)行Split操作一個Region會Split成成兩個Master上線新的兩個Region舊的Region下線大數(shù)據(jù)培訓(xùn)講解HStore中數(shù)據(jù)寫入流程PUTFlushCompactSp80HBaseCoprocessorHBaseCoprocessor實現(xiàn)目的:HBase0.92版本新增加特性,為了解決如下問題HBase無法輕易建立“二級索引”執(zhí)行求和、計數(shù)、排序等操作比較困難,必須通過mapreduce實現(xiàn),對于簡單的統(tǒng)計或聚合計算時,可能會因為網(wǎng)絡(luò)開銷大而帶來性能問題靈感來源:靈感來源于bigtable的協(xié)處理器,包含如下特性每個表服務(wù)器的任意子表都可以運行代碼客戶端能夠直接訪問數(shù)據(jù)表的行,多行讀寫會自動分片成多個并行的RPC調(diào)用提供接口:RegionObserver:提供客戶端的數(shù)據(jù)操縱事件鉤子:Get、Put、Delete、Scan等WALObserver:提供WAL相關(guān)操作鉤子MasterObserver:提供DDL-類型的操作鉤子。如創(chuàng)建、刪除、修改數(shù)據(jù)表等Endpoint:終端是動態(tài)RPC插件的接口,它的實現(xiàn)代碼被安裝在服務(wù)器端,能夠通過HBaseRPC調(diào)用喚醒應(yīng)用范圍:通過使用RegionObserver接口可以實現(xiàn)二級索引的創(chuàng)建和維護通過使用Endpoint接口,在對數(shù)據(jù)進行簡單排序和sum,count等統(tǒng)計操作時,能夠極大提高性能大數(shù)據(jù)培訓(xùn)講解HBaseCoprocessorHBase實現(xiàn)目的81RegionObserver工作原理RegionObserver提供客戶端的數(shù)據(jù)操縱事件鉤子,Get、Put、Delete、Scan,使用此功能能夠解決主表以與多個索引表之間數(shù)據(jù)一致性的問題大數(shù)據(jù)培訓(xùn)講解RegionObserver工作原理RegionObserv82CoprocessorEndpoint2.客戶端通過調(diào)用count方法查詢,等待查詢結(jié)果1.操作region上數(shù)據(jù)的代碼,需要先安裝到服務(wù)器端,客戶端通過接口調(diào)用3.HBase通過RPC喚醒安裝在服務(wù)器端的實現(xiàn)代碼(CountProtocol),等待執(zhí)行結(jié)果返回,然后通過callback回調(diào)匯聚函數(shù)4.匯聚每個region上的返回數(shù)據(jù),更新最終結(jié)果5.返回最終查詢結(jié)果大數(shù)據(jù)培訓(xùn)講解CoprocessorEndpoint2.客戶端通過調(diào)用c83目錄HBase原理復(fù)雜查詢和二級索引HBase與Hive集成大數(shù)據(jù)培訓(xùn)講解目錄HBase原理復(fù)雜查詢和二級索引HBase與Hive集成84HBase二級索引HBase二級索引HBase索引需求:HBase只支持針對與主鍵key的高性能查詢HBase本身不支持快速的復(fù)雜查詢和join索引的實現(xiàn)目標:高性能的數(shù)據(jù)檢索數(shù)據(jù)的低冗余數(shù)據(jù)的一致性索引的實現(xiàn)方式:基于表的索引,多個索引時每個索引建一個表或者建組合索引基于列的索引,所有索引存單張表,每個索引字段為一個列簇第三方工具框架:ITHbase,HBase索引的事務(wù)行解決方案,0.92版本以后的HBase已經(jīng)可以通過Coprocessor實現(xiàn)其功能Lily,基于HBase和SOLR實現(xiàn),能夠提供快速的檢索和模糊查詢大數(shù)據(jù)培訓(xùn)講解HBase二級索引HBaseHBase索引需求:索引85表索引實現(xiàn)原理發(fā)揮HBase基于主鍵查詢效率高的特點,添加索引表,把基于索引字段的查詢轉(zhuǎn)換為基于HBase主鍵的查詢業(yè)務(wù)表key101101…………key102102…………key103103…………

基于column1字段的查詢先查Index表Index表101key101102key102103key103rowkeycolumn1column2……大數(shù)據(jù)培訓(xùn)講解表索引實現(xiàn)原理發(fā)揮HBase基于主鍵查詢效率高的特點,添加索86表索引的使用和維護索引表的維護索引表的使用

CoprocessorUserTableIndexTablePut/DeletepostPut/postDelete

溫馨提示

  • 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

提交評論