HBase是一個(gè)構(gòu)建在HDFS上的分布式列存儲(chǔ)系統(tǒng),主要用于海量結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ),從邏輯上講,HBase將數(shù)據(jù)按照表、行和列進(jìn)行存儲(chǔ)。
HDFS適合批處理場(chǎng)景
不支持?jǐn)?shù)據(jù)隨機(jī)查找
不適合增量數(shù)據(jù)處理
不支持?jǐn)?shù)據(jù)更新
以上HDFS不適合、不支持的場(chǎng)景,HBase都支持
大數(shù)據(jù)上高并發(fā)操作,比如每秒對(duì)PB級(jí)數(shù)據(jù)進(jìn)行上千次操作,并且讀寫(xiě)訪問(wèn)均是非常簡(jiǎn)單的操作。
論HDFS上的分布式列存儲(chǔ)系統(tǒng)Hbase所具備優(yōu)點(diǎn)以及所支持的操作
Hbase表的特點(diǎn)
大:一個(gè)表可以有數(shù)十億行,上百萬(wàn)列;
無(wú)模式:每行都有一個(gè)可排序的主鍵和任意多的列,列可以根據(jù)需要?jiǎng)討B(tài)的增加,同一張表中不同的行可以有截然不同的列;
面向列:面向列(族)的存儲(chǔ)和權(quán)限控制,列(族)獨(dú)立檢索;
稀疏:對(duì)于空(null)的列,并不占用存儲(chǔ)空間,表可以設(shè)計(jì)的非常稀疏;
數(shù)據(jù)多版本:每個(gè)單元中的數(shù)據(jù)可以有多個(gè)版本,默認(rèn)情況下版本號(hào)自動(dòng)分配,是單元格插入時(shí)的時(shí)間戳;
數(shù)據(jù)類(lèi)型單一:Hbase中的數(shù)據(jù)都是字符串,沒(méi)有類(lèi)型。
行存儲(chǔ)和列存儲(chǔ)的比較
傳統(tǒng)行式數(shù)據(jù)庫(kù)
數(shù)據(jù)是按行存儲(chǔ)的
沒(méi)有索引的查詢(xún)使用大量I/O
建立索引和物化視圖需要花費(fèi)大量時(shí)間和資源
面向查詢(xún)的需求,數(shù)據(jù)庫(kù)必須被大量膨脹才能滿(mǎn)足性能要求
列式數(shù)據(jù)庫(kù)
數(shù)據(jù)是按列存儲(chǔ)-每一列單獨(dú)存放
數(shù)據(jù)即是索引
指訪問(wèn)查詢(xún)涉及的列-大量降低系統(tǒng)I/O
每一列由一個(gè)線(xiàn)程來(lái)處理-查詢(xún)的并發(fā)處理
數(shù)據(jù)類(lèi)型一致,數(shù)據(jù)特征相似-高效壓縮
基本概念
Row Key
Byte array
表中每條記錄的“主鍵”
方便快速查找
Column Family
擁有一個(gè)名稱(chēng)(string)
包含一個(gè)或者多個(gè)相關(guān)列
Column
屬于某一個(gè)Column Family
包含在某一列中
familyName:columnName
Version Number
每個(gè)rowkey唯一
默認(rèn)值:系統(tǒng)時(shí)間戳
類(lèi)型為L(zhǎng)ong
Value(Cell)
Byte array
數(shù)據(jù)模型
HBase schema可以有多個(gè)Table
每個(gè)表可由多個(gè)Column Family組成
HBase可以有Dynamic Column
列名稱(chēng)是編碼在cell中的
不同的cell可以擁有不同的列
version number可由用戶(hù)提供
無(wú)需以遞增的順序插入
每一行的rowkey必須是唯一的
Table可能非常稀疏
很多cell可以是空的
Row Key是主鍵
HBase支持操作
所有操作都是基于rowkey的
支持crud和scan
單行操作:put、get、scan
多行操作:MultiPut、scan
沒(méi)有內(nèi)置join操作,可以使用MapReduce解決
物理模型
rowkey和version number在每個(gè)column family中都有一份
每個(gè)column family存儲(chǔ)在HDFS上的一個(gè)單獨(dú)文件中(就是store)
控制不會(huì)被保存,不占存儲(chǔ)空間
以上特點(diǎn)類(lèi)似分庫(kù)技術(shù)中的垂直切分,提高了并發(fā)訪問(wèn)速度
論HDFS上的分布式列存儲(chǔ)系統(tǒng)Hbase所具備優(yōu)點(diǎn)以及所支持的操作
物理存儲(chǔ)
1、Table中的所有行都按照row key的字典序排列;
2、Table在行的方向上分割為多個(gè)Region;
3、Region按大小分割的,每個(gè)表開(kāi)始只有一個(gè)region,隨著數(shù)據(jù)增多,region不斷增大,當(dāng)增大到一個(gè)閥值的時(shí)候,region就會(huì)等分會(huì)兩個(gè)新的region,之后會(huì)有越來(lái)越多的region;
4、Region是HBase中分布式存儲(chǔ)和負(fù)載均衡的最小單元。不同Region分布到不同RegionServer上;
5、Region雖然是分布式存儲(chǔ)的最小單元,但并不是存儲(chǔ)的最小單元。
Region由一個(gè)或者多個(gè)Store組成,每個(gè)store保存一個(gè)columns family;
每個(gè)Strore又由一個(gè)memStore和0至多個(gè)StoreFile組成;
memStore存儲(chǔ)在內(nèi)存中,StoreFile存儲(chǔ)在HDFS上。
HBase架構(gòu)
論HDFS上的分布式列存儲(chǔ)系統(tǒng)Hbase所具備優(yōu)點(diǎn)以及所支持的操作
HBase基本組件
Client
包含訪問(wèn)HBase的接口,并維護(hù)cache來(lái)加快對(duì)HBase的訪問(wèn)
Zookeeper
Hbase依賴(lài)Zookeeper,hbase會(huì)管理zookeeper的實(shí)例
保證任何時(shí)候,集群中只有一個(gè)master
存儲(chǔ)所有region的尋址入口
實(shí)時(shí)監(jiān)控region server的上線(xiàn)和下線(xiàn)信息,并實(shí)時(shí)通知給master
存儲(chǔ)hbase的schema和table元數(shù)據(jù)
Master
為region server分配region
負(fù)責(zé)region server的負(fù)載均衡
發(fā)現(xiàn)失效的region server并重新分配其上的region
管理用戶(hù)對(duì)table的增刪改查操作
Region Server
維護(hù)region,處理對(duì)這些region的IO請(qǐng)求
負(fù)責(zé)切分在運(yùn)行過(guò)程中變得過(guò)大的region
HBase容錯(cuò)性
Master容錯(cuò):zookeeper重新選擇一個(gè)新的master
無(wú)master過(guò)程中,數(shù)據(jù)讀取仍照常運(yùn)行
無(wú)master過(guò)程中,region切分、負(fù)載均衡等無(wú)法進(jìn)行
region server容錯(cuò):定時(shí)向zookeeper匯報(bào)心跳,如果一段時(shí)間內(nèi)未出現(xiàn)心跳
master將該region server上的region重新分配到其他region server上
失效服務(wù)器上預(yù)寫(xiě)日志由主服務(wù)器進(jìn)行分割并派送給新的region server
zookeeper容錯(cuò):zookeeper是一個(gè)可靠的服務(wù)
一般配置3或5個(gè)zookeeper實(shí)例
Region定位
論HDFS上的分布式列存儲(chǔ)系統(tǒng)Hbase所具備優(yōu)點(diǎn)以及所支持的操作
關(guān)系數(shù)據(jù)庫(kù)和HBase比較
論HDFS上的分布式列存儲(chǔ)系統(tǒng)Hbase所具備優(yōu)點(diǎn)以及所支持的操作
關(guān)系數(shù)據(jù)庫(kù)和HBase比較
Hbase在淘寶的應(yīng)用
淘寶指數(shù)
交易歷史記錄查詢(xún)系統(tǒng)
Facebook已經(jīng)放棄了自己創(chuàng)建的Cassandra,使用了HBase.
【1】想了解大數(shù)據(jù)知識(shí),可以關(guān)注我下方評(píng)論轉(zhuǎn)發(fā)后,私信“資料”。
【2】部分資料有時(shí)間限制,抓緊時(shí)間吧!