HBase介紹和架構

說明

  • hbase是大數據平臺上開源的、面向列的分佈式數據庫,技術源於Fay Chang撰寫的Google論文BigTable:一個結構化數據的分佈式存儲系統。是一種NoSql數據庫。
  • hbase依賴hdfs存儲文件,必須構建在hadoop平臺上。
  • hbase 內置zookeeper實行分佈式同步

特點

  • 強讀寫一致,不是“最終一致性”的數據存儲,這使得它非常適合高速的計算聚合
  • 自動分片,通過Region分散在集羣中,當行數增長的時候,Region也會自動的切分和再分配
  • 自動的故障轉移
  • Hadoop/HDFS集成,和HDFS開箱即用,不用太麻煩的銜接
  • 豐富的“簡潔,高效”API,Thrift/REST API,Java API
  • 塊緩存,布隆過濾器,可以高效的列查詢優化
  • 操作管理,Hbase提供了內置的web界面來操作,還可以監控JMX指標
  • HBase 是一個稀疏的、分佈式、持久、多維、排序的映射,它以行鍵(row key),列鍵(column key)和時間戳(timestamp)爲索引。
  • Hbase在存儲數據的時候,有兩個SortedMap,首先按照rowkey進行字典排序,然後再對Column進行字典排序。SortedMap<RowKey,List<SortedMap<Column,List<Value,Timestamp>>>>

hbase使用場景

  1. 數據量足夠大,如果有十億及百億行數據,Hbase是一個很好的選擇,如果只有幾百萬行甚至不到的數據量,RDBMS(mysql、oracle)是一個很好的選擇。因爲數據量小真正能工作的機器量少,剩餘的機器都處於空閒狀態
  2. 如果不需要輔助索引和靜態類型的列、事務等特性,已使用RDBMS的系統要切換到Hbase,需要重新設計系統
  3. 保證硬件資源足夠,每個HDFS集羣在少於5個節點的時候,都不能表現的很好。因爲HDFS默認的複製數量是3,再加上一個NameNode。

Hbase架構

簡單架構

在這裏插入圖片描述

  • Zookeeper,作爲分佈式的協調。RegionServer也會把自己的信息寫到ZooKeeper中。
  • HDFS是Hbase運行的底層文件系統
  • RegionServer,理解爲數據節點,負責存儲數據
  • RegionServer要實時的向Master報告信息。Master知道全局的RegionServer運行情況,可以控制RegionServer的故障轉移和Region的切分。

架構細化

在這裏插入圖片描述

  • HMaster是Master Server的實現,負責監控集羣中的RegionServer實例,同時是所有metadata(元數據)改變的接口,在集羣中,通常運行在NameNode上面
    • HMasterInterface暴露的接口,Table(createTable, modifyTable, removeTable, enable, disable),ColumnFamily (addColumn, modifyColumn, removeColumn),Region (move, assign, unassign)
    • Master運行的後臺線程:LoadBalancer線程,控制region來平衡集羣的負載。CatalogJanitor線程,週期性的檢查hbase:meta表
  • HRegionServer是RegionServer的實現,服務和管理Regions,集羣中RegionServer運行在DataNode
    • HRegionRegionInterface暴露接口:Data (get, put, delete, next, etc.),Region (splitRegion, compactRegion, etc.)
    • RegionServer後臺線程:CompactSplitThread,MajorCompactionChecker,MemStoreFlusher,LogRoller
  • HRegion代表table,Region有多個Store(列簇),Store有一個Memstore和多個StoreFiles(HFiles),StoreFiles的底層是Block。

存儲設計

  • 在Hbase中,表被分割成多個更小的塊然後分散的存儲在不同的服務器上,這些小塊叫做Regions,存放Regions的地方叫做RegionServer。Master進程負責處理不同的RegionServer之間的Region的分發。在Hbase實現中HRegionServer和HRegion類代表RegionServer和Region。HRegionServer除了包含一些HRegions之外,還處理兩種類型的文件用於數據存儲
    • HLog 預寫日誌文件,也叫做WAL(write-ahead log)
      • MasterProcWAL:HMaster記錄管理操作,比如解決衝突的服務器,表創建和其它DDLs等操作到它的WAL文件中,這個WALs存儲在MasterProcWALs目錄下,它不像RegionServer的WALs,HMaster的WAL也支持彈性操作,就是如果Master服務器掛了,其它的Master接管的時候繼續操作這個文件
      • WAL記錄所有的Hbase數據改變,如果一個RegionServer在MemStore進行FLush的時候掛掉了,WAL可以保證數據的改變被應用到。如果寫WAL失敗了,那麼修改數據的完整操作就是失敗的。
      • 通常情況,每個RegionServer只有一個WAL實例。在2.0之前,WAL的實現叫做HLog
      • WAL位於/hbase/WALs/目錄下
      • MultiWAL: 如果每個RegionServer只有一個WAL,由於HDFS必須是連續的,導致必須寫WAL連續的,然後出現性能問題。MultiWAL可以讓RegionServer同時寫多個WAL並行的,通過HDFS底層的多管道,最終提升總的吞吐量,但是不會提升單個Region的吞吐量
    • HFile 真實的數據存儲文件,HFile是Hbase在HDFS中存儲數據的格式,它包含多層的索引,這樣在Hbase檢索數據的時候就不用完全的加載整個文件。索引的大小(keys的大小,數據量的大小)影響block的大小,在大數據集的情況下,block的大小設置爲每個RegionServer 1GB也是常見的。
      • HFile生成方式
        • 開始HFile中並沒有任何Block,數據還存在於MemStore中。
        • Flush發生時,創建HFile Writer,第一個空的Data Block出現,初始化後的Data Block中爲Header部分預留了空間,Header部分用來存放一個Data Block的元數據信息。
        • 而後,位於MemStore中的KeyValues被一個個append到位於內存中的第一個Data Block中:
        • :如果配置了Data Block Encoding,則會在Append KeyValue的時候進行同步編碼,編碼後的數據不再是單純的KeyValue模式。Data Block Encoding是HBase爲了降低KeyValue結構性膨脹而提供的內部編碼機制。 在這裏插入圖片描述

讀寫簡單流程

  • 讀寫都先請求zookeeper獲取meta region位置,再從meta region位置,讀取meta region獲得數據存儲region,最後實現數據讀寫。 在這裏插入圖片描述

region拆分策略

  • 在設置hbase.hregion.max.filesize(默認10G)值時,各拆分算法執行細節。
    • IncreasingToUpperBoundRegionSplitPolicy,0.94默認region split策略。根據公式min(r^2*flushSize,maxFileSize)確定split的maxFileSize,其中r爲在線region個數,maxFileSize由hbase.hregion.max.filesize指定。
    • ConstantSizeRegionSplitPolicy,僅僅當region大小超過常量值(hbase.hregion.max.filesize大小)時,才進行拆分。
    • DelimitedKeyPrefixRegionSplitPolicy,保證以分隔符前面的前綴爲splitPoint,保證相同RowKey前綴的數據在一個Region中
    • KeyPrefixRegionSplitPolicy,保證具有相同前綴的row在一個region中(要求設計中前綴具有同樣長度)。指定rowkey前綴位數劃分region,通過讀取table的prefix_split_key_policy.prefix_length屬性,該屬性爲數字類型,表示前綴長度,在進行split時,按此長度對splitPoint進行截取。此種策略比較適合固定前綴的rowkey。當table中沒有設置該屬性,或其屬性不爲Integer類型時,指定此策略效果等同與使用IncreasingToUpperBoundRegionSplitPolicy。

總結

hbase是大數據領域重要的高效實時查詢數據庫,肩負着實時數據響應的職責,在海量T、P級數據的快速查詢上,有着不可替代的地位。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章