華為云計算 云知識 【云小課】EI第25課 MRS基礎(chǔ)入門之HBase組件介紹
【云小課】EI第25課 MRS基礎(chǔ)入門之HBase組件介紹

HBase是一個開源的、面向列(Column-Oriented)、適合存儲海量非結(jié)構(gòu)化數(shù)據(jù)或半結(jié)構(gòu)化數(shù)據(jù)的、具備高可靠性、高性能、可靈活擴展伸縮的、支持實時數(shù)據(jù)讀寫的分布式存儲系統(tǒng)。

存儲在HBase中的表的典型特征:

·         大表(BigTable):一個表可以有上億行,上百萬列

·         面向列:面向列(族)的存儲、檢索與權(quán)限控制

·         稀疏:表中為空(null)的列不占用存儲空間

云小課logo.png

HBase結(jié)構(gòu)

HBase主要由主備Master進程和多個RegionServer進程組成。

image010.png

 

名稱

描述

Master

又叫HMaster,在HA模式下,包含主用Master和備用Master。

·         主用Master:負責HBaseRegionServer的管理,包括表的增刪改查;RegionServer 負載均衡 ,Region分布調(diào)整;Region分裂以及分裂后的Region分配;RegionServer失效后的Region 遷移 等。

·         備用Master:當主用Master故障時,備用Master將取代主用Master對外提供服務(wù)。故障恢復(fù)后,原主用Master降為備用。

Client

Client使用HBaseRPC機制與MasterRegionServer進行通信。ClientMaster進行管理類通信,與RegionServer進行數(shù)據(jù)操作類通信。

RegionServer

RegionServer負責提供表數(shù)據(jù)讀寫等服務(wù),是HBase的數(shù)據(jù)處理和計算單元。

RegionServer一般與HDFS集群的DataNode部署在一起,實現(xiàn)數(shù)據(jù)的存儲功能。

ZooKeeper集群

ZooKeeperHBase集群中各進程提供分布式協(xié)作服務(wù)。各RegionServer將自己的信息注冊到ZooKeeper中,主用Master據(jù)此感知各個RegionServer的健康狀態(tài)。

HDFS集群

HDFSHBase提供高可靠的文件存儲服務(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)建表時定義RegionRowKey區(qū)間,或者在配置文件中定義Region的大小。

 

image012.png

名稱

描述

RowKey

行鍵,相當于關(guān)系表的主鍵,每一行數(shù)據(jù)的唯一標識。字符串、整數(shù)、二進制串都可以作為RowKey。所有記錄按照RowKey排序后存儲。

Timestamp

每次數(shù)據(jù)操作對應(yīng)的時間戳,數(shù)據(jù)按時間戳區(qū)分版本,每個Cell的多個版本的數(shù)據(jù)按時間倒序存儲。

Cell

HBase最小的存儲單元,由KeyValue組成。Keyrowcolumn family、column qualifier、timestamp、type、MVCC version6個字段組成。Value就是對應(yīng)存儲的二進制數(shù)據(jù)對象。

Column Family

列族,一個表在水平方向上由一個或多個Column Family組成。一個CFColumn Family)可以由任意多個Column組成。ColumnCF下的一個標簽,可以在寫入數(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)如下所示。

image014.png

名稱

描述

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ù)flushHDFS后成為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)系如下圖所示。

image016.png

數(shù)據(jù)操作流程

image018.png

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'

image020.png好了,本期云小課就介紹到這里,快去體驗MapReduce(MRS)更多功能吧!猛戳這里