Hbase原理、基本概念、基本架構


概述


 

HBase是一個構建在HDFS上的分布式列存儲系統;

HBase是基於Google BigTable模型開發的,典型的key/value系統;

HBase是Apache Hadoop生態系統中的重要一員,主要用於海量結構化數據存儲;

從邏輯上講,HBase將數據按照表、行和列進行存儲。

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

Hbase表的特點

大:一個表可以有數十億行,上百萬列;

無模式:每行都有一個可排序的主鍵和任意多的列,列可以根據需要動態的增加,同一張表中不同的行可以有截然不同的列;

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

稀疏:空(null)列並不占用存儲空間,表可以設計的非常稀疏;

數據多版本:每個單元中的數據可以有多個版本,默認情況下版本號自動分配,是單元格插入時的時間戳;

數據類型單一:Hbase中的數據都是字符串,沒有類型。

Hbase數據模型

Hbase邏輯視圖


注意上圖中的英文說明

 

Hbase基本概念

RowKey:是Byte array,是表中每條記錄的“主鍵”,方便快速查找,Rowkey的設計非常重要。

Column Family:列族,擁有一個名稱(string),包含一個或者多個相關列

Column:屬於某一個columnfamily,familyName:columnName,每條記錄可動態添加

Version Number:類型為Long,默認值是系統時間戳,可由用戶自定義

Value(Cell):Byte array

Hbase物理模型

每個column family存儲在HDFS上的一個單獨文件中,空值不會被保存。

Key 和 Version number在每個 column family中均有一份;

HBase 為每個值維護了多級索引,即:

物理存儲:

1、Table中所有行都按照row key的字典序排列;

2、Table在行的方向上分割為多個Region;

3、Region按大小分割的,每個表開始只有一個region,隨着數據增多,region不斷增大,當增大到一個閥值的時候,region就會等分會兩個新的region,之后會有越來越多的region;

4、Region是Hbase中分布式存儲和負載均衡的最小單元,不同Region分布到不同RegionServer上。


 

5、Region雖然是分布式存儲的最小單元,但並不是存儲的最小單元。Region由一個或者多個Store組成,每個store保存一個columns family;每個Strore又由一個memStore和0至多個StoreFile組成,StoreFile包含HFile;memStore存儲在內存中,StoreFile存儲在HDFS上。


 

HBase架構及基本組件


 

Hbase基本組件說明:

Client

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

Master

為Region server分配region

負責Region server的負載均衡

發現失效的Region server並重新分配其上的region

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

Region Server

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

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

Zookeeper作用

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

存貯所有Region的尋址入口

實時監控Region server的上線和下線信息。並實時通知給Master

存儲HBase的schema和table元數據

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

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


 

Write-Ahead-Log(WAL)


 

該機制用於數據的容錯和恢復:

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

HBase容錯性

Master容錯:Zookeeper重新選擇一個新的Master

無Master過程中,數據讀取仍照常進行;

無master過程中,region切分、負載均衡等無法進行;

RegionServer容錯:定時向Zookeeper匯報心跳,如果一旦時間內未出現心跳,Master將該RegionServer上的Region重新分配到其他RegionServer上,失效服務器上“預寫”日志由主服務器進行分割並派送給新的RegionServer

Zookeeper容錯:Zookeeper是一個可靠地服務,一般配置3或5個Zookeeper實例

Region定位流程:


 

尋找RegionServer

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

-ROOT-

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

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

.META.

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

Hbase使用場景

storing large amounts of data(100s of TBs)

need high write throughput

need efficient random access(key lookups) within large data sets

need to scale gracefully with data

for structured and semi-structured data

don't need fullRDMS capabilities(cross row/cross table transaction, joins,etc.)

大數據量存儲,大數據量高並發操作

需要對數據隨機讀寫操作

讀寫訪問均是非常簡單的操作

Hbase與HDFS對比

兩者都具有良好的容錯性和擴展性,都可以擴展到成百上千個節點;

HDFS適合批處理場景

不支持數據隨機查找

不適合增量數據處理

不支持數據更新


 

參考文檔:

1、http://www.alidata.org/archives/1509(存儲模型比較詳細)

2、http://www.searchtb.com/2011/01/understanding-hbase.html(技術框架以及存儲模型)

3、http://wenku.baidu.com/view/b46eadd228ea81c758f578f4.html(讀和寫的流程比較詳細)

這里對大數據技術感興趣或者想學習大數據的朋友,我整理了一套大數據的學習視頻免費分享給大家,從入門到實戰都有,大家可以加微信:Lxiao_28獲取,還可以入微信群交流!(備注領取資料,真實有效)。

 

 長按識別關注我們,發現更多精彩內容分享哦  ~ ~


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM