1. 程式人生 > >hbase工作 架構原理

hbase工作 架構原理

1. HBase系統架構圖

在這裡插入圖片描述

整個HBase架構重點關注幾部分:HMaster、HRegionServer、Zookeeper、HRegion(內部包括HLog、StoreFile、MemStore)。

2. HMaster介紹

Hbase叢集採用的是master/slave模式,HMaster是叢集老大(後面簡稱Master),統籌管理,所以乾的底層雜活不多,負載不高。

2.1 Master職責

(1)為RegionServer分配Region。
(2)負責RegionServer的負載均衡。
(3)發現下線或dead的RegionServer,並重新分配其上的Region。
(4)回收HDFS上的垃圾檔案。
(5)處理Schema的更新請求。

2.2 Master工作機制

(1) master上線

1)從zookeeper上獲取唯一一個代表active master的鎖,用來阻止其它master成為master。
2)掃描zookeeper上的server父節點,獲得當前可用的region server列表。
3)和每個region server通訊,獲得當前已分配的region和region server的對應關係。
4)掃描.META.region的集合,計算得到當前還未分配的region,將他們放入待分配region列表。

(2) master下線

由於master只維護表和region的元資料,而不參與表資料IO的過程(定址訪問zk和RegionServer,資料讀寫訪問RegionServer),所以Master的負載很低,master下線僅導致所有元資料的修改被凍結(無法建立刪除表,無法修改表的schema,無法進行region的負載均衡,無法處理region 上下線,無法進行region的合併,唯一例外的是region的split可以正常進行,因為只有region server參與),表的資料讀寫還可以正常進行。因此master下線短時間內對整個hbase叢集沒有影響。從上線過程可以看到,master儲存的 資訊全是可以冗餘資訊(都可以從系統其它地方收集到或者計算出來),因此,一般hbase叢集中總是有一個master在提供服務,還有一個以上 的’master’在等待時機搶佔它的位置。

3. HRegionServer介紹

HRegionServer(後面簡稱RegionSever)是叢集中的slave,負責處理具體的讀寫請求及對資料的compact和split等具體過程。

3.1 RegionServer職責

(1) 維護Master給它分配的Region,並處理這些Region的I/O請求。
(2) 負責切分在執行過程中不斷變大的Region。

3.2 RegionServer工作機制

(1) regionserver上線

master通過zk來獲取regionserver資訊。當某個regionserver啟動時,首先會在zk的server目錄下建立一個屬於自己的檔案,並獲得該檔案的獨佔鎖。由於master訂閱了server目錄的變更訊息,所以當server目錄下的檔案出現新增或變更時,zk會及時通知master。

(2) regionserver下線

當region server下線時,它和zookeeper的會話斷開,zookeeper而自動釋放代表這臺server的檔案上的獨佔鎖。而master不斷輪詢 server目錄下檔案的鎖狀態。如果master發現某個region server丟失了它自己的獨佔鎖,(或者master連續幾次和region server通訊都無法成功),master就是嘗試去獲取代表這個region server的讀寫鎖,一旦獲取成功,就可以確定:

  1. region server和zookeeper之間的網路斷開了。
  2. region server掛了。
    的其中一種情況發生了,無論哪種情況,region server都無法繼續為它的region提供服務了,此時master會刪除server目錄下代表這臺region server的檔案,並將這臺region server的region分配給其它還活著的同志。
    如果網路短暫出現問題導致region server丟失了它的鎖,那麼region server重新連線到zookeeper之後,只要代表它的檔案還在,它就會不斷嘗試獲取這個檔案上的鎖,一旦獲取到了,就可以繼續提供服務。

4. Zookeeper介紹

Zookeeper應該可以說是在Hadoop生態中主從結構架構的設計中是大眾情人,它能夠很好的協調整個叢集統統一有序的工作。在HBase的架構中,ZooKeeper提供了類似檔案系統一樣的訪問目錄和檔案(稱為znode)的功能,通常分散式檔案系統利用它協調所有權、註冊服務、監聽更新。
每臺Region伺服器在ZooKeeper中註冊一個自己的臨時節點,主伺服器會利用這些臨時節點來發現可用伺服器,還可以利用臨時節點來跟蹤機器故障和網路分割槽。
在ZooKeeper伺服器中,每個臨時節點都屬於某一個會話,這個會話是客戶端連線ZooKeeper伺服器後自動生成的。每個會話在伺服器中有一個唯一的id,並且客戶端會以此id不斷的向ZooKeeper傳送“心跳”,一旦發生故障ZooKeeper客戶端程序死掉,ZooKeeper伺服器會判定該會話超時,並自動刪除屬於它的臨時節點。
HBase還可以利用ZooKeeper確保只有一個主伺服器在執行,儲存用於發現Region的引導位置,作為一個Region伺服器的登錄檔,一級實現其他目的。ZooKeeper是一個關鍵組成部分,沒有它HBase就無法工作。

Zookeeper的主要功能:

(1) 保證master的唯一性。 原理:master啟動時會從ZK上獲取一個active master鎖,阻止其他節點成為master。
(2) 實時監控RegionServer的狀態,將Regionserver上下線的訊息及時告知master。
(3) 儲存所有Region的定址入口(即ROOT表在哪臺伺服器上)。
(4) 儲存Hbase的Scema(Zookeeper存的是-ROOT-和.META.這兩張表的location,實際存在HBase中),包括有哪些table,每個table有哪些column family。

5. Region介紹

Region是HBase儲存和管理資料的基本單位。Region和RegionServer是多對一的關係,即一個Region只能同時被一個RegionServer使用,而一個RegionServer可以同時處理多個Region。

5.1 Region和Table的關係

Region實際是Table在行方向上的一個個劃分,一般來說一個表在初始的時候只有一個Region,隨著資料的增多,當達到某個閾值時,ReginServer就會把這個Region切分成兩個Region,以此類推。

5.2 Region細分

繼續深究的話,Region還是可以再細分的,它是由一個或多個Store組成的,在這裡有必要搞清楚幾個基本概念:HFile、HLog、StoreFile、MemStore。