(NoSql之HBase)Hbase原理、基本概念、基本架構

(NoSql之HBase)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適合批處理場景
不支援資料隨機查詢
不適合增量資料處理

不支援資料更新


  • 參考文件:

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(讀和寫的流程比較詳細)