Hbase全面介紹_第1頁
Hbase全面介紹_第2頁
Hbase全面介紹_第3頁
Hbase全面介紹_第4頁
Hbase全面介紹_第5頁
已閱讀5頁,還剩11頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、historystarted by chad waiters and jim2006.11 G release paper on BigTable2007.2 inital HBase prototype created as Hadoop contrib2007.10 First useable Hbase2008.1 Hadoop become Apache top-level project and Hbase becomes subproject2008.10 Hbase 0.18,0.19 releasedhbase是bigtable的開源山寨版本。是建立的 hdfs之上,提供高可靠

2、性、高性能、列存儲、可伸縮、實時 讀寫的數據庫系統。它介于nosql和RDBMS之間,僅能通過主鍵(row key)和主鍵的range來檢索數據,僅支持單行事務(可通 過hive支持來實現多表join等復雜操作)。主要用來存儲非結構化和半結構化的松散數據。與hadoop 一樣,Hbase目標主要依靠橫向擴展,通過不斷增加廉價的商用服務器,來增加計算和存儲能力。HBase中的表一般有這樣的特點:1大:一個表可以有上億行,上百萬列2面向列:面向列(族)的存儲和權限控制,歹U (族)獨立檢索。3稀疏:對于為空(null)的列,并不占用存儲空間,因此,表可以設計的非常稀疏。下面一幅圖是Hbase在Ha

3、doop Ecosystem 中的位置。The Hadoop EcosystemETL Toots : 81 Reporting : ROBMSi 一一一一一一 一一 3_ 一 1Pig (Oats FIq所Hw華店QL)SqPWMapReduce Job ScheduIir/ExccuIran &j/sieirn)HBasc ColLfrui D口jHDFS伴adoap gkibvtn Fiq System:、邏輯視圖HBase以表的形式存儲數據。表有行和列組成。列劃分為若干個列族(row family)RowKeycolumn-family1column-family2column

4、-familcolumn1column1column1column2column3column1key1t1:abct4:dfadst2:gdxdft3:hellot2:worldkey2t3:abct1:gdxdft4:dfads t3:hellot2:dfdsfa t3:dfdfkey3t2:dfadfasdt1:dfdasddsft2:dfxxdfasdt1:taobao.coRow Key與nosql數據庫彳門一樣,row key是用來檢索記錄的主鍵。訪問 hbase table中的行,只有三種方式:1通過單個row key訪問2 通過 row key 的 range3全表掃描Row

5、key行鍵(Row key)可以是任意字符串(最大長度是 64KB ,實際應用中長度一般為10-100bytes),在hbase內部,row key保存為字節數組。存儲時,數據按照 Row key的字典序(byte order)排序存儲。設計key時,要充分排序存儲這個特性,將經 常一起讀取的行存儲放到一起。(位置相關性)注意:字典序對 int 排序的結果是 1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,9,91,92,93,94,95,96,97,98,99要保持整形的自然序,行鍵必須用 0作左填充。行的一次讀寫是原子操作(不論一次讀寫多少列)。這個

6、設計決策能夠使用戶很容易的理解程序在對同一個 行進行并發更新操作時的行為。列族hbase表中的每個列,都歸屬與某個列族。列族是表的chema的一部分(而列不是),必須在使用表之前定義。列名都以列族作為前綴。例如 courses:history , courses:math 都屬于courses這個列族。訪問控制、磁盤和內存的使用統計都是在列族層面進行的。實際應用中,列族上的控制權限能幫助我們管 理不同類型的應用:我們允許一些應用可以添加新的基本數據、一些應用可以讀取基本數據并創建繼承的 列族、一些應用則只允許瀏覽數據(甚至可能因為隱私的原因不能瀏覽所有數據)。時間戳HBase中通過row和co

7、lumns確定的為一個存貯單元稱為cell。每個cell都保存著同一份數據的多個版本。版本通過時間戳來索引。時間戳的類型是64位整型。時間戳可以由 hbase(在數據寫入時自動)賦值,此時時間戳是精確到毫秒的當前系統時間。時間戳也可以由客戶顯式賦值。如果應用程序要避免數據版本沖突,就必須自己生成具有唯一性的時間戳。每個 cell中,不同版本的數據按照時間倒序排序,即最新的數 據排在最前面。為了避免數據存在過多版本造成的的管理(包括存貯和索引)負擔,hbase提供了兩種數據版本回收方式。一是保存數據的最后n個版本,二是保存最近一段時間內的版本(比如最近七天)。用戶可以針對每個列族進行設置。Cel

8、l由row key, column( =<family> + <label> ), version唯一確定的單元。 cell中的數據是沒有類型的,全部是 字節碼形式存貯。三、物理存儲1已經提到過,Table中的所有行都按照row key的字典序排列。2 Table在行的方向上分割為多個Hregion 。'3 region按大小分割的,每個表一開始只有一個region ,隨著數據不斷插入表,region不斷增大,當增大到一個閥值的時候,Hregion就會等分會兩個新的 Hregion 。當table中的行不斷增多,就會有越來越多的Hregion 。TableReg

9、ionTdb居RegionRegionRegionRegionRegionHregion可以分布在不4 Hregion是Hbase中分布式存儲和負載均衡的最小單元。最小單元就表示不同的 同的 HRegion server 上。但一個 Hregion 是不會拆分到多個 server 上的。RetjionRegionRegionRegionRegion Servprt5 HRegion雖然是分布式存儲的最小單元,但并不是存儲的最小單元。事實上,HRegion由一個或者多個 Store組成,每個 store保存一個columns family 。每個Strore又由一個 memStore和0至多個S

10、toreFile組成。如圖:HFile的格式為:RegionStorememStorStoreFileStore HeCdta sizeiinl) Keylenfintj Kjey(byte 口). Dffset(bngTrailer部分的格式Total Un com preyed Dfltd Byte long>Entry Count or Data K-V Count (int)Compression Codec (int)Version fin。TRAILER BLOCK MAGIC (36)File Info Offset (long)Index Offset (long)f&g

11、t;ata Index Count (irn)Meta Index Offset (long>Meta Index.Count tint)HFile分為六個部分:Data Block段辟存表中的數據,這部分可以被壓縮Meta Block段(可選的)血存用戶自定義的kv對,可以被壓縮File Info段中file的元信息,不被壓縮,用戶也可以在這一部分添加自己的元信息。Data Block Index 段 tata Block的索引。每條索引的 key是被索引的block的第一條記錄的 key。Meta Block Index 段(可選的)-Meta Block 的索引。Trailer至一

12、段是定長的。保存了每一段的偏移量,讀取一個HFile時,會首先讀取Trailer , Trailer保存了每個段的起始位置(段的Magic Number用來做安全check),然后,DataBlock Index 會被讀取到內存中, 這樣,當檢索某個key時,不需要掃描整個 HFile ,而只需從內存中找到key所在的block,通過一次磁盤io將整個block讀取到內存中,再找到需要的 key o DataBlock Index采用LRU機制淘汰。HFile的Data Block , Meta Block通常采用壓縮方式存儲,壓縮之后可以大大減少網絡IO和磁盤IO,隨之而來的開銷當然是需要花

13、費cpu進行壓縮和解壓縮。目標Hfile的壓縮支持兩種方式:Gzip , Lzo。HLog(WAL log)WAL 意為 Write ahead 10g(/wiki/Write-ahead_logging),類似 mysql 中的 binlog,用來做災難恢復只用,Hlog記錄數據的所有變更,一旦數據修改,就可以從10g中進行恢復。每個Region Server維護一個 Hlog,而不是每個 Region 一個。這樣不同region(來自不同table)的日志會混 在一起,這樣做的目的是不斷追加單個文件相對于同時寫多個文件而言,可以減少磁盤尋址次數,

14、因此可 以提高對table的寫性能。帶來的麻煩是,如果一臺region server下線,為了恢復其上的region ,需要將region server 上的log 進行拆分,然后分發到其它region server 上進行恢復。HLog 文件就是一個普通的 Hadoop Sequence File , Sequence File 的 Key 是 HLogKey 對象,HLogKey 中記錄了寫入數據的歸屬信息,除了 table和region名字外,同時還包括 sequence number和timestamp ,timestamp是"寫入時間",sequence numb

15、er 的起始值為 0,或者是最近一次存入文件系統中sequencenumber。HLog Sequece File 的 Value 是 HBase 的 KeyValue 對象,即對應 HFile 中的 KeyValue ,可參 見上文描述。四、系統架構Zaokeeper clusterRegion server clusterRegion 5吧rve Region server Region server Region serverRegi<jri server clusterRegion serverRegion seiverClient1包含訪問hbase的接口,client維護著一

16、些cache來加快對hbase的訪問,比如regione的位置信息Zookeeper1保證任何時候,集群中只有一個master2存貯所有Region的尋址入口。3實時監控 Region Server的狀態,將 Region server的上線和下線信息實時通知給Master4存儲Hbase的schema,包括有哪些table ,每個table有哪些column familyMaster1 為 Region server 分配 region2負責region server 的負載均衡3發現失效的region server并重新分配其上的 region4 GFS上的垃圾文件回收5 處理 schem

17、a 更新請求Region Server1 Region server 維護 Master分配給它的region ,處理對這些 region的IO請求2 Region server負責切分在運行過程中變得過大的region可以看到,client 訪問 hbase 上數據的過程并不需要master 參與(尋址訪問 zookeeper 和region server ,數據讀寫訪問regione server ) , master僅僅維護者table和region的元數據信息,負載很低。五、關鍵算法/流程region 定位系統如何找到某個 row key (或者某個 row key range)所在的

18、region bigtable使用三層類似B+樹的結構來保存region位置。第一層是保存 zookeeper里面的文件,它持有 root region的位置。第二層root region 是.META.表的第一個region其中保存了 .META.z表其它region的位置。通過root region , 我們就可以訪問.META.表的數據。就能定位到任意region 。1 root region永遠不會被split,保證了最需要三次跳轉,2 .META.表每行保存一個region的位置信息,row key采用表名+表的最后一樣編碼而成。RegionRegionRrgiuli3為了加快訪問,

19、.META.表的全部region都保存在內存中。假設,.META.表的一行在內存中大約占用1KB。并且每個region限制為128MB。那么上面的三層結構可以保存的region數目為: (128MB/1KB) * (128MB/1KB) = = 2(34) 個 region4 client會將查詢過的位置信息保存緩存起來,緩存不會主動失效,因此如果client上的緩存全部失效,則需要進行6次網絡來回,才能定位到正確的region(其中三次用來發現緩存失效, 另外三次用來獲取位置信 息)。讀寫過程上文提到, hbase 使用 MemStore 和 StoreFile 存儲對表的更新。數據在更新時

20、首先寫入 Log(WAL log) 和內存 (MemStore) 中, MemStore 中的數據是排序的,當 MemStore累計到一定閾值時, 就會創建一個新的 MemStore , 并且將老的 MemStore 添加到 flush 隊列, 由單獨的線程 flush 到磁盤上,成為一個StoreFile 。于此同時,系統會在 zookeeper 中記錄一個redo point ,表示這個時刻之前的變更已經持久化了。(minor compact)當系統出現意外時,可能導致內存(MemStore) 中的數據丟失,此時使用Log(WAL log) 來恢復 checkpoint之后的數據。前面提到

21、過 StoreFile 是只讀的, 一旦創建后就不可以再修改。 因此 Hbase 的更新其實是不斷追加的操作。當一個 Store 中的 StoreFile 達到一定的閾值后,就會進行一次合并(major compact), 將對同一個key 的修改合并到一起, 形成一個大的 StoreFile , 當 StoreFile 的大小達到一定閾值后, 又會對 StoreFile 進行 split ,等分為兩個StoreFile 。由于對表的更新是不斷追加的,處理讀請求時,需要訪問 Store 中全部的 StoreFile 和 MemStore ,將他們的按照 row key 進行合并, 由于 Sto

22、reFile 和 MemStore 都是經過排序的, 并且 StoreFile 帶有內存中索引,合并的過程還是比較快。寫請求處理過程1 client 向 region server 提交寫請求2 region server 找至U 目標 region3 region檢查數據是否與 schema 一致4如果客戶端沒有指定版本,則獲取當前系統時間作為數據版本5將更新寫入WAL log6將更新寫入Memstore7判斷 Memstore的是否需要flush為Store文件。region 分配任何時刻,一個 region 只能分配給一個 region server 。 master 記錄了當前有哪些可

23、用的region server 。以及當前哪些region分配給了哪些region server ,哪些region還沒有分配。當存在未分配的region ,并且有一個 region server 上有可用空間時, master 就給這個 region server 發送一個裝載請求,把region 分配給這個 region server 。 region server 得到請求后,就開始對此 region 提供服務。region server 上線master 使用 zookeeper 來跟蹤 region server 狀態。當某個region server 啟動時,會首先在zookeep

24、er 上的 server 目錄下建立代表自己的文件,并獲得該文件的獨占鎖。由于master 訂閱了 server 目錄上的變更消息,當 server 目錄下的文件出現新增或刪除操作時, master 可以得到來自 zookeeper 的實時通知。因此一旦 region server 上線, master 能馬上得到消息。region server 下線當 region server 下線時,它和zookeeper 的會話斷開, zookeeper 而自動釋放代表這臺 server 的文件上的獨占鎖。而master 不斷輪詢 server 目錄下文件的鎖狀態。如果master 發現某個 regi

25、on server 丟失了它自己的獨占鎖,(或者master 連續幾次和region server 通信都無法成功),master 就是嘗試去獲取代表這個 region server 的讀寫鎖,一旦獲取成功,就可以確定:1 region server 和 zookeeper 之間的網絡斷開了。2 region server 掛了。的其中一種情況發生了, 無論哪種情況, region server 都無法繼續為它的 region 提供服務了, 此時 master會刪除 server 目錄下代表這臺 region server 的文件,并將這臺 region server 的 region 分配給

26、其它還活著的同志。如果網絡短暫出現問題導致region server 丟失了它的鎖, 那么 region server 重新連接到 zookeeper 之后,只要代表它的文件還在,它就會不斷嘗試獲取這個文件上的鎖,一旦獲取到了,就可以繼續提供服務。master 上線master 啟動進行以下步驟 :1 從 zookeeper 上獲取唯一一個代碼master 的鎖,用來阻止其它 master 成為 master 。2 掃描 zookeeper 上的 server 目錄,獲得當前可用的region server 列表。3 和 2 中的每個 region server 通信,獲得當前已分配的region 和 region server 的對應關系。4 掃描 .META.region 的集合,計算得到當前還未分配的 region ,將他們放入待分配region 列表。master 下線由于 master 只維護表和 region 的元數據,而不參與表數據IO 的過程, master 下線僅導致所有元數據的修改被凍結(無法創建刪除表,無法修改表的 schema , 無法進行 region 的負載均衡, 無法處理 region 上下線,無法進行region 的合并,唯一例外的是reg

溫馨提示

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

評論

0/150

提交評論