NO IMAGE
Hbase是Apach基金會Hadoop專案的一部分,執行與HDFS檔案系統之上,因此可以容錯的儲存海量稀疏資料
特點:
  1. 高可靠
  2. 高併發讀寫
  3. 面向列
  4. 可伸縮
  5. 易構建
行儲存
    優點:寫入一次性,保持資料完整性
    缺點:資料讀取過程中產生冗餘資料
列儲存
    優點:讀取過程不產生冗餘資料,特別適合對資料完整性不高的大資料領域
    缺點:寫入效率差,保證資料完整性方面差
Hbase一張表又一個或多個Hregion組成,記錄之間按照行鍵的字典排序(每條資料也是按照順序有序的進行排序,為了檢索更快,更高效)
區域一開始只有一個,按照大小分割,隨著表不斷增大,增大到一個閥值(10G),Hregion就會一分為二,分為一個新的Hregion,區域是整個叢集裡面資料分佈的最小一個單位
Hbase是按照行鎖定,RegionServer管理著不同的地區,RegionServer主要是管理著使用者的讀和寫,這些資料是在HDFS存的
HRegion 相當於是對著地區一個封裝
按照RoWky範圍分的:region“Hregion”RegionServer
按照列簇(Columc Family)“多個HStore
HStor“memStore(寫快取) HFiles(均為有序的鍵值)
HFiles“HDFS
Hbase系統架構:
  1. 客戶端:訪問Hbase介面,維護快取加速區域伺服器訪問
  2. 主負載均衡,分配Region到RegionServer
  3. RegionServer維護區域負責區域的IO
  4. Zookeeper 保證叢集只有一個Master 儲存所有Region(Root)入口地址,實時監控Region Server的上下線
HMaster功能(主):
  1.  負載均衡,管理和分配HRegion
  2. DDL 增刪改
  3. 類似NameNode管理一些後設資料(table的結構後設資料)
  4. ACL許可權控制
HRegionServer(從):
  1. 管理和存放本地的HRegion
  2. 讀寫HDFS,提供IO操作
  3. 本地化:HRegion的資料儘量和資料所屬的DataNode在一塊,但是這個本地化不能夠總是滿足和實現
Hbase 兩張特殊的表,這兩張表存在於Zookeeper上
  1. -Root表記錄了》Meta表的region資訊
  2. -Meta表,該表不會做分裂,記錄了使用者表的Region資訊,.Meta表可以有多個region
定址流程:
從0.96之後去掉了-Root表,所以流程是:從Zookeeper(/hbase/meta-region-server)中獲取hbase.meta的位置(HRegionServer的位置),快取該位置資訊,然後從HRegionServer中查詢使用者Table對應請求的Rowkey所在的HregionServer,快取該位置資訊,最後從查詢到HRegionServer中讀取Row
Hbase 讀取流程:
    掃描的依次順序;BlockCache,MemStore,StoreFile(HFile)
Hbase 合併(合併的本質是:使用短時間的IO消耗以及頻寬消耗換取後續查詢的低延遲):
  1. region合併:儘量把小的region合併到一個大的,理想情況下每個region的請求量一樣(不能保證資料量一樣)
  2. storefile合併:針對Hstorefile
    1. Minor:目的是為了保證服務不中斷,但是合併不徹底,
    2. Major:目的是合併的更徹底,但是服務存在中斷風險
Hbase 容錯:
    Zookeeper 容錯
    Mater 容錯
    RegionServer容錯
  1.     預寫功能(WAL):定時向Zookeeper彙報心跳,如果一旦該時間內未出現心跳反饋,Master將該RegionServer的region重新分配給其它RegionServer,失效的伺服器上預寫日誌由自主伺服器進行分割並派送給新的RegionServer,這是Hbase的RegionServer在處理資料插入和刪除過程中用來記錄操作內容的一種日誌,每次put,delete等一條記錄時,首先將其資料寫入到RegionServer對應的HLog檔案過程。這個日誌是大家共享的一片區域,不存在在RegionServer上,存在於HDFS上
Hbase寫入資料的流程:
    當客戶端發起一個put請求,首先會查詢Hbase:meta表應該找哪個HregionServer,找到對應的HRegionServer將put請求傳送給它,在HRegionServer中先把put操作寫入WAL日誌中(Flash到磁碟),寫完日誌,HRegionServer根據put的表名和Rowkey找到對應的HRegion,然後根據Hregion中的Column Family 找到HStore,並將put寫入到該HStore 中的MemStore中,寫入成功後返回通知客戶端。
每次往Hbase 入資料的時候,首先是寫WAL日誌,只有當WAL日誌寫入成功後,客戶端才會被告訴提交資料成功。有個疑問:日誌寫成功就算成功,沒錯,hbase後臺通過非同步的方式,進行資料落地