第五課 Hbase存儲詳解

Hbase是bigtable的開源山寨版本。是建立的hdfs之上,提供高可靠性、高性能、列存儲、可伸縮、實時讀寫的數(shù)據(jù)庫系統(tǒng)。

它介于nosql和RDBMS之間,僅能通過主鍵(row key)和主鍵的range來檢索數(shù)據(jù),僅支持單行事務。主要用來存儲非結構化和半結構化的松散數(shù)據(jù)。

與hadoop一樣,Hbase目標主要依靠橫向擴展,通過不斷增加廉價的商用服務器,來增加計算和存儲能力。

Hbase中的表一般有這樣的特點:

1 大:一個表可以有上億行,上百萬列

2 面向列:面向列(族)的存儲和權限控制,列(族)獨立檢索。

3 稀疏:對于為空(null)的列,并不占用存儲空間,因此,表可以設計的非常稀疏。

下面一幅圖是Hbase在Hadoop Ecosystem中的位置。

image.png

二、邏輯視圖

Hbase以表的形式存儲數(shù)據(jù)。表有行和列組成。列劃分為若干個列族(row family)


image.png

Row Key

與nosql數(shù)據(jù)庫們一樣,row key是用來檢索記錄的主鍵。訪問Hbase table中的行,只有三種方式:

1 通過單個row key訪問

2 通過row key的range

3 全表掃描

Row key行鍵 (Row key)可以是任意字符串(最大長度是 64KB,實際應用中長度一般為 10-100bytes),在Hbase內(nèi)部,row key保存為字節(jié)數(shù)組。

存儲時,數(shù)據(jù)按照Row key的字典序(byte order)排序存儲。設計key時,要充分排序存儲這個特性,將經(jīng)常一起讀取的行存儲放到一起。

注意:

字典序?qū)nt排序的結果是1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,…,9,91,92,93,94,95,96,97,98,99。要保持整形的自然序,行鍵必須用0作左填充。

行的一次讀寫是原子操作 (不論一次讀寫多少列)。

列族

Hbase表中的每個列,都歸屬與某個列族。列族是表的chema的一部分(而列不是),必須在使用表之前定義。列名都以列族作為前綴。例如courses:history,courses:math

都屬于courses 這個列族。

時間戳

Hbase中通過row和columns確定的為一個存貯單元稱為cell。每個 cell都保存著同一份數(shù)據(jù)的多個版本。版本通過時間戳來索引。時間戳的類型是 64位整型。時間戳可以由Hbase(在數(shù)據(jù)寫入時自動 )賦值,此時時間戳是精確到毫秒的當前系統(tǒng)時間。時間戳也可以由客戶顯式賦值。如果應用程序要避免數(shù)據(jù)版本沖突,就必須自己生成具有唯一性的時間戳。每個 cell中,不同版本的數(shù)據(jù)按照時間倒序排序,即最新的數(shù)據(jù)排在最前面。

Cell

由{row key, column, version} 唯一確定的單元。cell中的數(shù)據(jù)是沒有類型的,全部是字節(jié)碼形式存貯。

三、物理存儲

1 已經(jīng)提到過,Table中的所有行都按照row key的字典序排列。

2 Table 在行的方向上分割為多個Hregion。

image.png

3 region按大小分割的,每個表一開始只有一個region,隨著數(shù)據(jù)不斷插入表,region不斷增大,當增大到一個閥值的時候,Hregion就會等分會兩個新的Hregion。當table中的行不斷增多,就會有越來越多的Hregion。

image.png

4 HRegion是Hbase中分布式存儲和負載均衡的最小單元。最小單元就表示不同的Hregion可以分布在不同的HRegion server上。但一個Hregion是不會拆分到多個server上的。


image.png
image.png

5 HRegion雖然是分布式存儲的最小單元,但并不是存儲的最小單元。

事實上,HRegion由一個或者多個Store組成,每個store保存一個columns family。

每個Strore又由一個memStore和0至多個StoreFile組成。如圖:

StoreFile以HFile格式保存在HDFS上。

image.png

Hbase基本組件說明:

Client

?包含訪問HBase的接口,并維護cache來加快對HBase的訪問,比如region的位置信息

Master

?為Region server分配region

?負責Region server的負載均衡

?發(fā)現(xiàn)失效的Region server并重新分配其上的region

?管理用戶對table的增刪改查操作

Region Server

?Regionserver維護region,處理對這些region的IO請求

?Regionserver負責切分在運行過程中變得過大的region

Zookeeper作用

?通過選舉,保證任何時候,集群中只有一個master,Master與RegionServers 啟動時會向ZooKeeper注冊

?存貯所有Region的尋址入口

?實時監(jiān)控Region server的上線和下線信息。并實時通知給Master

?存儲HBase的schema和table元數(shù)據(jù)

?默認情況下,HBase 管理ZooKeeper 實例,比如, 啟動或者停止ZooKeeper

?Zookeeper的引入使得Master不再是單點故障

image.png

Write-Ahead-Log(WAL)HLog

image.png

該機制用于數(shù)據(jù)的容錯和恢復:

每個HRegionServer中都有一個HLog對象,HLog是一個實現(xiàn)Write Ahead Log的類,在每次用戶操作寫入MemStore的同時,也會寫一份數(shù)據(jù)到HLog文件中(HLog文件格式見后續(xù)),HLog文件定期會滾動出新的,并刪除舊的文件(已持久化到StoreFile中的數(shù)據(jù))。當HRegionServer意外終止后,HMaster會通過Zookeeper感知到,HMaster首先會處理遺留的 HLog文件,將其中不同Region的Log數(shù)據(jù)進行拆分,分別放到相應region的目錄下,然后再將失效的region重新分配,領取 到這些region的HRegionServer在Load Region的過程中,會發(fā)現(xiàn)有歷史HLog需要處理,因此會Replay HLog中的數(shù)據(jù)到MemStore中,然后flush到StoreFiles,完成數(shù)據(jù)恢復

HBase容錯性
Master容錯:Zookeeper重新選擇一個新的Master
?無Master過程中,數(shù)據(jù)讀取仍照常進行;
?無master過程中,region切分、負載均衡等無法進行;
RegionServer容錯:定時向Zookeeper匯報心跳,如果一旦時間內(nèi)未出現(xiàn)心跳,Master將該RegionServer上的Region重新分配到其他RegionServer上,失效服務器上“預寫”日志由主服務器進行分割并派送給新的RegionServer
Zookeeper容錯:Zookeeper是一個可靠地服務,一般配置3或5個Zookeeper實例
Region定位流程:

image.png

尋找RegionServer

ZooKeeper--> -ROOT-(單Region)--> .META.--> 用戶表

-ROOT-
?表包含.META.表所在的region列表,該表只會有一個Region;

?Zookeeper中記錄了-ROOT-表的location。

.META.

?表包含所有的用戶空間region列表,以及RegionServer的服務器地址。

HBase存儲數(shù)據(jù)其底層使用的是HDFS來作為存儲介質(zhì),HBase的每一張表對應的HDFS目錄上的一個文件夾,文件夾名以HBase表進行命名(如果沒有使用命名空間,則默認在default目錄下),在表文件夾下存放在若干個Region命名的文件夾,Region文件夾中的每個列簇也是用文件夾進行存儲的,每個列簇中存儲就是實際的數(shù)據(jù),以HFile的形式存在。路徑格式如下:

/hbase/data/default/<tbl_name>/<region_id>/<cf>/<hfile_id>

謝謝

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 參考:http://www.itdecent.cn/p/569106a3008f 最近在逐步跟進Hbase的相關...
    博弈史密斯閱讀 931評論 1 1
  • 最近在逐步跟進Hbase的相關工作,由于之前對Hbase并不怎么了解,因此系統(tǒng)地學習了下Hbase,為了加深對Hb...
    飛鴻無痕閱讀 50,592評論 19 272
  • 本文首先簡單介紹了HBase,然后重點講述了HBase的高并發(fā)和實時處理數(shù)據(jù) 、HBase數(shù)據(jù)模型、HBase物理...
    達微閱讀 2,849評論 1 13
  • 簡介 HBase是高可靠性,高性能,面向列,可伸縮的分布式存儲系統(tǒng),利用HBase技術可在廉價PC Serve...
    九世的貓閱讀 2,387評論 1 6
  • 一、簡介 Hbase:全名Hadoop DataBase,是一種開源的,可伸縮的,嚴格一致性(并非最終一致性)的分...
    菜鳥小玄閱讀 2,611評論 0 12

友情鏈接更多精彩內(nèi)容