NoSQL的存儲架構——HBase

  1. HBase的分佈式存儲架構

HBase的部署遵從主從模式,通常有一個主機和一組從機,俗稱range server。啓動時,主機會給每臺range server 分配一組區間,每個區間包含一個行記錄的有序集合,行記錄有行健唯一標識。如果存儲在區間中的行記錄數量超過了配置的閾值,區間就會分割成兩個新的區間,行記錄在這兩個新的區間之間分配。

每個區間都有內存存儲(緩存)和WAL(預寫日誌)。WAL是在數據庫系統中提供原子性和持久性的一族技術。客戶端程序能決定是否開啓WAL,關閉能提升性能,但是在出現錯誤時會降低可靠性和恢復能力。開啓後,數據寫入區間前會先寫日誌,然後寫入區間的內存存儲。內存存儲填滿後,數據會栓如磁盤,持久化到底層分佈式存儲中。

如果使用了類似HDFS(hadoop distributed filesystem,hadoop分佈式文件系統)的分佈式文件系統,那麼主從模式還會擴展到底層存儲架構。HDFS中,一個namenode和一組datanode形成的結構非常類似於HBase等列數據庫中主服務器和range server的配置。這種情況下,HBase的每個列族的物理存儲文件最終會落到HDFS的datanode上。HBase利用文件系統API避免與HDFS強耦合,是中介。這個API還支持HBase無縫的集成其他類型的文件系統,比如HBase可以使用CloudStore,它的前身是KFS(kosmos filesystem),而不是HDFS。

除了利用分佈式文件系統做存儲,HBase集羣還利用到了外部配置與協調工具。google中是chubby,hadoop中我們稱爲ZooKeeper。Hytertable也有一個類似的基礎設施部件,名爲Hyterspace。ZooKeeper集羣通常用作HBase集羣的前端,負責處理新客戶和管理配置。

第一次使用HBase時,客戶端先通過ZooKeeper訪問兩個目錄-ROOT-和.META。這些目錄維護着所有區間的狀態和位置信息。

  1. -ROOT-維護和所有.META表相關的信息。
  2. .META文件維護和用戶空間表(保存數據的表)相關的信息。

客戶端訪問某行數據時:

  1. 訪問ZooKeeper要-ROOT-的目錄。
  2. 從-ROOT-的目錄定位到行記錄的.META目錄(提供了和行記錄有關的所有區間的明細)。
  3. 用這個信息訪問行記錄。

當客戶端下一次在訪問同一行數據時,不會再重複。因爲有緩存,可以直接訪問region server。只有在區間緩存過期,區間被禁用或者區間無法訪問的情況下才會重複查找步驟。

每個區間通常用存儲的最小行鍵來標識,所以查找行記錄非常簡單,檢查行鍵大於等於區間標識符就可。




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