hbase 基礎 —— 概念簡介
阿新 • • 發佈:2020-07-25
1. 簡要介紹
HBase 是一個開源的非關係型分散式資料庫(NoSQL),它參考了谷歌的 BigTable 建模,實現的程式語言為 Java。它是 Apache 軟體基金會的 Hadoop 專案的一部分,運行於 HDFS 檔案系統之上,為 Hadoop 提供類似於 BigTable 規模的服務,可以儲存海量稀疏的資料,並具備一定的容錯性、高可靠性及伸縮性。主要應用場景是實時隨機讀寫超大規模的資料。
2. 資料模型
- 行健(Row Key):表的主鍵,表中的記錄預設按照行健升序排序
- 時間戳(Timestamp):每次資料操作對應的時間戳,可以看作是資料的版本號
- 列族(Column Family)
abc:a1
和abc:a2
兩個列都屬於abc
這個列族。 - 表和區域(Table&Region):當表隨著記錄數不斷增加而變大後,會逐漸分裂成多份,成為區域,一個區域是對錶的水平劃分,不同的區域會被 Master 分配給相應的 RegionServer 進行管理
- 單元格(Cell):表儲存資料的單元。由{行健,列(列族:標籤),時間戳}唯一確定,其中的資料是沒有型別的,以二進位制的形式儲存。
3. 基礎架構
如上圖所示,該架構中只有一個 Master 節點,稱 HMaster,還有多臺 RegionServer 成為 HRegionServer,每個 RegionServer 包含多個 Region。
- HBase 訪問介面:Java,REST,Thrift 等.
- Master:叢集的管理伺服器,為 RegionServer 分配 Region,負責 RegionServer 的負載均衡,處理 schema 更新請求.
- RegionServer:管理 HBase 的資料儲存,維護 Region,處理 IO 請求。
- Zookeeper:保證叢集的高可用性、儲存 Region 的定址入口,並實時監控 RegionServer 的狀態,儲存 HBase 的 Schema。
可以看到,client 訪問 hbase 上資料的過程並不需要 Master 參與(定址訪問 Zookeeper 和 RegionServer,資料讀寫訪問 RegionServer),Master 僅僅維護 Table 和 Region 的元資料資訊,負載很低。
4. Hbase 訪問介面
- Native Java API,最常規和高效的訪問方式,適合 Hadoop MapReduce Job 並行批處理 HBase 表資料。
- HBase Shell,HBase 的命令列工具,最簡單的介面,適合 HBase 管理使用。
- Thrift Gateway,利用 Thrift 序列化技術,支援 C++,PHP,Python 等多種語言,適合其他異構系統線上訪問 HBase 表資料。
- REST Gateway,支援 REST 風格的 Http API 訪問 HBase, 解除了語言限制。
- Pig,可以使用 Pig Latin 流式程式語言來操作 HBase 中的資料,和 Hive 類似,本質最終也是編譯成 MapReduce Job 來處理 HBase 表資料,適合做資料統計。
5. Hbase 儲存格式
HBase 中的所有資料檔案都儲存在 Hadoop HDFS 檔案系統上,主要包括上述提出的兩種檔案型別:
- HFile, HBase 中 KeyValue 資料的儲存格式,HFile 是 Hadoop 的二進位制格式檔案,實際上 StoreFile 就是對 HFile 做了輕量級包裝,即 StoreFile 底層就是 HFile。
- HLogFile,HBase 中 WAL(Write Ahead Log) 的儲存格式,物理上是 Hadoop 的 Sequence File。
6. 應用場景
HBase 的優勢主要在以下幾方面:
- 海量資料儲存
- 快速隨機訪問
- 大量寫操作的應用
常見的應用場景:
- 網際網路搜尋引擎資料儲存(BigTable 要解決的問題)
- 審計日誌系統
- 實時系統
- 訊息中心
- 內容服務系統
233