其餘更多java基礎文章:
java基礎學習(目錄)java
一個RegionServer能夠包含多個HRegion,每一個RegionServer維護一個HLog,和多個HFiles以及其對應的MemStore。RegionServer運行於DataNode上,數量能夠與DatNode數量一致。緩存
HBase的修改記錄,當對HBase讀寫數據的時候,數據不是直接寫進磁盤,它會在內存中保留一段時間(時間以及數據量閾值能夠設定)。若是機器忽然原地爆炸,把數據保存在內存中會引發數據丟失,爲了解決這個問題,數據會先寫在一個叫作Write-Ahead logfile的文件中,而後再寫入內存中。因此在系統出現故障的時候,數據能夠經過這個日誌文件重建。服務器
Hbase表的分片,HBase表會根據RowKey值被切分紅不一樣的region存儲在RegionServer中,在一個RegionServer中能夠有多個不一樣的region負載均衡
這是在磁盤上保存原始數據的實際的物理文件,是實際的存儲文件。框架
HFile存儲在Store中,一個Store對應HBase表中的一個列族post
顧名思義,就是內存存儲,位於內存中,用來保存當前的數據操做,因此當數據保存在WAL中以後,RegsionServer會在內存中存儲鍵值對。學習
HMaster與HRegionServer 啓動時會向ZooKeeper註冊,存儲全部HRegion的尋址入口,實時監控HRegionserver的上線和下線信息。並實時通知給HMaster,存儲HBase的schema和table元數據,默認狀況下,HBase 管理ZooKeeper 實例,Zookeeper的引入使得HMaster再也不是單點故障。通常狀況下會啓動兩個HMaster,非Active的HMaster會按期的和Active HMaster通訊以獲取其最新狀態,從而保證它是實時更新的,於是若是啓動了多個HMaster反而增長了Active HMaster的負擔。3d
HRegionServer保存着meta表以及表數據,要訪問表數據,首先Client先去訪問zookeeper,從zookeeper裏面獲取meta表所在的位置信息,即找到這個meta表在哪一個HRegionServer上保存着。日誌
接着Client經過剛纔獲取到的HRegionServer的IP來訪問Meta表所在的HRegionServer,從而讀取到Meta,進而獲取到Meta表中存放的元數據。cdn
Client經過元數據中存儲的信息,訪問對應的HRegionServer,而後掃描所在HRegionServer的Memstore和Storefile來查詢數據。
最後HRegionServer把查詢到的數據響應給Client。
Client也是先訪問zookeeper,找到Meta表,並獲取Meta表元數據。肯定當前將要寫入的數據所對應的HRegion和HRegionServer服務器。
Client向該HRegionServer服務器發起寫入數據請求,而後HRegionServer收到請求並響應。
Client先把數據寫入到HLog,以防止數據丟失。而後將數據寫入到Memstore。若是HLog和Memstore均寫入成功,則這條數據寫入成功。