HBase是一個開源的、面向列(Column-Oriented)、適合存儲海量非結(jié)構(gòu)化數(shù)據(jù)或半結(jié)構(gòu)化數(shù)據(jù)的、具備高可靠性、高性能、可靈活擴展伸縮的、支持實時數(shù)據(jù)讀寫的分布式存儲系統(tǒng)。
存儲在HBase中的表的典型特征:
· 大表(BigTable):一個表可以有上億行,上百萬列
· 面向列:面向列(族)的存儲、檢索與權(quán)限控制
· 稀疏:表中為空(null)的列不占用存儲空間
HBase結(jié)構(gòu)
HBase主要由主備Master進程和多個RegionServer進程組成。
名稱 |
描述 |
Master |
又叫HMaster,在HA模式下,包含主用Master和備用Master。 · 主用Master:負責HBase中RegionServer的管理,包括表的增刪改查;RegionServer的 負載均衡 ,Region分布調(diào)整;Region分裂以及分裂后的Region分配;RegionServer失效后的Region 遷移 等。 · 備用Master:當主用Master故障時,備用Master將取代主用Master對外提供服務(wù)。故障恢復(fù)后,原主用Master降為備用。 |
Client |
Client使用HBase的RPC機制與Master、RegionServer進行通信。Client與Master進行管理類通信,與RegionServer進行數(shù)據(jù)操作類通信。 |
RegionServer |
RegionServer負責提供表數(shù)據(jù)讀寫等服務(wù),是HBase的數(shù)據(jù)處理和計算單元。 RegionServer一般與HDFS集群的DataNode部署在一起,實現(xiàn)數(shù)據(jù)的存儲功能。 |
ZooKeeper集群 |
ZooKeeper為HBase集群中各進程提供分布式協(xié)作服務(wù)。各RegionServer將自己的信息注冊到ZooKeeper中,主用Master據(jù)此感知各個RegionServer的健康狀態(tài)。 |
HDFS集群 |
HDFS為HBase提供高可靠的文件存儲服務(wù),HBase的數(shù)據(jù)全部存儲在HDFS中。 |
HBase原理
HBase數(shù)據(jù)模型
HBase以表的形式存儲數(shù)據(jù),數(shù)據(jù)模型如下圖所示。表中的數(shù)據(jù)劃分為多個Region,并由Master分配給對應(yīng)的RegionServer進行管理。
每個Region包含了表中一段RowKey區(qū)間范圍內(nèi)的數(shù)據(jù),HBase的一張數(shù)據(jù)表開始只包含一個Region,隨著表中數(shù)據(jù)的增多,當一個Region的大小達到容量上限后會分裂成兩個Region。您可以在創(chuàng)建表時定義Region的RowKey區(qū)間,或者在配置文件中定義Region的大小。
名稱 |
描述 |
RowKey |
行鍵,相當于關(guān)系表的主鍵,每一行數(shù)據(jù)的唯一標識。字符串、整數(shù)、二進制串都可以作為RowKey。所有記錄按照RowKey排序后存儲。 |
Timestamp |
每次數(shù)據(jù)操作對應(yīng)的時間戳,數(shù)據(jù)按時間戳區(qū)分版本,每個Cell的多個版本的數(shù)據(jù)按時間倒序存儲。 |
Cell |
HBase最小的存儲單元,由Key和Value組成。Key由row、column family、column qualifier、timestamp、type、MVCC version這6個字段組成。Value就是對應(yīng)存儲的二進制數(shù)據(jù)對象。 |
Column Family |
列族,一個表在水平方向上由一個或多個Column Family組成。一個CF(Column Family)可以由任意多個Column組成。Column是CF下的一個標簽,可以在寫入數(shù)據(jù)時任意添加,因此CF支持動態(tài)擴展,無需預(yù)先定義Column的數(shù)量和類型。HBase中表的列非常稀疏,不同行的列的個數(shù)和類型都可以不同。此外,每個CF都有獨立的生存周期(TTL)??梢灾粚π猩湘i,對行的操作始終是原始的。 |
Column |
列,與傳統(tǒng)的 數(shù)據(jù)庫 類似,HBase的表中也有列的概念,列用于表示相同類型的數(shù)據(jù)。 |
RegionServer數(shù)據(jù)存儲
RegionServer主要負責管理由HMaster分配的Region,RegionServer的數(shù)據(jù)存儲結(jié)構(gòu)如下所示。
名稱 |
描述 |
Store |
一個Region由一個或多個Store組成,每個Store對應(yīng)圖1-2中的一個Column Family。 |
MemStore |
一個Store包含一個MemStore,MemStore緩存客戶端向Region插入的數(shù)據(jù),當RegionServer中的MemStore大小達到配置的容量上限時,RegionServer會將MemStore中的數(shù)據(jù)“flush”到HDFS中。 |
StoreFile |
MemStore的數(shù)據(jù)flush到HDFS后成為StoreFile,隨著數(shù)據(jù)的插入,一個Store會產(chǎn)生多個StoreFile,當StoreFile的個數(shù)達到配置的最大值時,RegionServer會將多個StoreFile合并為一個大的StoreFile。 |
HFile |
HFile定義了StoreFile在文件系統(tǒng)中的存儲格式,它是當前HBase系統(tǒng)中StoreFile的具體實現(xiàn)。 |
HLog |
HLog日志保證了當RegionServer故障的情況下用戶寫入的數(shù)據(jù)不丟失,RegionServer的多個Region共享一個相同的HLog。 |
元數(shù)據(jù)表
元數(shù)據(jù)表是HBase中一種特殊的表,用來幫助Client定位到具體的Region。元數(shù)據(jù)表包括“hbase:meta”表,用來記錄用戶表的Region信息,例如,Region位置、起始RowKey及結(jié)束RowKey等信息。元數(shù)據(jù)表和用戶表的映射關(guān)系如下圖所示。
數(shù)據(jù)操作流程
1. 對HBase進行增、刪、改、查數(shù)據(jù)操作時,HBase Client首先連接ZooKeeper獲得“hbase:meta”表所在的RegionServer的信息(涉及namespace級別修改的,比如創(chuàng)建表、刪除表需要訪問HMaster更新meta信息)。
2. HBase Client連接到包含對應(yīng)的“hbase:meta”表的Region所在的RegionServer,并獲得相應(yīng)的用戶表的Region所在的RegionServer位置信息。
3. HBase Client連接到對應(yīng)的用戶表Region所在的RegionServer,并將數(shù)據(jù)操作命令發(fā)送給該RegionServer,RegionServer接收并執(zhí)行該命令從而完成本次數(shù)據(jù)操作。
HBase操作示例
在華為云MRS集群中,您可以通過連接HBase客戶端實現(xiàn)創(chuàng)建表,往表中插入數(shù)據(jù),修改表,讀取表數(shù)據(jù),刪除表中數(shù)據(jù)以及刪除表的功能。
MRS集群的創(chuàng)建可參考創(chuàng)建集群。
1. 安裝集群客戶端后,登錄客戶端。
cd /opt/client/
source bigdata_env
kinit hbaseuser #集群未開啟Kerberos認證忽略
2. 執(zhí)行命令進入HBase Shell。
hbase shell
hbase:001:0>
hbase:002:0>
3. 在HBase中創(chuàng)建一個表并寫入數(shù)據(jù),例如創(chuàng)建一個學(xué)生信息表。
create 'student_info',{NAME => 'i'}
put 'student_info','2021001','i:name','xiaoming'
put 'student_info','2021001','i:age','15'
put 'student_info','2021001','i:address','shenzhen'
put 'student_info','2021002','i:name','xiaohong'
put 'student_info','2021002','i:age','16'
4. 執(zhí)行命令查詢某學(xué)生的數(shù)據(jù)。
scan'student_info',{STARTROW=>'2021001',STOPROW=>'2021001',COLUMNS=>['i:name','i:address']}
ROW COLUMN+CELL 12005000201 column=i:name, timestamp=2021-06-22T21:32:05.638, value=xiaoming
1 row(s)
5. 刪除某個表。
disable'student_info'
drop 'student_info'
好了,本期云小課就介紹到這里,快去體驗MapReduce(MRS)更多功能吧!猛戳這里