Hbase的實體存儲 HRegion1
- table中所有的行都是按照row key的字典序排序;
- table在行的方向上分割為多個HRegion;
- HRegion按大小分割的,每個表開始隻有一個HRegion,随着資料增多,HRegion不斷增大,當增大到一個門檻值時候,HRegion就會等分為兩個新的HRegion,之後會有越來越多的Region;
- HRegion是Hbase中分布式存儲和負載均衡的最小單元,不同HRegion分不到不同的HRegionServer上。
Hbase的實體存儲store1
- HRegion雖然是分布式存儲的最小單元,但是并不是存儲的最小單元;
- HRegion有一個或多個Store組成,每個Store儲存一個column family;
- 是以,每個存儲在HDFS上的一個單獨檔案中,空值不會被儲存;
- 每個HRegion又有一個MemStore和0至多個StoreFile組成,StoreFile包含Hfile。
- MemStore存儲在記憶體中,StoreFile存儲在HDFS上。
Hbase基本元件
Client
包含通路Hbase接口,并維護cache來加快Hbase的通路,比如HRegion的位置資訊。
HMaster
- 為HRegionServer配置設定HRegion:比如在HRegion split時配置設定新的HRegion;在HRegionServer退出時遷移其内的HRegion到其他HRegionServer上;
- 負責HRegionServer的負載均衡;
- 發現失效的HRegionServer并重新配置設定其上的HRegion;
- 管理使用者對table的增删改查操作;
- 管理namespace和table的中繼資料;
- 權限控制。
HRegionServer
- HRegionServer維護HRegion,處理對這些HRegion的IO 請求;
- 存放和管理本地HRegion;
- 讀寫HDFS,管理table中的資料;
- HRegionServer負責切分在運作過程中變得過大的HRegion;
- client直接通過HRegionServer讀寫資料
zookeeper
- 通過選舉,保證任何時候,叢集中隻有一個master,master與regionServer啟動時回想zookeeper注冊
- 存儲所有的Region的尋址入口;
- 實時監控RegionServer的上線和下線資訊。并實時通知給master;
- 存儲HBase的schema和table的中繼資料。
協同工作
- HBase client通過RPC方式和HMaster、HRegionServer通信。
- 一個HRegionServer可以存放1000個HRegion;
- 底層table資料存儲于HDFS中,而HRegion所處理的資料盡量和資料所在的DataNode在一起,實作資料的本地化;
- 資料本地化并不是總能是按,比如在HRegion移動(入因split時,)需要等下一次compact才能繼續回到本地化。
HLog
- 每個HRegionServer中都有一個Hlog對象,HLog是一個是按write ahead log的類;
- 在每次使用者操作寫入MEMstore的同時,也會寫一份資料到HLog檔案中;
- HLog檔案定期會滾動出新的,并删除舊的檔案(已經持久化到storeFile中的資料)
資料恢複恢複過程
- 當HRegionServer意外終止後,HMAster會通過zookeeper感覺到;
- HMaster首先會處理遺留的HLog檔案,将其中不同region的Log資料進行拆分,分别放到相應region的目錄下
- 然後在将失效的region重新配置設定,領取導緻和諧region的HRegionServer在loadregion的過程中,會發現有曆史Hlog需要處理
- 是以會replay hlog中的資料到MEMStore中,然後flush到storefiles,完成資料恢複。
無master過程中,資料讀取仍照常進行;
無master過程中,region切分、負載均衡等無法進行;
hbase寫操作流程:
- client通過zookeeper的排程,向HRegionServer發送寫資料的請求,在HRegion中寫資料;
- 資料寫到HRegion的MEMStore,直到MEMStore達到預設的門檻值;
- 将MEMStore中資料會被flush成一個storeFile;
- 随着storeFile的數量的增多,當達到一定的門檻值會觸發compact合并操作,将多個storeFile合并成一個storeFile,同時把版本更新和資料删除;
- storeFile通過不斷的compact合并,逐漸形成越來越多越大的storeFile;
- 單個storeFile大小超過一定的門檻值,會觸發split操作,把目前HRegion split成兩個新的HRegion,老的HRegion就會下線,新生成的2個HRegion會被HMaster配置設定到其他的HRegionServer上,是的1個HRegion的壓力分到2個HRegion上。
Hbase讀操作:
- client通路zookeeper,檢視ROOT表,擷取Meta表的資訊;
- 從meta表中查找,擷取存放,目标資料的HRegion資訊,進而找到HRegionServer的資訊;
- 通過HRegionServer找到相應的資料資訊
- HRegionServer的記憶體分為兩部分MEMStore、blockcache;MEMStore主要用于寫操作,blockcache隻要用于讀操作,請求先到memstore中數去資料,如果沒有再到blockcache中讀取,在沒有就會到storeFile中讀取,并把讀取的資料資訊放到blockcache中。