Hbase原理的介紹和使用場景分析

擊水三千里發表於2019-02-15

主流nosql

MongoDB、Hbase、Redis 

 

本文只介紹Hbase:

 

HBase資料模型

名稱空間
名稱空間是對錶的邏輯分組,不同的名稱空間類似於關係型資料庫中的不同的Database資料庫。利用名稱空間,在多租戶場景下可做到更好的資源和資料隔離。


對應於關係型資料庫中的一張張表,HBase以“表”為單位組織資料,表由多行組成。


行由一個RowKey和多個列族組成,一個行有一個RowKey,用來唯一標示。

列族
每一行由若干列族組成,每個列族下可包含多個列,如上ImployeeBasicInfoCLF和DetailInfoCLF即是兩個列族。列族是列共性的一些體現。注意:物理上,同一列族的資料儲存在一起的。

列限定符
列由列族和列限定符唯一指定,像如上的name、age即是ImployeeBasicInfoCLF列族的列限定符。

單元格
單元格由RowKey、列族、列限定符唯一定位,單元格之中存放一個值(Value)和一個版本號。

時間戳
單元格內不同版本的值按時間倒序排列,最新的資料排在最前面

 

 HBase 優點

1) 儲存容量大,一個表可以容納上億行,上百萬列;

2)可通過版本進行檢索,能搜到所需的歷史版本資料;

3)負載高時,可通過簡單的新增機器來實現水平切分擴充套件,跟Hadoop的無縫整合保障了其資料可靠性(HDFS)和海量資料分析的高效能(MapReduce);

4)在第3點的基礎上可有效避免單點故障的發生。

 

HBase 缺點

基於Java語言實現及Hadoop架構意味著其API更適用於Java專案;
node開發環境下所需依賴項較多、配置麻煩(或不知如何配置,如持久化配置),缺乏文件;
佔用記憶體很大,且鑑於建立在為批量分析而優化的HDFS上,導致讀取效能不高;
API相比其它 NoSql 的相對笨拙。

 

思考幾個問題

1、region是如何劃分?

hbase的表中的行rowkey按照字典順序進行排序

在行的方向上基於rowkey分割為多個region

2、region是如何分配管理的?

一張表上面有多個region被隨機分配到叢集中的regionserver中進行管理,由master進行隨機分配

同一個regionserver上可以管理不同表中的region,每個rengionserver上管理的regin的數量是均衡。

每張表預設建立時候只用一個region,隨著表中資料量的增大到一定閥值(10G),會自動分為兩個region,分割後region會被master再次分配給regionserver去管理

當某臺機器的regionserver發生當機,那麼其管理的region丟失管理,master把這臺regionserver管理的region重新分配給其他的regionserver去管理

 

HBase 適用場景

1線上業務查詢:訂單,商品,快遞單號,如歷史訂單

2離線業務的儲存

 

Hbase三個重要的機制

flush機制:

思考:一個regionserver上面有多個region。即多個metastore,當單個metastore沒有達到128M。但是整個regionserver,metastore的總大小已經很大了,比如已經佔用了20個metastore,每個120M,2.4G

當metastore達到128MB的時候,會把資料flush成為storeFile

<property>

<name>hbase.hregion.max.filesize</name>

<value>10737418240</value>

<source>hbase-default.xml</source>

</property>

 

當regionserver上全部的metastore達到40%的時候,強制阻塞操作,直接把metastore中資料,flush成storeFile

<property>

<name>hbase.regionserver.global.memstore.upperLimit</name>

<value>0.4</value>

<source>hbase-default.xml</source>

</property>

 

當regionserver上全部的metastore達到38%的時候,把佔比比較大的metastore中資料,flush成storeFile

<property>

<name>hbase.regionserver.global.memstore.lowerLimit</name>

<value>0.38</value>

<source>hbase-default.xml</source>

</property>

 

compact機制:

當storeFile越來越多,會觸發compact機制,把多個storeFile合併成一個大的storeFile

合併分為兩個:小合併(min compact) 大合併(major compact)

split機制:

當合並後的storeFile越來越大,(10G)就會觸發split機制。把region一分為二

預設的老版本的是248M

 

Hbase寫入資料的流程 

1.client先去zookeeper訪問,從zookeeper中獲取meta表

2.通過讀取meta表,確定region所在的regionserver的伺服器

3.client直接向這臺伺服器發出寫入資料的請求

4.regionserver接到請求,然後響應

5.client首先把資料寫入Hlog中,防止丟失

6.把資料寫入metastore進行快取。預設的大小是128M

7.當Hlog和metastore全部完成,這次寫入才算成功

8.當資料達到128M的時候,發生flush機制把資料變為storeFile

9.當storeFile越來越多,會觸發compact(壓緊)機制,把多個storeFile合併成一個大的storeFile

10.當合並後的storeFile越來越大,(10G)會觸發split機制,把region拆分為2個region,

一個列簇對應一個store,一個store下面會有多個storeFile,最終落地在HDFS,形成Hfile

相關文章