HBase學習

Hiway發表於2019-04-14

其他更多java基礎文章:
java基礎學習(目錄)


HBase框架

HBase學習
HBase內建有zookeeper,但一般我們會有其他的Zookeeper叢集來監管master和regionserver,Zookeeper通過選舉,保證任何時候,叢集中只有一個活躍的HMaster,HMaster與HRegionServer 啟動時會向ZooKeeper註冊,儲存所有HRegion的定址入口,實時監控HRegionserver的上線和下線資訊。並實時通知給HMaster,儲存HBase的schema和table後設資料,預設情況下,HBase 管理ZooKeeper 例項,Zookeeper的引入使得HMaster不再是單點故障。一般情況下會啟動兩個HMaster,非Active的HMaster會定期的和Active HMaster通訊以獲取其最新狀態,從而保證它是實時更新的,因而如果啟動了多個HMaster反而增加了Active HMaster的負擔。

一個RegionServer可以包含多個HRegion,每個RegionServer維護一個HLog,和多個HFiles以及其對應的MemStore。RegionServer執行於DataNode上,數量可以與DatNode數量一致。

HBase重要概念

HMaster

  • 監控RegionServer
  • 處理RegionServer故障轉移
  • 處理後設資料的變更
  • 處理region的分配或移除
  • 在空閒時間進行資料的負載均衡
  • 通過Zookeeper釋出自己的位置給客戶端

Write-Ahead logs

HBase的修改記錄,當對HBase讀寫資料的時候,資料不是直接寫進磁碟,它會在記憶體中保留一段時間(時間以及資料量閾值可以設定)。如果機器突然原地爆炸,把資料儲存在記憶體中會引起資料丟失,為了解決這個問題,資料會先寫在一個叫做Write-Ahead logfile的檔案中,然後再寫入記憶體中。所以在系統出現故障的時候,資料可以通過這個日誌檔案重建。

RegionServer

  • 負責儲存HBase的實際資料
  • 處理分配給它的Region
  • 重新整理快取到HDFS
  • 維護HLog
  • 執行壓縮
  • 負責處理Region分片

Region

Hbase表的分片,HBase表會根據RowKey值被切分成不同的region儲存在RegionServer中,在一個RegionServer中可以有多個不同的region

HFile

這是在磁碟上儲存原始資料的實際的物理檔案,是實際的儲存檔案。

Store

HFile儲存在Store中,一個Store對應HBase表中的一個列族

MemStore

顧名思義,就是記憶體儲存,位於記憶體中,用來儲存當前的資料操作,所以當資料儲存在WAL中之後,RegsionServer會在記憶體中儲存鍵值對。

Zookeeper

HMaster與HRegionServer 啟動時會向ZooKeeper註冊,儲存所有HRegion的定址入口,實時監控HRegionserver的上線和下線資訊。並實時通知給HMaster,儲存HBase的schema和table後設資料,預設情況下,HBase 管理ZooKeeper 例項,Zookeeper的引入使得HMaster不再是單點故障。一般情況下會啟動兩個HMaster,非Active的HMaster會定期的和Active HMaster通訊以獲取其最新狀態,從而保證它是實時更新的,因而如果啟動了多個HMaster反而增加了Active HMaster的負擔。

HBase讀寫流程

HBase讀資料流程

HBase學習

  1. HRegionServer儲存著meta表以及表資料,要訪問表資料,首先Client先去訪問zookeeper,從zookeeper裡面獲取meta表所在的位置資訊,即找到這個meta表在哪個HRegionServer上儲存著。

  2. 接著Client通過剛才獲取到的HRegionServer的IP來訪問Meta表所在的HRegionServer,從而讀取到Meta,進而獲取到Meta表中存放的後設資料。

  3. Client通過後設資料中儲存的資訊,訪問對應的HRegionServer,然後掃描所在HRegionServer的Memstore和Storefile來查詢資料。

  4. 最後HRegionServer把查詢到的資料響應給Client。

HBase寫資料流程

HBase學習

  1. Client也是先訪問zookeeper,找到Meta表,並獲取Meta表後設資料。確定當前將要寫入的資料所對應的HRegion和HRegionServer伺服器。

  2. Client向該HRegionServer伺服器發起寫入資料請求,然後HRegionServer收到請求並響應。

  3. Client先把資料寫入到HLog,以防止資料丟失。然後將資料寫入到Memstore。如果HLog和Memstore均寫入成功,則這條資料寫入成功。

    • 如果Memstore達到閾值,會把Memstore中的資料flush到Storefile中。
    • 當Storefile越來越多,會觸發Compact合併操作,把過多的Storefile合併成一個大的Storefile。
    • 當Storefile越來越大,Region也會越來越大,達到閾值後,會觸發Split操作,將Region一分為二。

相關文章