大數據隨筆(六):分佈式數據庫HBase

HBase簡介

HBase是一種分佈式數據庫,可以用來存儲結構化和半結構化的鬆散數據。通過水平擴展,可以讓數千臺服務器去存儲海量數據。

用HBase的原因:HDFS+MapReduce是面向離線的數據處理,無法滿足實時要求;傳統關係型數據庫擴展有瓶頸,現在數據結構經常變化,關係型數據庫往往模式確定後就很難變更了。

HBase的訪問接口:
在這裏插入圖片描述

HBase數據模型

在這裏插入圖片描述
列族可以動態擴展。更新操作會保留歷史版本。存儲以列族爲基本單元,是面向列的存儲,不同列族存儲在不同的文件裏。
在這裏插入圖片描述
上圖可見,不同列族分開存儲。
在這裏插入圖片描述
面向列的存儲方便分析,面向行的存儲方便事務操作。

HBase實現原理

功能組件:
在這裏插入圖片描述
客戶端不依賴master去取數據,而是直接去region服務器取。
在這裏插入圖片描述
1個region一般1到2個G,同一個region不會拆分到不同的region服務器上。
在這裏插入圖片描述
root表只有一個region。
在這裏插入圖片描述
爲了加速尋址,客戶端會緩存位置信息。

HBase運行機制

整體架構
在這裏插入圖片描述
在這裏插入圖片描述

Master:

  • 負責不同region服務器的負載均衡
  • 對錶增刪改查
  • 負責調整分裂、合併後region的分佈
  • 負責重新分配故障失效的region服務器

Region:

  • 一個region服務器包含多個region。多個region共用一個HLog日誌
  • 一個region中每個列族會單獨構成一個store
  • MemStore是用來寫緩存的
  • HBase裏的StoreFile對應HDFS裏的HFile

寫入數據:先寫日誌,再寫到緩存中去。
在這裏插入圖片描述
讀數據:先去緩存裏找,再去StoreFile裏找。
在這裏插入圖片描述
緩存的刷新:

  • 系統週期性地把MemStore緩存裏的內容刷寫到磁盤的StoreFile文件中,清空緩存,並在HLog裏面寫入一個標記
  • 每次刷寫都生成一個新的StoreFile文件,因此每個Store包含多個StoreFile文件
  • 每個region服務器都有一個自己的HLog文件,每次啓動都檢查該文件,確認最近一次執行緩存刷新操作之後是否發生新的寫入操作,如果發現更新,則先寫入MemStore,再刷寫寫到StoreFile,最後刪除舊的HLog文件,開始爲用戶提供服務。

StoreFile的合併與分裂:
StoreFile數目達到閾值合併,StoreFile大小超過閾值分裂。
在這裏插入圖片描述

HBase應用解決方案

  • 把時間靠近的數據存在一起:把時間戳(64位長整型)加入行鍵。Long.MAX_VALUE-timestamp作爲行鍵,最新的排在最前面。
  • 提升讀寫性能:設置HColumnDescriptor.setlnMemory選項位true,把相關表放在緩存中。
  • 節省存儲空間:設置HColumnDescriptor.setMaxVersionMaxVersions爲1,只保留最新版本。
  • 節省空間:設置TimeToLive參數,超過生命週期就刪除。setTimeToLive()
  • 可視化性能監視:Master-status,Ganglia,OpenTSDB,Ambari
  • 通過SQL來管理HBase:Hive和Phoenix
  • 二級索引:Hindex,Redis,Solr
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章