1. 程式人生 > 實用技巧 >hbase 基礎 —— 概念簡介

hbase 基礎 —— 概念簡介

1. 簡要介紹

HBase 是一個開源的非關係型分散式資料庫(NoSQL),它參考了谷歌的 BigTable 建模,實現的程式語言為 Java。它是 Apache 軟體基金會的 Hadoop 專案的一部分,運行於 HDFS 檔案系統之上,為 Hadoop 提供類似於 BigTable 規模的服務,可以儲存海量稀疏的資料,並具備一定的容錯性、高可靠性及伸縮性。主要應用場景是實時隨機讀寫超大規模的資料。

2. 資料模型

  • 行健(Row Key):表的主鍵,表中的記錄預設按照行健升序排序
  • 時間戳(Timestamp):每次資料操作對應的時間戳,可以看作是資料的版本號
  • 列族(Column Family)
    :表在水平方向有一個或者多個列族組成,一個列族中可以由任意多個列組成,列族支援動態擴充套件,無需預先定義列的數量以及型別,所有列均以二進位制格式儲存,使用者需要自行進行型別轉換。所有的列族成員的字首是相同的,例如 abc:a1abc:a2 兩個列都屬於 abc 這個列族。
  • 表和區域(Table&Region):當表隨著記錄數不斷增加而變大後,會逐漸分裂成多份,成為區域,一個區域是對錶的水平劃分,不同的區域會被 Master 分配給相應的 RegionServer 進行管理
  • 單元格(Cell):表儲存資料的單元。由{行健,列(列族:標籤),時間戳}唯一確定,其中的資料是沒有型別的,以二進位制的形式儲存。

3. 基礎架構

如上圖所示,該架構中只有一個 Master 節點,稱 HMaster,還有多臺 RegionServer 成為 HRegionServer,每個 RegionServer 包含多個 Region。

  1. HBase 訪問介面:Java,REST,Thrift 等.
  2. Master:叢集的管理伺服器,為 RegionServer 分配 Region,負責 RegionServer 的負載均衡,處理 schema 更新請求.
  3. RegionServer:管理 HBase 的資料儲存,維護 Region,處理 IO 請求。
  4. Zookeeper:保證叢集的高可用性、儲存 Region 的定址入口,並實時監控 RegionServer 的狀態,儲存 HBase 的 Schema。

可以看到,client 訪問 hbase 上資料的過程並不需要 Master 參與(定址訪問 Zookeeper 和 RegionServer,資料讀寫訪問 RegionServer),Master 僅僅維護 Table 和 Region 的元資料資訊,負載很低。

4. Hbase 訪問介面

  1. Native Java API,最常規和高效的訪問方式,適合 Hadoop MapReduce Job 並行批處理 HBase 表資料。
  2. HBase Shell,HBase 的命令列工具,最簡單的介面,適合 HBase 管理使用。
  3. Thrift Gateway,利用 Thrift 序列化技術,支援 C++,PHP,Python 等多種語言,適合其他異構系統線上訪問 HBase 表資料。
  4. REST Gateway,支援 REST 風格的 Http API 訪問 HBase, 解除了語言限制。
  5. Pig,可以使用 Pig Latin 流式程式語言來操作 HBase 中的資料,和 Hive 類似,本質最終也是編譯成 MapReduce Job 來處理 HBase 表資料,適合做資料統計。

5. Hbase 儲存格式

HBase 中的所有資料檔案都儲存在 Hadoop HDFS 檔案系統上,主要包括上述提出的兩種檔案型別:

  1. HFile, HBase 中 KeyValue 資料的儲存格式,HFile 是 Hadoop 的二進位制格式檔案,實際上 StoreFile 就是對 HFile 做了輕量級包裝,即 StoreFile 底層就是 HFile。
  2. HLogFile,HBase 中 WAL(Write Ahead Log) 的儲存格式,物理上是 Hadoop 的 Sequence File。

6. 應用場景

HBase 的優勢主要在以下幾方面:

  1. 海量資料儲存
  2. 快速隨機訪問
  3. 大量寫操作的應用

常見的應用場景:

  1. 網際網路搜尋引擎資料儲存(BigTable 要解決的問題)
  2. 審計日誌系統
  3. 實時系統
  4. 訊息中心
  5. 內容服務系統

233