1.什麼是HBase?
HBase是Apache Hadoop的數據庫,能夠對大型數據提供隨機、實時的讀寫訪問。
HBase的目標是存儲並處理大型的數據。
HBase是一個開源的,分佈式的,多版本的,面向列的存儲模型。它存儲的是鬆散型數據。
2.HBase 特性
1高可靠性
2 高效性
3 面向列
4 可伸縮
5 可在廉價PC Server搭建大規模結構化存儲集羣
HBase是Google BigTable的開源實現,其相互對應如下:
Google HBase
文件存儲系統 GFS HDFS
海量數據處理 MapReduce Hadoop MapReduce
協同服務管理 Chubby Zookeeper
HBase關係圖:
HBase位於結構化存儲層,圍繞HBase,各部件對HBase的支持情況:
Hadoop部件 作用
HDFS 高可靠的底層存儲支持
MapReduce 高性能的計算能力
Zookeeper 穩定服務和failover機制
Pig&Hive 高層語言支持,便於數據統計
Sqoop 提供RDBMS數據導入,便於傳統數據庫向HBase遷移
訪問HBase的接口
方式 特點 場合
Native Java API 最常規和高效 Hadoop MapReduce Job並行處理HBase表數據
HBase Shell 最簡單接口 HBase管理使用
Thrift Gateway 利用Thrift序列化支持多種語言 異構系統在線訪問HBase表數據
Rest Gateway 解除語言限制 Rest風格Http API訪問
PigPig Latin六十編程語言處理數據 數據統計
Hive 簡單,SqlLike
hbase 數據模型
關係型數據庫表 (以一個網上訂單爲例)
HBase表
兩種表的關係
組成部件說明:
Row Key: Table主鍵 行鍵Table中記錄按照Row
Key排序
Timestamp: 每次對數據操作對應的時間戳,也即數據的version number
Column Family: 列簇,一個table在水平方向有一個或者多個列簇,列簇可由任意多個Column組成,
列簇支持動態擴展,無須預定義數量及類型,二進制存儲,用戶需自行進行類型轉換
hbase 數據存儲
Table&Region
1. Table隨着記錄增多不斷變大,會自動分裂成多份Splits,成爲Regions
2. 一個region由[startkey,endkey)表示
3. 不同region會被Master分配給相應的RegionServer進行管理
文件按rowkey 分佈在 不同的region 上 (分塊)
在region 上,不同列簇的的分佈在不同的hfile上(分簇)
hfile 每一條數據(列成員)存儲結構 kv:
key: rowkey + 列簇+列成員+時間戳
value :字段值
如何查找一條數據
---兩張特殊表:-ROOT- & .META.
.META. 記錄用戶表的Region信息,同時,.META.也可以有多個region
-ROOT-
記錄.META.表的Region信息,但是,-ROOT-只有一個region
Zookeeper中記錄了-ROOT-表的location
客戶端訪問數據的流程:
Client -> Zookeeper -> -ROOT- -> .META. ->用戶數據表
多次網絡操作,不過client端有cache緩存
HBase 系統架構圖
HLog
HLog(WAL log):WAL意爲write ahead log,用來做災難恢復使用,HLog記錄數據的所有變更,一旦region server 宕機,就可以從log中進行恢復。
HLog文件就是一個普通的Hadoop Sequence File, Sequence File的value是key時HLogKey對象,其中記錄了寫入數據的歸屬信息,除了table和region名字外,還同時包括sequence number和timestamp,timestamp是寫入時間,sequence number的起始值爲0,或者是最近一次存入文件系統中的sequence number。 Sequence File的value是HBase的KeyValue對象,即對應HFile中的KeyValue。