天天看點

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的系統架構
Hbase的系統架構

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中。