天天看點

HBase技術介紹 HBase簡介 HBase通路接口 HBase資料模型 MapReduce on HBase HBase系統架構 結束

hbase – hadoop database,是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統,利用hbase技術可在廉價pc server上搭建起大規模結構化存儲叢集。

hbase是google bigtable的開源實作,類似google bigtable利用gfs作為其檔案存儲系統,hbase利用hadoop hdfs作為其檔案存儲系統;google運作mapreduce來處理bigtable中的海量資料,hbase同樣利用hadoop mapreduce來處理hbase中的海量資料;google bigtable利用 chubby作為協同服務,hbase利用zookeeper作為對應。

HBase技術介紹 HBase簡介 HBase通路接口 HBase資料模型 MapReduce on HBase HBase系統架構 結束

上圖描述了hadoop ecosystem中的各層系統,其中hbase位于結構化存儲層,hadoop hdfs為hbase提供了高可靠性的底層存儲支援,hadoop mapreduce為hbase提供了高性能的計算能力,zookeeper為hbase提供了穩定服務和failover機制。

此外,pig和hive還為hbase提供了高層語言支援,使得在hbase上進行資料統計處理變的非常簡單。 sqoop則為hbase提供了友善的rdbms資料導入功能,使得傳統資料庫資料向hbase中遷移變的非常友善。

1.       native java api,最正常和高效的通路方式,适合hadoop mapreduce job并行批處理hbase表資料

2.       hbase shell,hbase的指令行工具,最簡單的接口,适合hbase管理使用

3.       thrift gateway,利用thrift序列化技術,支援c++,php,python等多種語言,适合其他異構系統線上通路hbase表資料

4.       rest gateway,支援rest 風格的http api通路hbase, 解除了語言限制

5.       pig,可以使用pig latin流式程式設計語言來操作hbase中的資料,和hive類似,本質最終也是編譯成mapreduce job來處理hbase表資料,适合做資料統計

6.       hive,目前hive的release版本尚沒有加入對hbase的支援,但在下一個版本hive 0.7.0中将會支援hbase,可以使用類似sql語言來通路hbase

row key

timestamp

column family

uri

parser

r1

t3

url=http://www.taobao.com

title=天天特價

t2

host=taobao.com

t1

r2

t5

url=http://www.alibaba.com

content=每天…

t4

host=alibaba.com

Ø  row key: 行鍵,table的主鍵,table中的記錄按照row key排序

Ø  timestamp: 時間戳,每次資料操作對應的時間戳,可以看作是資料的version number

Ø  column family:列簇,table在水準方向有一個或者多個column family組成,一個column family中可以由任意多個column組成,即column family支援動态擴充,無需預先定義column的數量以及類型,所有column均以二進制格式存儲,使用者需要自行進行類型轉換。

當table随着記錄數不斷增加而變大後,會逐漸分裂成多份splits,成為regions,一個region由[startkey,endkey)表示,不同的region會被master配置設定給相應的regionserver進行管理:

HBase技術介紹 HBase簡介 HBase通路接口 HBase資料模型 MapReduce on HBase HBase系統架構 結束

hbase中有兩張特殊的table,-root-和.meta.

Ø  .meta.:記錄了使用者表的region資訊,.meta.可以有多個regoin

Ø  -root-:記錄了.meta.表的region資訊,-root-隻有一個region

Ø  zookeeper中記錄了-root-表的location

HBase技術介紹 HBase簡介 HBase通路接口 HBase資料模型 MapReduce on HBase HBase系統架構 結束

client通路使用者資料之前需要首先通路zookeeper,然後通路-root-表,接着通路.meta.表,最後才能找到使用者資料的位置去通路,中間需要多次網絡操作,不過client端會做cache緩存。

在hbase系統上運作批處理運算,最友善和實用的模型依然是mapreduce,如下圖:

HBase技術介紹 HBase簡介 HBase通路接口 HBase資料模型 MapReduce on HBase HBase系統架構 結束

hbase table和region的關系,比較類似hdfs file和block的關系,hbase提供了配套的tableinputformat和tableoutputformat api,可以友善的将hbase table作為hadoop mapreduce的source和sink,對于mapreduce job應用開發人員來說,基本不需要關注hbase系統自身的細節。

HBase技術介紹 HBase簡介 HBase通路接口 HBase資料模型 MapReduce on HBase HBase系統架構 結束

hbase client使用hbase的rpc機制與hmaster和hregionserver進行通信,對于管理類操作,client與hmaster進行rpc;對于資料讀寫類操作,client與hregionserver進行rpc

zookeeper quorum中除了存儲了-root-表的位址和hmaster的位址,hregionserver也會把自己以ephemeral方式注冊到zookeeper中,使得hmaster可以随時感覺到各個hregionserver的健康狀态。此外,zookeeper也避免了hmaster的單點問題,見下文描述

hmaster沒有單點問題,hbase中可以啟動多個hmaster,通過zookeeper的master election機制保證總有一個master運作,hmaster在功能上主要負責table和region的管理工作:

1.       管理使用者對table的增、删、改、查操作

2.       管理hregionserver的負載均衡,調整region分布

3.       在region split後,負責新region的配置設定

4.       在hregionserver停機後,負責失效hregionserver 上的regions遷移

hregionserver主要負責響應使用者i/o請求,向hdfs檔案系統中讀寫資料,是hbase中最核心的子產品。

HBase技術介紹 HBase簡介 HBase通路接口 HBase資料模型 MapReduce on HBase HBase系統架構 結束

hregionserver内部管理了一系列hregion對象,每個hregion對應了table中的一個region,hregion中由多個hstore組成。每個hstore對應了table中的一個column family的存儲,可以看出每個column family其實就是一個集中的存儲單元,是以最好将具備共同io特性的column放在一個column family中,這樣最高效。

hstore存儲是hbase存儲的核心了,其中由兩部分組成,一部分是memstore,一部分是storefiles。memstore是sorted memory buffer,使用者寫入的資料首先會放入memstore,當memstore滿了以後會flush成一個storefile(底層實作是hfile),當storefile檔案數量增長到一定門檻值,會觸發compact合并操作,将多個storefiles合并成一個storefile,合并過程中會進行版本合并和資料删除,是以可以看出hbase其實隻有增加資料,所有的更新和删除操作都是在後續的compact過程中進行的,這使得使用者的寫操作隻要進入記憶體中就可以立即傳回,保證了hbase

i/o的高性能。當storefiles compact後,會逐漸形成越來越大的storefile,當單個storefile大小超過一定門檻值後,會觸發split操作,同時把目前region split成2個region,父region會下線,新split出的2個孩子region會被hmaster配置設定到相應的hregionserver上,使得原先1個region的壓力得以分流到2個region上。下圖描述了compaction和split的過程:

HBase技術介紹 HBase簡介 HBase通路接口 HBase資料模型 MapReduce on HBase HBase系統架構 結束

在了解了上述hstore的基本原理後,還必須了解一下hlog的功能,因為上述的hstore在系統正常工作的前提下是沒有問題的,但是在分布式系統環境中,無法避免系統出錯或者當機,是以一旦hregionserver意外退出,memstore中的記憶體資料将會丢失,這就需要引入hlog了。每個hregionserver中都有一個hlog對象,hlog是一個實作write ahead log的類,在每次使用者操作寫入memstore的同時,也會寫一份資料到hlog檔案中(hlog檔案格式見後續),hlog檔案定期會滾動出新的,并删除舊的檔案(已持久化到storefile中的資料)。當hregionserver意外終止後,hmaster會通過zookeeper感覺到,hmaster首先會處理遺留的

hlog檔案,将其中不同region的log資料進行拆分,分别放到相應region的目錄下,然後再将失效的region重新配置設定,領取 到這些region的hregionserver在load region的過程中,會發現有曆史hlog需要處理,是以會replay hlog中的資料到memstore中,然後flush到storefiles,完成資料恢複。

hbase中的所有資料檔案都存儲在hadoop hdfs檔案系統上,主要包括上述提出的兩種檔案類型:

1.       hfile, hbase中keyvalue資料的存儲格式,hfile是hadoop的二進制格式檔案,實際上storefile就是對hfile做了輕量級包裝,即storefile底層就是hfile

2.       hlog file,hbase中wal(write ahead log) 的存儲格式,實體上是hadoop的sequence file

下圖是hfile的存儲格式:

HBase技術介紹 HBase簡介 HBase通路接口 HBase資料模型 MapReduce on HBase HBase系統架構 結束

首先hfile檔案是不定長的,長度固定的隻有其中的兩塊:trailer和fileinfo。正如圖中所示的,trailer中有指針指向其他資料塊的起始點。file info中記錄了檔案的一些meta資訊,例如:avg_key_len, avg_value_len, last_key, comparator, max_seq_id_key等。data index和meta index塊記錄了每個data塊和meta塊的起始點。

data block是hbase i/o的基本單元,為了提高效率,hregionserver中有基于lru的block cache機制。每個data塊的大小可以在建立一個table的時候通過參數指定,大号的block有利于順序scan,小号block利于随機查詢。每個data塊除了開頭的magic以外就是一個個keyvalue對拼接而成, magic内容就是一些随機數字,目的是防止資料損壞。後面會詳細介紹每個keyvalue對的内部構造。

hfile裡面的每個keyvalue對就是一個簡單的byte數組。但是這個byte數組裡面包含了很多項,并且有固定的結構。我們來看看裡面的具體結構:

HBase技術介紹 HBase簡介 HBase通路接口 HBase資料模型 MapReduce on HBase HBase系統架構 結束

開始是兩個固定長度的數值,分别表示key的長度和value的長度。緊接着是key,開始是固定長度的數值,表示rowkey的長度,緊接着是rowkey,然後是固定長度的數值,表示family的長度,然後是family,接着是qualifier,然後是兩個固定長度的數值,表示time stamp和key type(put/delete)。value部分沒有這麼複雜的結構,就是純粹的二進制資料了。

HBase技術介紹 HBase簡介 HBase通路接口 HBase資料模型 MapReduce on HBase HBase系統架構 結束

上圖中示意了hlog檔案的結構,其實hlog檔案就是一個普通的hadoop sequence file,sequence file 的key是hlogkey對象,hlogkey中記錄了寫入資料的歸屬資訊,除了table和region名字外,同時還包括 sequence number和timestamp,timestamp是“寫入時間”,sequence number的起始值為0,或者是最近一次存入檔案系統中sequence number。

hlog sequece file的value是hbase的keyvalue對象,即對應hfile中的keyvalue,可參見上文描述。

本文對hbase技術在功能和設計上進行了大緻的介紹,由于篇幅有限,本文沒有過多深入地描述hbase的一些細節技術。目前一淘的存儲系統就是基于hbase技術搭建的,後續将介紹“一淘分布式存儲系統”,通過實際案例來更多的介紹hbase應用。

繼續閱讀