Hbase 之 HBase 的整體架構

HBase 系統架構圖

組成部件說明 
  Client: 
  使用HBase RPC機制與HMaster和HRegionServer進行通信 
  Client與HMaster進行通信進行管理類操作 
  Client與HRegionServer進行數據讀寫類操作 
  Zookeeper: 
  Zookeeper Quorum存儲-ROOT-表地址、HMaster地址 
  HRegionServer把自己以Ephedral方式註冊到Zookeeper中,HMaster隨時感知各個HRegionServer的健康狀況 
  Zookeeper避免HMaster單點問題 
  HMaster: 
  HMaster沒有單點問題,HBase中可以啓動多個HMaster,通過Zookeeper的Master Election機制保證總有一個Master在運行 
  主要負責Table和Region的管理工作: 
  1 管理用戶對錶的增刪改查操作 
  2 管理HRegionServer的負載均衡,調整Region分佈 
  3 Region Split後,負責新Region的分佈 
  4 在HRegionServer停機後,負責失效HRegionServer上Region遷移 
  HRegionServer: 
  HBase中最核心的模塊,主要負責響應用戶I/O請求,向HDFS文件系統中讀寫數據

  

  HRegionServer管理一些列HRegion對象; 
  每個HRegion對應Table中一個Region,HRegion由多個HStore組成; 
  每個HStore對應Table中一個Column Family的存儲; 
  Column Family就是一個集中的存儲單元,故將具有相同IO特性的Column放在一個Column Family會更高效

  HStore: 
  HBase存儲的核心。由MemStore和StoreFile組成。 
  MemStore是Sorted Memory Buffer。用戶寫入數據的流程:

  

  Client寫入 -> 存入MemStore,一直到MemStore滿 -> Flush成一個StoreFile,直至增長到一定閾值 -> 觸發Compact合併操作 -> 多個StoreFile合併成一個StoreFile,同時進行版本合併和數據刪除 -> 當StoreFiles Compact後,逐步形成越來越大的StoreFile -> 單個StoreFile大小超過一定閾值後,觸發Split操作,把當前Region Split成2個Region,Region會下線,新Split出的2個孩子Region會被HMaster分配到相應的HRegionServer上,使得原先1個Region的壓力得以分流到2個Region上。
由此過程可知,HBase只是增加數據,有所得更新和刪除操作,都是在Compact階段做的,所以,用戶寫操作只需要進入到內存即可立即返回,從而保證I/O高性能。

  HLog 
  引入HLog原因: 
  在分佈式系統環境中,無法避免系統出錯或者宕機,一旦HRegionServer意外退出,MemStore中的內存數據就會丟失,引入HLog就是防止這種情況 
  工作機制: 
  每個HRegionServer中都會有一個HLog對象,HLog是一個實現Write Ahead Log的類,每次用戶操作寫入Memstore的同時,也會寫一份數據到HLog文件,HLog文件定期會滾動出新,並刪除舊的文件(已持久化到StoreFile中的數據)。當HRegionServer意外終止後,HMaster會通過Zookeeper感知,HMaster首先處理遺留的HLog文件,將不同region的log數據拆分,分別放到相應region目錄下,然後再將失效的region重新分配,領取到這些region的HRegionServer在Load Region的過程中,會發現有歷史HLog需要處理,因此會Replay HLog中的數據到MemStore中,然後flush到StoreFiles,完成數據恢復。

  HBase存儲格式 
  HBase中的所有數據文件都存儲在Hadoop HDFS文件系統上,格式主要有兩種: 
  1 HFile HBase中KeyValue數據的存儲格式,HFile是Hadoop的二進制格式文件,實際上StoreFile就是對HFile做了輕量級包裝,即StoreFile底層就是HFile 
  2 HLog File,HBase中WAL(Write Ahead Log) 的存儲格式,物理上是Hadoop的Sequence File

  HFile

  

  圖片解釋: 
  HFile文件不定長,長度固定的塊只有兩個:Trailer和FileInfo 
  Trailer中指針指向其他數據塊的起始點 
  File Info中記錄了文件的一些Meta信息,例如:AVG_KEY_LEN, AVG_VALUE_LEN, LAST_KEY, COMPARATOR, MAX_SEQ_ID_KEY等 
  Data Index和Meta Index塊記錄了每個Data塊和Meta塊的起始點 
  Data Block是HBase I/O的基本單元,爲了提高效率,HRegionServer中有基於LRU的Block Cache機制 
  每個Data塊的大小可以在創建一個Table的時候通過參數指定,大號的Block有利於順序Scan,小號Block利於隨機查詢 
  每個Data塊除了開頭的Magic以外就是一個個KeyValue對拼接而成, Magic內容就是一些隨機數字,目的是防止數據損壞

  HFile裏面的每個KeyValue對就是一個簡單的byte數組。這個byte數組裏麪包含了很多項,並且有固定的結構。

  

  KeyLength和ValueLength:兩個固定的長度,分別代表Key和Value的長度 
  Key部分:Row Length是固定長度的數值,表示RowKey的長度,Row 就是RowKey 
  Column Family Length是固定長度的數值,表示Family的長度 
  接着就是Column Family,再接着是Qualifier,然後是兩個固定長度的數值,表示Time Stamp和Key Type(Put/Delete) 
  Value部分沒有這麼複雜的結構,就是純粹的二進制數據

  HLog File

  

  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 。

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