Outline
- 什么是Hbase
- 為什么需要Hbase
- Hbase的基礎概念
- Hbase的架構
- Hbase的讀寫操作
什么是Hbase
HBase(Hadoop Database)是一種構建在HDFS之上的分布式、面向列(列族)的存儲系統;源自Google發表于的Bigtable論文。HBase是Google Bigtable的克隆版,與Google Bigtable 利用GFS作為其文件存儲系統類
- HDFS為Hbase提供可靠的底層數據存儲服務
- MapReduce為Hbase提供高性能的計算能力
- Zookeeper為Hbase提供穩定服務和Failover機制
Hbase是一個通過大量廉價的機器解決海量數據的高速存儲和讀取的分布式數據庫解決方案。
BigTable發明的原因
搜索是一種定位你所關心信息的行為
為什么需要Hbase?
hdfs和hbase各自使用場景
Hbase是Hadoop平臺下的數據存儲引擎,是一個非關系型數據庫--NoSQL數據庫
HDFS不支持隨機讀寫操作
Hbase和關系型數據庫的比較
Hbase的特點
優點
- 分布式數據庫,海量存儲,易于拓展
- 數據的實時訪問,隨機讀寫
- schemaless data model (“NoSQL”)
- 自我管理數據分片
- 強一致模型(當寫操作返回時,所有的讀將看到一樣的結果)
缺點
不支持SQL,不支持跨行跨表事務,不支持二級索引,而且讀時延大。它不能用在OLTP(On-Line Transaction Processing聯機事務處理過程)業務,比如支付業務的核心流程,但適合存放歷史數據,處理歷史數據的對賬、歷史數據的回溯等需求。
Hbase表的基礎概念
概念名稱 | 解釋 |
---|---|
Table(表) | 類似于傳統數據庫中的表 |
Column Family(列簇) | Table在水平方向有一個或者多個Column |
Row Key(行健) | Table的主鍵;Table中的記錄按照Row Key排序 |
Region | 一定范圍的數據訪問和存儲;HBase數據管理的基本單位 |
Timestamp(時間戳) | 每一行數據均對應一個時間戳;也可以當做版本號。 |
Hbase的架構和基本概念
Hbase是由Client、Zookeeper、Master、HRegionServer、HDFS等幾個組建組成,架構圖如下:
基本概念
概念 | 功能 |
---|---|
Client | 包含了訪問Hbase的接口,并維護cache |
Zookeeper | Hmaster的高可用、RegionServer的監控、元數據的入口以及集群配置的維護等 |
Hmaster | Hmaster的高可用、RegionServer的監控、元數據的入口以及集群配置的維護等 |
Hlog | 每個HRegionServer中都會有一個HLog的實例,存儲在HDFS上 |
HregionServer | HregionServer直接對接用戶的讀寫請求,是真正的“干活”的節點,每個RegionServer為一定數量的region服務 |
Hregion | Hbase中分布式存儲和負載均衡的最小單元,會split,包含多個Store |
Store | Store = MemStore+StoreFile(>=1個) |
MemStore | 內存,對應一個列族,KV |
StoreFile | StoreFile包含一個或多個HFile,以二進制流的形式存儲在HDFS上 |
HFile | 由block組成 |
HDFS | 為Hbase提供最終的底層數據存儲服務,同時為Hbase提供高可用的支持 |
HFile由很多個數據塊(Block)組成,并且有一個固定的結尾塊。其中的數據塊是由一個Header和多個Key-Value的鍵值對組成。在結尾的數據塊中包含了數據相關的索引信息,系統也是通過結尾的索引信息找到HFile中的數據。
Hbase的存儲機制
Hbase的讀寫操作
Hbase寫操作
HBase寫數據流程
1,Client先訪問zookeeper,從meta表獲取相應region信息,然后找到meta表的數據
2,根據namespace、表名和rowkey根據meta表的數據找到寫入數據對應的Hregion信息
3,找到對應的regionserver
4,把數據分別寫到HLog和MemStore上一份
4,MemStore達到一個閾值后則把數據刷成一個StoreFile文件。(若MemStore中的數據有丟失,則可以總HLog上恢復)
5,當多個StoreFile文件達到一定的大小后,會觸發Compact合并操作,合并為一個StoreFile,(這里同時進行版本的合并和數據刪除。)
6,當Storefile大小超過一定閾值后,會把當前的Region分割為兩個(Split),并由Hmaster分配到相應的HRegionServer,實現負載均衡
Hlog
Hlog是Hbase實現WAL(Write ahead log,預寫日志)方式產生的日志信息
當RegionServer出現故障的時候,需要對Hlog進行回放來恢復數據。
保證數據的高可用!!
Hbase讀操作
1,Client先訪問zookeeper,從meta表讀取region的位置,然后讀取meta表中的數據。meta中又存儲了用戶表的region信息。
2,根據namespace、表名和rowkey在meta表中找到對應的region信息
3,找到這個region對應的regionserver
4,查找對應的region
5,先從MemStore找數據,如果沒有,再到StoreFile上讀(為了讀取的效率)。
誰在使用Hbase
參考資料
Hbase技術詳細學習筆記
《HBase實戰》
Hadoop相關知識整理系列之一:HBase基本架構及原理