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

  • 概述



HBase是一個構建在HDFS上的分佈式列存儲系統;
HBase是基於Google BigTable模型開發的,典型的key/value系統;
HBase是Apache Hadoop生態系統中的重要一員,主要用於海量結構化數據存儲;
從邏輯上講,HBase將數據按照表、行和列進行存儲。
與hadoop同樣,Hbase目標主要依靠橫向擴展,經過不斷增長廉價的商用服務器,來增長計算和存儲能力。
Hbase表的特色
大:一個表能夠有數 十億行,上 百萬列
無模式:每行都有一個可排序的主鍵和任意多的列,列能夠根據須要動態的增長,同一張表中 不一樣的行能夠有大相徑庭的列
面向列:面向列(族)的存儲和權限控制, 列(族)獨立檢索
稀疏: 空(null)列並不佔用存儲空間,表能夠設計的很是稀疏;
數據多版本:每一個單元中的數據能夠有多個版本,默認狀況下版本號自動分配,是單元格插入時的時間戳;
數據類型單一:Hbase中的數據都是字符串,沒有類型。

  • Hbase數據模型

Hbase邏輯視圖css


注意上圖中的英文說明html

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>

物理存儲:
一、Table中全部行都按照row key的字典序排列;
二、Table在行的方向上分割爲多個Region;
三、Region按大小分割的,每一個表開始只有一個region,隨着數據增多,region不斷增大,當增大到一個閥值的時候,region就會等分會兩個新的region,以後會有愈來愈多的region;
四、Region是Hbase中分佈式存儲和負載均衡的最小單元,不一樣Region分佈到不一樣RegionServer上。
markdown


五、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分配regiondom

負責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適合批處理場景
不支持數據隨機查找
不適合增量數據處理

不支持數據更新



  • 參考文檔:

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

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

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

相關文章
相關標籤/搜索