Hbase

整體架構

Hbase

  1. client負責訪問hbase,並維護cache
  2. zookeeper
    負責master的主備切換;
    負責監控RegionServer的狀態,將Region server的上線和下線信息實時通知給Master
    存儲所有Region尋址入庫;
    保存hbase的schema,包含有哪些table,每個table有哪些列簇
  3. master
    負責分配region到不同的RegionServer,既RegionServer的負載均衡;
    負責處理schema的更新請求
  4. RegionServer
    維護master分配的region,負責對這些region的IO請求(讀寫);
    切分比較大的region

存儲方式

  1. 一個table會按行分爲多個region,最開始只有一個region,在region變大之後,regionserver會對region進行切分;
  2. 一個region有多個store,每個store存儲一個列簇;store由一個在內存中的memstore和0到多個storefile組成。數據寫入時是寫入到memstore中,如果memstore超過了一定閾值,則會新開一個memstore,而原來的memstore則有單獨的進程寫到磁盤上。
  3. 每個storefile以HFile的格式保存到HDFS上。
  4. HFile由多個部分組成,其中比較重要的是DataBlock和DataBlockIndex(每條索引的key是被索引的block的第一條記錄的key)組成,在讀取一個HFile時,會先把DataBlockIndex加載到內存中,定位到具體的DataBlock段,然後再把此段加載到內存中
  5. HLog:每個Region Server維護一個Hlog,而不是每個Region一個。HLog文件就是一個普通的Hadoop Sequence File,Sequence File 的Key是HLogKey對象,HLogKey中記錄了寫入數據的歸屬信息,除了table和region名字外,同時還包括 sequence number和timestamp,timestamp是”寫入時間”,sequence number的起始值爲0,或者是最近一次存入文件系統中sequence number。HLog Sequece File的Value是Hbase的KeyValue對象,即對應HFile中的KeyValue

關鍵流程

  1. region定位
    第一層是保存zookeeper裏面的文件,它持有root region的位置。
    第二層root region是.META.表的第一個region其中保存了.META.z表其它region的位置。通過root region,我們就可以訪問.META.表的數據。
    META.是第三層,它是一個特殊的表,保存了Hbase中所有數據表的region 位置信息。META.表每行保存一個region的位置信息,row key 採用表名+表的最後一樣編碼而成。保存了HRegionInfo(包含了startkey、endkey),服務器的信息
  2. 讀流程
    獲取將要讀取Region的位置信息;
    Client向HRegionServer發出讀請求。
    HRegionServer先從MemStore讀取數據,如未找到,再從StoreFile中讀取。
  3. 寫流程
    數據在更新時首先寫入Log(WAL log)和內存(MemStore)中,MemStore中的數據是排序的,當MemStore累計到一定閾值時,就會創建一個新的MemStore,並 且將老的MemStore添加到flush隊列,由單獨的線程flush到磁盤上,成爲一個StoreFile。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章