HBase

lwx_R發表於2024-08-06

一、簡介

        hbase是bigtable的開源山寨版本。是建立的hdfs之上,提供高可靠性、高效能、列儲存、可伸縮、實時讀寫的資料庫系統。

它介於nosql和RDBMS之間,僅能通過主鍵(row key)和主鍵的range來檢索資料,僅支援單行事務(可通過hive支援來實現多表join等複雜操作)。主要用來儲存非結構化和半結構化的鬆散資料。

與hadoop一樣,Hbase目標主要依靠橫向擴充套件,通過不斷增加廉價的商用伺服器,來增加計算和儲存能力。

HBase中的表一般有這樣的特點

1 大:一個表可以有上億行,上百萬列

2 面向列:面向列(族)的儲存和許可權控制,列(族)獨立檢索。

3稀疏:對於為空(null)的列,並不佔用儲存空間,因此,表可以設計的非常稀疏。



二、邏輯檢視



時間戳

HBase中通過row和columns確定的為一個存貯單元稱為cell。每個 cell都儲存著同一份資料的多個版本。版本通過時間戳來索引。時間戳的型別是 64位整型。時間戳可以由hbase(在資料寫入時自動 )賦值,此時時間戳是精確到毫秒的當前系統時間。時間戳也可以由客戶顯式賦值。如果應用程式要避免資料版本衝突,就必須自己生成具有唯一性的時間戳。每個 cell中,不同版本的資料按照時間倒序排序,即最新的資料排在最前面(timestamp越大,值越新)

為了避免資料存在過多版本造成的的管理 (包括存貯和索引)負擔,hbase提供了兩種資料版本(Version)回收方式。一是儲存資料的最後n個版本,二是儲存最近一段時間內的版本(比如最近七天)。使用者可以針對每個列族進行設定。

 

Cell

{row key, column( =<family> + <label>), version} 唯一確定的單元。cell中的資料是沒有型別的,全部是位元組碼形式存貯。


三、物理儲存



1 已經提到過,Table中的所有行都按照row key的字典序排列。

2 Table 在行的方向上分割為多個Hregion。


3 region按大小分割的,每個表一開始只有一個region,隨著資料不斷插入表,region不斷增大,當增大到一個閥值的時候,Hregion就會等分會兩個新的Hregion。當table中的行不斷增多,就會有越來越多的Hregion。


4 Hregion是Hbase中分散式儲存和負載均衡的最小單元。最小單元就表示不同的Hregion可以分佈在不同的HRegion server上。但一個Hregion是不會拆分到多個server上的。




5 HRegion雖然是分散式儲存的最小單元,但並不是儲存的最小單元。

事實上,HRegion由一個或者多個Store組成,每個store儲存一個列族。

每個Strore又由一個memStore和0至多個StoreFile組成。MemStore駐留在記憶體,資料到來時首先更新到MemStore,當MemStore到達閥值之後,更新到對應的StroreFile中。StoreFile以HFile格式儲存在HDFS上。

         Hlog檔案用於故障恢復。例如某一臺HRegionServer發生故障,那麼它所維護的HRegion會被重新分配到新的機器上。這時Hlog會按照HRegion進行劃分。新的機器在載入HRegion的時候可以通過Hlog對資料進行恢復。





四、系統架構

   

Client

1 包含訪問hbase的介面,client維護著一些cache來加快對hbase的訪問,比如regione的位置資訊。

 

Zookeeper

1 保證任何時候,叢集中只有一個master

2 存貯所有Region的定址入口。

3 實時監控Region Server的狀態,將Region server的上線和下線資訊實時通知給Master

4 儲存Hbase的schema,包括有哪些table,每個table有哪些column family

 

Master

1 為Region server分配region

2 負責region server的負載均衡

3 發現失效的region server並重新分配其上的region

4 GFS上的垃圾檔案回收

5 處理schema更新請求

 

Region Server

1 Region server維護Master分配給它的region,處理對這些region的IO請求

2 Region server負責切分在執行過程中變得過大的region

可以看到,client訪問hbase上資料的過程並不需要master參與(定址訪問zookeeper和region server,資料讀寫訪問regione server),master僅僅維護者table和region的後設資料資訊,負載很低。

 

    五、ROOT表和META表



六、讀取資料過程



七、HBase與RDBMS的區別