1. 程式人生 > >Hbase的系統架構

Hbase的系統架構

Hbase的物理儲存 HRegion1

  1. table中所有的行都是按照row key的字典序排序;
  2. table在行的方向上分割為多個HRegion;
  3. HRegion按大小分割的,每個表開始只有一個HRegion,隨著資料增多,HRegion不斷增大,當增大到一個閾值時候,HRegion就會等分為兩個新的HRegion,之後會有越來越多的Region;
  4. HRegion是Hbase中分散式儲存負載均衡的最小單元,不同HRegion分不到不同的HRegionServer上。

Hbase的物理儲存store1

  1. HRegion雖然是分散式儲存的最小單元,但是並不是
    儲存的最小單元;
  2. HRegion有一個或多個Store組成,每個Store儲存一個column family;
  3. 所以,每個儲存在HDFS上的一個單獨檔案中,空值不會被儲存;
  4. 每個HRegion又有一個MemStore和0至多個StoreFile組成,StoreFile包含Hfile。
  5. MemStore儲存在記憶體中,StoreFile儲存在HDFS上。

Hbase基本元件

Client

包含訪問Hbase介面,並維護cache來加快Hbase的訪問,比如HRegion的位置資訊。

HMaster

  1. 為HRegionServer分配HRegion:比如在HRegion split時分配新的HRegion;在HRegionServer退出時遷移其內的HRegion到其他HRegionServer上;
  2. 負責HRegionServer的負載均衡;
  3. 發現失效的HRegionServer並重新分配其上的HRegion;
  4. 管理使用者對table的增刪改查操作;
  5. 管理namespace和table的元資料;
  6. 許可權控制。

HRegionServer

  1. HRegionServer維護HRegion,處理對這些HRegion的IO 請求;
  2. 存放和管理本地HRegion;
  3. 讀寫HDFS,管理table中的資料;
  4. HRegionServer負責切分在執行過程中變得過大的HRegion;
  5. client直接通過HRegionServer讀寫資料

zookeeper

  1. 通過選舉,保證任何時候,叢集中只有一個master,master與regionServer啟動時回想zookeeper註冊
  2. 儲存所有的Region的定址入口;
  3. 實時監控RegionServer的上線和下線資訊。並實時通知給master;
  4. 儲存HBase的schema和table的元資料。

協同工作

  1. HBase client通過RPC方式和HMaster、HRegionServer通訊。
  2. 一個HRegionServer可以存放1000個HRegion;
  3. 底層table資料儲存於HDFS中,而HRegion所處理的資料儘量和資料所在的DataNode在一起,實現資料的本地化;
  4. 資料本地化並不是總能是按,比如在HRegion移動(入因split時,)需要等下一次compact才能繼續回到本地化。

HLog

  1. 每個HRegionServer中都有一個Hlog物件,HLog是一個是按write ahead log的類;
  2. 在每次使用者操作寫入MEMstore的同時,也會寫一份資料到HLog檔案中;
  3. HLog檔案定期會滾動出新的,並刪除舊的檔案(已經持久化到storeFile中的資料)

資料恢復恢復過程

  1. 當HRegionServer意外終止後,HMAster會通過zookeeper感知到;
  2. HMaster首先會處理遺留的HLog檔案,將其中不同region的Log資料進行拆分,分別放到相應region的目錄下
  3. 然後在將失效的region重新分配,領取導致和諧region的HRegionServer在loadregion的過程中,會發現有歷史Hlog需要處理
  4. 因此會replay hlog中的資料到MEMStore中,然後flush到storefiles,完成資料恢復。

無master過程中,資料讀取仍照常進行;

無master過程中,region切分、負載均衡等無法進行;

hbase寫操作流程:

  1. client通過zookeeper的排程,向HRegionServer傳送寫資料的請求,在HRegion中寫資料;
  2. 資料寫到HRegion的MEMStore,直到MEMStore達到預設的閾值;
  3. 將MEMStore中資料會被flush成一個storeFile;
  4. 隨著storeFile的數量的增多,當達到一定的閾值會觸發compact合併操作,將多個storeFile合併成一個storeFile,同時把版本更新和資料刪除;
  5. storeFile通過不斷的compact合併,逐漸形成越來越多越大的storeFile;
  6. 單個storeFile大小超過一定的閾值,會觸發split操作,把當前HRegion split成兩個新的HRegion,老的HRegion就會下線,新生成的2個HRegion會被HMaster分配到其他的HRegionServer上,是的1個HRegion的壓力分到2個HRegion上。

Hbase讀操作:

  1. client訪問zookeeper,檢視ROOT表,獲取Meta表的資訊;
  2. 從meta表中查詢,獲取存放,目標資料的HRegion資訊,從而找到HRegionServer的資訊;
  3. 通過HRegionServer找到相應的資料資訊
  4. HRegionServer的記憶體分為兩部分MEMStore、blockcache;MEMStore主要用於寫操作,blockcache只要用於讀操作,請求先到memstore中數去資料,如果沒有再到blockcache中讀取,在沒有就會到storeFile中讀取,並把讀取的資料資訊放到blockcache中。