HBaseHbase概述
Hbase物理模型
Hbase數(shù)據(jù)模型
Hbase基本架構(gòu)
Hbase應(yīng)用舉例
1、HBase概述HBase是一個構(gòu)建在HDFS上的分布式列存儲系統(tǒng);
HBase是Apache Hadoop生態(tài)系統(tǒng)中的重要一員,主要用于海量結(jié)構(gòu)化數(shù)據(jù)存儲
從邏輯上講, HBase將數(shù)據(jù)按照表、行和列進(jìn)行存儲。
Hbase是Hadoop生態(tài)系統(tǒng)的一個組成部分 1.1、HBase與HDFS的對比兩者都具有良好的容錯性和擴(kuò)展性,都可以擴(kuò)展到成百上千個節(jié)點;
HDFS適合批處理場景
不支持?jǐn)?shù)據(jù)隨機(jī)查找
不適合增量數(shù)據(jù)處理
不支持?jǐn)?shù)據(jù)更新
1.2、HBase的特點大:一個表可以有數(shù)十億行,上百萬列;
無模式:每行都有一個可排序的主鍵和任意多的列,列可以根據(jù)需要動態(tài)的增加,同一張表中不同的行可以有截然不同的列;
面向列:面向列(族)的存儲和權(quán)限控制,列(族)獨立檢索;
稀疏:對于空( null)的列,并不占用存儲空間,表可以設(shè)計的非常稀疏;
數(shù)據(jù)多版本:每個單元中的數(shù)據(jù)可以有多個版本,默認(rèn)情況下版本號自動分配,是單元格插入時的時間戳;
數(shù)據(jù)類型單一: Hbase中的數(shù)據(jù)都是字符串,沒有類型
1.3、行存儲與列存儲傳統(tǒng)行式數(shù)據(jù)庫 數(shù)據(jù)是按行存儲的
沒有索引的查詢使用大量I/O
建立索引需要花費大量時間和資源
列式數(shù)據(jù)庫 數(shù)據(jù)是按列存儲-每一列單獨存放
數(shù)據(jù)即是索引
指訪問查詢涉及的列-大量降低系統(tǒng)I/O
每一列由一個線索來處理-查詢的并發(fā)處理
數(shù)據(jù)類型一致,數(shù)據(jù)特征相似-高效壓縮
1.4、HBase的數(shù)據(jù)模型 HBase是基于Google BigTable模型開發(fā)的,典型的key/value系統(tǒng);
1.5、邏輯視圖1.6、Rowkey與Column Family1.7、Hbase基本概念Row Key
Byte array
表中每條記錄的“主鍵”
方便快速查找
Column Family
擁有一個名稱(string)
包含一個或者多個相關(guān)列
Column
屬于某一個column family
包含在某一列中
familyName:columnName
Version Number
默認(rèn)值?系統(tǒng)時間戳
Value(cell)
Byte array
2、Hbase數(shù)據(jù)類型 HBase schema可以有多個類似Table
每個表可由多個Column Family組成
Hbase可以有Dynamic Column
version number 可由用戶提供
無需以遞增的順序插入
Table可能非常稀疏
不同的cell可以擁有不同的列
Row Key是主鍵
2.1、HBase與支持的操作所有操作均是基于rowkey的;
支持CRUD(Create、Read、Update和Delete)和Scan;
單行操作
put
get
scan
多行操作
Scan
Multiput
沒有內(nèi)置join操作,可使用MapReduce解決
3、Hbase物理模型每個column family存儲在HDFS上的一個單獨文件中;
Key 和 Version number在每個 column family中均由一份;
空值不會被保存。
Hbase為每個值維護(hù)了多級索引
1、Table中的所有行都按照row key的字典序排列;
2、Table 在行的方向上分割為多個Region;
3、Region按大小分割的,每個表開始只有一個region,隨著數(shù)據(jù)增多, region不斷增大,當(dāng)增大到一個閥值的時候,region就會等分會兩個新的region,之后會有越來越多的region;
4、Region是HBase中分布式存儲和負(fù)載均衡的最小單元。不同Region分布到不同RegionServer上;
5、Region雖然是分布式存儲的最小單元,但并不是存儲的最小單元
Region由一個或者多個Store組成,每個store保存一個columns family
每個Store又由一個memStore和0至多個StoreFile組成;
memStore存儲在內(nèi)存中, StoreFile存儲在HDFS上。
HBase架構(gòu)HBase基本組件Client
包含訪問Hbase的接口,并維護(hù)cache來加快對Hbase的訪問
ZooKeeper
保證任何時候,集群中只有一個master
存貯所有Region的尋址入口
實時監(jiān)控Region server的上線和下線信息。并實時通知給Master
存儲HBase的schema和table元數(shù)據(jù)
Master
為Region server分配region
負(fù)責(zé)Region server的負(fù)載均衡
發(fā)現(xiàn)失效的Region server并重新分配其上的region
管理用戶對table的增刪改查操作
Region Server
Region server維護(hù)region,處理對這些region的IO請求
Region server負(fù)責(zé)切分在運行過程中變得過大的region
Zookeeper作用 HBase 依賴ZooKeeper
默認(rèn)情況下, HBase 管理ZooKeeper 實例
比如, 啟動或者停止ZooKeeper Write-Ahead-Log(WAL)HBase容錯性Master容錯: Zookeeper重新選擇一個新的Master
無Master過程中,數(shù)據(jù)讀取仍照常進(jìn)行;
無master過程中, region切分、負(fù)載均衡等無法進(jìn)行;
RegionServer容錯:定時向Zookeeper匯報心跳,如果一旦時間內(nèi)未出現(xiàn)心跳
Master將該RegionServer上的Region重新分配到其他RegionServer上;
失效服務(wù)器上“預(yù)寫”日志由主服務(wù)器進(jìn)行分割并派送給新的RegionServer
Zookeeper容錯: Zookeeper是一個可靠地服務(wù)
一般配置3或5個Zookeeper實例。
Regin定位尋找RegionServer
ZooKeeper
-ROOT-(單Region)
.META.
用戶表
-ROOT-表與.META.表-ROOT-
表包含.META.表所在的region列表,該表只會有一個Region;
Zookeeper中記錄了-ROOT-表的location。
.META.
表包含所有的用戶空間region列表,以及RegionServer的服務(wù)器地址。
HDFS與HBase的比較關(guān)系型數(shù)據(jù)與HBase的比較何時使用HBase需對數(shù)據(jù)進(jìn)行隨機(jī)讀操作或者隨機(jī)寫操作;
大數(shù)據(jù)上高并發(fā)操作,比如每秒對PB級數(shù)據(jù)進(jìn)行上千次操作;
讀寫訪問均是非常簡單的操作。
HBase在淘寶的應(yīng)用交易歷史記錄查詢系統(tǒng)
百億行數(shù)據(jù)表,千億級二級索引表
每天千萬行更新
查詢場景簡單,檢索條件較少
關(guān)系型數(shù)據(jù)庫所帶來的問題
基于userId time id rowkey設(shè)計
成本考慮
|
|