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 爲每個值維護了多級索引,即:<key, column family, column name, timestamp>
物理存儲:
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適合批處理場景
不支持數據隨機查找
不適合增量數據處理
不支持數據更新
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章