1. 程式人生 > >HBase讀寫詳細流程

HBase讀寫詳細流程

HBase定義

HBase 是一個高可靠、高效能、面向列、可伸縮的分散式儲存系統,利用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架構圖

 

·  HMaster連結Zookeeper目的HMaster需要知道哪些HRegionServere是活的及HRegionServer所在的位置,然後管理HRegionServer

·  HBase內部是通過DFS client把資料寫到HDFS上的

·  每一個HRegionServer有多個HRegion,每一個HRegion有多個Store,每一個Store對應一個列簇。

·  HFileHBaseKeyValue資料的儲存格式,HFileHadoop的二進位制格式檔案,StoreFile就是對HFile進行了封裝,然後進行資料的儲存。

·  HStoreMemStore

StoreFile組成。

·  HLog記錄資料的所有變更,可以用來做資料恢復。

·  hdfs對應的目錄結構為:namespace->table->列簇->->單元格

HBase架構中各模組功能

Client

整個HBase叢集的訪問入口;
使用HBase RPC機制與HMasterHRegionServer進行通訊;
HMaster進行通訊進行管理表的操作;
HRegionServer進行資料讀寫類操作;
包含訪問HBase的介面,並維護cache來加快對HBase的訪問

Zookeeper

保證任何時候,叢集中只有一個HMaster
存貯所有HRegion的定址入口;
實時監控

HRegion Server的上線和下線資訊,並實時通知給HMaster
儲存HBaseschematable元資料;
Zookeeper Quorum儲存表地址、HMaster地址。

HMaster

HMaster沒有單點問題,HBase中可以啟動多個HMaster,通過ZookeeperMaster Election機制保證總有一個Master在執行,主負責TableRegion的管理工作。
管理使用者對錶的建立、刪除等操作;
管理HRegionServer的負載均衡,調整Region分佈;
Region Split後,負責新Region的分佈;
HRegionServer停機後,負責失效HRegionServerRegion遷移工作。

HRegion Server

監控維護HRegion,處理對這些HRegionIO請求,向HDFS檔案系統中讀寫資料;
負責切分在執行過程中變得過大的HRegion
Client訪問hbase上資料的過程並不需要master參與(定址訪問ZookeeperHRegion Server,資料讀寫訪問HRegione Server),HMaster僅僅維護這tableRegion的元資料資訊,負載很低。

HBase寫資料流程

1、Client先訪問zookeeper,從meta表獲取相應region資訊,然後找到meta表的資料

2、根據namespace、表名和rowkey根據meta表的資料找到寫入資料對應的region資訊

3、找到對應的regionserver

4、把資料分別寫到HLogMemStore上一份

5、MemStore達到一個閾值後則把資料刷成一個StoreFile檔案。(若MemStore中的資料有丟失,則可以總HLog上恢復)

6、 當多個StoreFile檔案達到一定的大小後,會觸發Compact合併操作,合併為一個StoreFile,(這裡同時進行版本的合併和資料刪除。)

7、 Storefile大小超過一定閾值後,會把當前的Region分割為兩個(Split),這裡相當於把一個大的region分割成兩個region並由Hmaster分配到相應的HRegionServer,實現負載均衡

 

HBase讀取資料流程

1、Client先訪問zookeeper,從zookeeper中找到metaregion的位置然後讀取meta表中的資料。meta中又儲存了使用者表的region資訊。

2、根據namespace、表名和rowkeymeta表中找到對應的region資訊

3、找到這個region對應的regionserver

4、查詢對應的region

5、先從MemStore找資料,如果沒有,再到StoreFile上讀(為了讀取的效率)