2024谷歌Bigtable中文系統(tǒng)_第1頁
2024谷歌Bigtable中文系統(tǒng)_第2頁
2024谷歌Bigtable中文系統(tǒng)_第3頁
2024谷歌Bigtable中文系統(tǒng)_第4頁
2024谷歌Bigtable中文系統(tǒng)_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

GoogleBigtable中文版目錄TOC\o"1-3"\h\u261971 1175822 127988 212833 2130563.1 330973.2 3207523.3 4258814 4177045BigTable 5168106 7252186.1 7142226.2 8249946.3 10143226.4 1117377 11303637.1 11238287.2 12263837.3 12131498 15267278.1 16126348.2 17154849 17201179.1 1834529.2Google 185529.3 19747010 203108411 212136712 22GoogleGoogleBigtable1.0GoogleBigtable務器上的PB級的數(shù)據(jù)。Google的很多項目使用Bigtable存儲數(shù)據(jù),包括Web索引、GoogleEarth、GoogleFinance。這些應用對Bigtable提出的要求差異非常大,無論是在數(shù)據(jù)量上(URL到網(wǎng)頁到衛(wèi)星圖像)還是在響應速度上(從后本論文描述了Bigtable我們還將描述Bigtable的設計和實現(xiàn)。Google,我們Bigtable。Bigtable的設計目的是可靠的處理PB級別的數(shù)據(jù),并且能夠部署到上千臺機器上。BigtableBigtable60個GoogleGoogleAnalytics、GoogleFinance、Orkut、PersonalizedSearch、WritelyGoogleEarth。這些產(chǎn)品對Bigtable提出了迥異的需求,有的需要高吞Bigtable集群的配置也有很大的差異,有的集群只有幾臺服務器,而有的則需要上千臺服務器、存儲幾百TB的數(shù)據(jù)。在很多方面,Bigtable和數(shù)據(jù)庫很類似:它使用了很多數(shù)據(jù)庫的實現(xiàn)策略。并行數(shù)據(jù)庫【14】和內存數(shù)據(jù)庫【13】已經(jīng)具備可擴展性和高性能,但是Bigtable提供了一個和這些系統(tǒng)完全不同的接口。Bigtable不支3節(jié)描述關于數(shù)據(jù)模型更多細節(jié)方面的東西;4節(jié)概要介紹了客戶端API;5節(jié)簡要介紹了BigTable底層使用的Google的基礎框架;6節(jié)描述了BigTable實現(xiàn)的關鍵部分;7BigTable的性能采用的一些精細的調優(yōu)方法;8節(jié)提供了BigTable的性能數(shù)據(jù);9節(jié)講述了幾個Google內部使用BigTable以及時間戳;Mapvalue都是一個未經(jīng)解析的Bigtable的系統(tǒng)的種種潛在用途之后,決定使用這個數(shù)據(jù)模型。我們先舉個WebtableWebtableURL作為行關鍵1WebURL。contents列族存放的是網(wǎng)頁的內容,anchor列族存放引用該網(wǎng)頁的錨鏈接文本7。CNN的主頁被SportsIllustrator和MY-look的主頁引用,因此該行包含了名為“anchor:”和t6標識。表中的行關鍵字可以是任意的字符串(64KB的字符串,但是對大多數(shù)用戶,10-100個字BgabeabeabetebabeURLap.goge.condex.hlo.googe.apndex.hl訪問控制、磁盤和內存的使用統(tǒng)計都是在列族層面進行的。在我們的Webtable的例子中,上述的控制權Bigtable中,表的每一個數(shù)據(jù)項都可以包含同一份數(shù)據(jù)的不同版本;不同版本的數(shù)據(jù)通過時間戳來索n個版本的數(shù)據(jù),或者只保存“足夠新”的版本的數(shù)據(jù)(7天的內容寫入的數(shù)據(jù)。Webtable的舉例里,contents:列存儲的時間戳信息是網(wǎng)絡爬蟲抓取一個頁面的時間。上面提及的垃圾BigtableAPI函數(shù)。Bigtable////OpentheTable*T=//WriteanewanchoranddeleteanoldanchorRowMutationr1(T,“n.www”);r1.Set(“anchor:\h”,“CNN”);\hOperationApply(&op,2WritingtoBigtableBigtable中的值、從每個行中查找值、或者遍\hScannerScannerScanStreamstream=scanner.FetchColumnFamily(“anchor”);for(;!stream->Done();stream->Next()){printf(“%s%s%lld%s\n”,3Readingfrom3中的C++代碼使用Scanner抽象對象遍歷一個行內的所有錨點??蛻舫绦蚩梢员闅v多個列族,有幾正則表達式*.10天的錨點。Bigtable還支持一些其它的特性,利用這些特性,用戶可以對數(shù)據(jù)進行更復雜的處理。首先,Bigtable支雖然Bigtable提供了一個允許用戶跨行批量寫入數(shù)據(jù)的接口,但是,Bigtable目前還不支持通用的跨行事務處理。其次,Bigtable允許把數(shù)據(jù)項用做整數(shù)計數(shù)器。最后,Bigtable允許用戶在服務器的地址空間內執(zhí)行腳本GoogleSawzall【28SawzallAPIBigtable,但是它允許多種形式的數(shù)據(jù)轉換、基于任意表達式的數(shù)據(jù)BigtableMapReduce【12】一起使用,MapReduceGoogle開發(fā)的大規(guī)模并行計算框架。我們已WrapperWrapper類,BigtableMapReduce框架的輸入和輸出。BigTable各樣的分布式應用程序,BigTable的進程經(jīng)常要和其它應用的進程共享機器。BigTable依賴集群管理系統(tǒng)來MapMap是一個key-value映射的數(shù)據(jù)結構,keyvalueByteSSTablekeyvaluekeykey-value對。從內SSTable都放在內存中,這樣就不必訪問硬盤了。BigTableChubby【8Chubby服務包括5Master,并且處理請求。只有在大多數(shù)副本都是正常運行的,并【9,23】來保證副本的一致性。Chubby提供了一個名字空間,里面包括了目錄和小文件。每個目錄或者文件可以當成一個鎖,讀寫文件的操作都是原子的。ChubbyChubby文件的一致性緩存。每個ChubbyChubby服務的會話。如果客戶程序不能在租約到期的時間內重新簽訂會話的租約,這個會話就過期失效了9。當一個會話失效時,它擁有的鎖和打開的文件句柄都失效了。Chubby客戶存儲BigTable數(shù)據(jù)的自引導指令的位置(5.1節(jié)查找TabletTablet服務器失效時進行善后(5.2節(jié)存儲BigTable的模式信息(每張表的列族信息Bigable0.0326%10。BigtableMasterTablet服務器。針對系統(tǒng)工作負載的變化情況,BigTable可以動態(tài)的向集群中添加(或者刪除)Tablet服務器。MasterTabletTabletsTable服務器、對TabletGFS上的文件進行垃圾收集。除此之外,它還處理對模TabletSingle-Master類型的分布式存儲系統(tǒng)【17.21Master服務器:TabletBigTableMaster服務器來獲取TabletMaster服務器通信。在實際應用中,Master服缺省情況下,每個Tablet100MB200MB。我們使用一個三層的、類似B+樹[10]的結構存儲Tablet的位置信息(4)第一層是一個存儲在Chubby中的文件,它包含了RootTablet的位置信息。RootTablet包含了一個特殊RootTablet實際上是METADATA表的第一個TabletRootTablet永遠不會被分割—這就保證了Tablet的位置信息存儲結構不會超過三層。2^34個Tablet的地址(Tablet128MB2^61字節(jié)數(shù)據(jù)。TabletTablet的地址信息,或者發(fā)現(xiàn)Tablet位置信息;如果客戶端緩存是數(shù)據(jù)的時候才能發(fā)現(xiàn)數(shù)據(jù)過期11TabletGFS文件Tablet的元數(shù)據(jù)的時候,它都會多讀取幾個Tablet的元數(shù)據(jù)。為該Tablet提供服務。這些信息有助于排查錯誤和性能分析。Tablet只能分配給一個TabletMaster服務器記錄了當前有哪些活躍的Tablet一個裝載請求,把Tablet分配給這個服務器。BigTable使用ChubbyTabletTablet服務器啟動時,它在Chubby的一個Master(服務器目錄MasterTablet服務器加入了。如果Tablet服務器丟失了Chubby上的獨占鎖—比如由于網(wǎng)絡斷開導致Tablet服務器和Chubby的會話丟失—它就停止對Tablet(Chubby提供了一種高效的機制,利用這種機制,Tablet服務器能夠在不增加網(wǎng)絡負擔的情況下知道它是否還持有鎖。只要文件還存在,Tablet服務器就會試圖重新獲得對該文件的獨占鎖;如果文件不存在了,那么Tablet分配到其它的Tablet服務器。MasterTabletTablet提供服務了,并且要盡快重新分配Tablet。MasterTabletTabletTabletTabletMaster服務器最近幾次嘗試和它通信都沒有得到響應,MasterTabletMaster服務器成功獲取了獨占鎖,ChubbyTabletChubbyMaster服務器就刪除該TabletChubbyTabletTablet服務器Chubby上的服務器文件被刪除了,MasterTabletTabletBigtableMasterChubby之間網(wǎng)絡出現(xiàn)故障的時候仍然可以使用,Master服務器在它的Chubby會話過期后主動退出。但是不管怎樣,如同我們前面所描述的,Master服務器的故障不Tablet在Tablet服務器上的分配狀態(tài)。Master服務器之后,Master服務器首先要了解當前Tablet的分配狀態(tài),之后才能夠修改分配狀態(tài)。Master服務器在啟動的時候執(zhí)行以下步驟:Master服務器從ChubbyMasterMasterMasterTabletTabletTablet的分配信未分配的Tablet集合等待合適的時機分配。4Tablet加入到未分配的Tablet集合。這個附加操作確保了RootTablet會被分配。由于RootTablet包括了所有Tablet的名字了。保存現(xiàn)有Tablet的集合只有在以下事件發(fā)生時才會改變:建立了一個新表或者刪除了一個舊表、兩個Tablet被合并了、或者一個Tablet被分割成兩個小的Tablet。Master服務器可以跟蹤記錄所有這些事件,因為MasterTablet并不完整,因此,Tablet服務器會重新向Master服務器發(fā)送通知信息。5所示,TabletGFSREDO日志中14。在這些更新操作中,最近提交的那些存放在一個排序的緩存中,我們稱這個緩存為memtable;較早的更新存放在一系列含了組成這個Tablet的SSTable的列表,以及一系列的RedoPoint15,這些RedoPoint指向可能含有該Tabletmemtable。當對Tablet服務器進行寫操作時,Tablet驗證(Chubby客戶緩存里。成功的修改操作會記錄在提交日志里??梢圆捎门鷐emtable里面。當對Tablet服務器進行讀操作時,TabletmemtableCompaction過程有兩個目的:shrink19Tablet服務器使用的內存,以及在服務器災難恢復過程中,減少必須從提交日志里讀取的數(shù)據(jù)量。在Compaction過程中,正在進行的讀寫操作仍能繼續(xù)。MinorCompaction都會創(chuàng)建一個新的SSTableMinorCompaction過程不停滯的持續(xù)進行下SSTableMergingCompaction過程合并文件,限制這類文件的數(shù)量。MergingCompaction過程讀取一些SSTablememtable的內容,合并成SSTable。只要MergingCompactionSSTablememtable就可以刪除了。SSTableSSTableMergingCompactionMajorCompaction。由非循環(huán)掃描它所有的TabletMajorCompaction。MajorCompactionBigtable回收BigTable能及時清除已經(jīng)刪除的數(shù)據(jù)21,這對存放敏感數(shù)據(jù)的服務是BigtableBigtable到達用戶要求的高性能、Bigtable實現(xiàn)的其它部分,為了更好的強調這些優(yōu)化工作,我們將深入細客戶程序可以將多個列族組合成一個局部性群族。對TabletSSTableWebtable表中,網(wǎng)頁的元數(shù)據(jù)(Checksum)可以在一個局部性群組中,網(wǎng)頁的內容可以在另外一個群組:特別有用:在BigtableMETADATA表中具有位置相關性的列族的訪問速度。SSTable是否需要壓縮;如果需要壓縮,那么以什么格式來壓縮。SSTable的塊(塊的大小由局部性群組的優(yōu)化參數(shù)指定)都使用用戶指定的壓縮格式來壓縮。雖然分塊壓縮浪費了少量空間22,但是,我們在只讀取SSTable的一小部分數(shù)據(jù)的時候就不必解壓整個文件了。很多客戶程序使用了“兩遍”的、可定制的壓縮方式。第一遍采用BentleyandMcIlroy’s方式[6],這種方式在一個16KB的小掃描窗口中尋找重復數(shù)據(jù)。兩個壓縮的算法都很快,在現(xiàn)在的機器上,壓縮的速率達到100-200MB/s,解壓的速率達400-1000MB/s。壓縮率上的表現(xiàn)也是令人驚嘆。比如,在Webtable的例子里,我們使用這種壓縮方式來存儲網(wǎng)頁內容。在一存放方式:從同一個主機獲取的頁面都存在臨近的地方。利用這個特性,Bentley-McIlroy算法可以從來自同Webtable,其它的很多應用程序也通過選擇合適的行名來Bigtable中存儲同一份數(shù)據(jù)的多個版本的時候,為了提高讀操作的性能,TabletSSTableKey-Value對;BlockGFSSSTableBloom過濾器6.3節(jié)所述,一個讀操作必須讀取構成TabletSSTableSSTable不在內存SSTableBloom7BloomSSTable是否包含了特定行和列的數(shù)據(jù)。對于Bloom過濾器的內存的代價,就換來了讀操作顯著減少Bloom過濾器也隱式的達到了當應用程序訪問不存在的行或列時,大多數(shù)時候我們Commit如果我們把對每個Tablet的操作的Commit日志文件時24Seek操作。另外,由于批量提交25中操作的數(shù)目一般比較少,因此,對每個TabletTabletCommit日志文件,把修改操作的日志以追加方式寫入同一個日志文件,因此Tablet修改的日志記錄。Tablet服務器宕機時,Tablet修改操作的日志記錄都混合在同一個日志文件中的。一種方法TabletCommitTablet的相關修改操作。使100次(每個服務器讀取一次。64MBTablet服務器對段日志文件恢復Tablet時開始執(zhí)行。在向GSCot(GSGSSbtabet服務abetMaster服務器將一個Tablet從一個Tablet服務器移到另外一個Tablet服務器時,源Tablet服務器會對這個Tablet做一次MinorCompactionCompaction操作減少了Tablet服務器的日志文件中沒有歸并的記MinorCompaction完成以后,TabletTablet服務器上了,并且不SSTable讀取數(shù)據(jù)的時候,我們不必對文件系統(tǒng)訪問操作進行同步。這樣一來,就可以非常高效的實現(xiàn)對行的并行操作。memtable是唯一一個能被讀和寫操作同時訪問的可變數(shù)據(jù)結SSTable是不變的,因此,我們可以把永久刪除被標記為“刪除”的數(shù)據(jù)的問題,轉換成對廢棄的記-SSTableSSTable【25METADATARootSSTableSSTable集合,而是共享原來的Tablet的SSTableTablet1GB17862IDE)2GZOpteron處理器,配置了足以容納所有進程工作數(shù)據(jù)集的物理內存,以及一張Gigabit的以太網(wǎng)卡。這些機器都連入一個兩層的、樹狀的交換網(wǎng)絡里,在1ms。Tablet服務器、MasterGFS服務器都運行在同一組機器上。每臺機器都運行一個GFSTablet服務器、要么運行客戶程序、要么運行在測試過程中,使用這組Tablet服務器讀/1GB左右。0R-110N個大小相同Hash,HashR取模的方式,這樣就保證了在整個基準測BigTablevalue值的API。減少RPC調用的次數(shù)。memory因此,讀操作直接從Tablet服務器的內存中讀取數(shù)據(jù),不需要從GFS讀取數(shù)據(jù)。針對這個測試,我們把每臺TabletTabletTablet服務器的性能。隨機讀的性能比其它操作慢一個數(shù)量級或以上27讀操作都要通過網(wǎng)絡從GFS64KB的SSTableTablet1000byte的一減小Block8KB。取數(shù)據(jù),不需要從GFS64KB的Block。Tablet服務器直接把寫入操作的內容追加到一個CommitGFS來提高性能。隨機Tablet服務器的Commit日志文件中。64次讀操作直接從緩存讀取數(shù)據(jù)。Tablet1500臺,系統(tǒng)的整體吞吐量有了夢幻般的增長,增長的100。比如,隨著Tablet500300倍。之所以會有這樣的性能提升,主要是因為這個基準測試的瓶頸是單臺Tablet服務器的CPU。Tablet1臺Tablet的移動導致重新負載均衡能力受限(Tablet1秒內—這個Tablet是不可用的Tablet服務器數(shù)量增加的提升幅度最?。ㄕw吞吐量100500倍1000-byte64KB大的Block1GB的鏈路,結果導致隨著我們Google組,我們看到整體的吞吐量超過了每秒1200000次請求,發(fā)送到系統(tǒng)的RPC請求導致的網(wǎng)絡負載達到了741MB/s,系統(tǒng)發(fā)出的RPC16GB/s。2提供了一些目前正在使用的表的相關數(shù)據(jù)。一些表存儲的是用戶相關的數(shù)據(jù),另外一些存儲的則是的復雜程度上都有很大的差別。本節(jié)的其余部分,我們將主要描述三個產(chǎn)品研發(fā)團隊如何使用Bigtable的。Web這個Javascript程序在頁面被訪問的時候調用。它記錄了各種GoogleAnalytics需要使用的信息,比如用戶的標識、獲取的網(wǎng)頁的相關信息。GoogleAnalytics匯總這些數(shù)據(jù),之后提供給Web站點的管理員。我們粗略的描述一下GoogleAnalytics使用的兩個表。RowClick表(200TB數(shù)據(jù))的每一行存放對同一個Web14%。Summary表(20TB的數(shù)據(jù))包含了關于每個Web站點的、各種類型的預定義匯總信息。一個周MapReduceRawClickSummaryMapReduce工作進程都RawClickGFS的吞吐量。這個表的能夠壓縮到原有29%。GoogleGoogleWeb的(70TB的數(shù)據(jù),所以需要從磁盤讀取數(shù)據(jù)。圖像已經(jīng)被高效壓縮過了,因此存儲在Bigtable后不需要再壓縮了。Imagery表的每一行都代表了一個單獨的地理區(qū)域。行都有名稱,以確保毗鄰的區(qū)域存儲在了一起。數(shù)據(jù)預處理流水線高度依賴運行在BigtableMapReduceMapReduce任務的時候,整個系統(tǒng)中每臺Tablet1MB/s。500GBTabletin-memory的列族。\hGoogleWeb查詢、圖像和新聞。用戶可以瀏覽他們查詢的歷史,重復他們之前的查詢和點擊;Google歷史使用習慣模式的個性化查詢結果。BigtableBigtable為MapReduce任務生成用戶的數(shù)據(jù)圖表。這些用戶數(shù)據(jù)圖表用來個性化當前的查詢結果。Bigtable的集群上,這樣就增強了數(shù)據(jù)可用性,同時減少了由客戶端和BigtableBigtableChubbyRPCChecksum。我們在設計Chubby操作只返回錯誤碼集合中的一個值。API中支持通常方式的事務處理。但是由于我們還不會馬上用到Bigtable非常重要(Bigtable自身以詳細記錄代表了RPC調用的很多重要操作。這個特性允許我們檢測和修正很多的問題,比如Tablet數(shù)據(jù)結大約1000032,abtMsr服Tablet服務器簽訂租約,TabletKill掉自己的進程。不幸的是,這使用Ch

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論