本文思路
- Hbase是什么
- Hbase的優(yōu)劣
- Hbase架構(gòu)
- Hbase容錯(cuò)
- Hbase使用總結(jié)
HBase是什么
- 基于HDFS的列式存儲(chǔ)NoSql數(shù)據(jù)庫(kù)
- 適合于非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)庫(kù)
Hbase的特點(diǎn)
1.采用稀疏列式存儲(chǔ)如捅,節(jié)約存儲(chǔ)空間
2.可以自動(dòng)切分?jǐn)?shù)據(jù)肋乍,能夠水平拓展
3.可以提供高并發(fā)鹅颊,低延遲的讀寫(xiě)操作
缺點(diǎn)
不支持豐富的條件篩選,只能根據(jù)rowkey進(jìn)行g(shù)et或者scan讀取
Hbase架構(gòu)
Client
hbase的訪問(wèn)客戶端墓造,可以做一些本地緩存堪伍,來(lái)加快對(duì)hbase集群的訪問(wèn),如 region的位置信息
HMaster
負(fù)責(zé)HRegionServer的負(fù)載均衡觅闽,給HRegionServier分配Region帝雇。client讀取數(shù)據(jù)不經(jīng)過(guò)HMaster。
HRegionServer
管理Region蛉拙,負(fù)責(zé)Region的切分和合并
HRegion
Table在行的方向上分割為多個(gè)HRegion尸闸,HRegion是HBase中分布式存儲(chǔ)和負(fù)載均衡的最小單元,即不同的HRegion可以分別在不同的HRegionServer上,但同一個(gè)HRegion是不會(huì)拆分到多個(gè)HRegionServer上的吮廉。HRegion按大小分割苞尝,每個(gè)表一般只有一個(gè)HRegion,隨著數(shù)據(jù)不斷插入表宦芦,HRegion不斷增大宙址,當(dāng)HRegion的某個(gè)列簇達(dá)到一個(gè)閥值(默認(rèn)256M)時(shí)就會(huì)分成兩個(gè)新的HRegion。Store
Region雖然是分布式存儲(chǔ)的最小單元调卑,但并不是存儲(chǔ)的最小單元抡砂。Region由一個(gè)或者多個(gè)Store組成,每個(gè)store保存一個(gè)columns family恬涧;每個(gè)Strore又由一個(gè)memStore和0至多個(gè)StoreFile組成注益,StoreFile包含HFile;memStore存儲(chǔ)在內(nèi)存中气破,StoreFile存儲(chǔ)在HDFS上(數(shù)據(jù)寫(xiě)入先寫(xiě)memStore聊浅,當(dāng)memStore超過(guò)閥值(默認(rèn)64MB),則會(huì)刷入以StoreFile磁盤(pán))现使。
Zookeeper
zk的引入低匙,第一防止HMaster單點(diǎn)故障。另外還作為存儲(chǔ)碳锈,保存-Root- 的HRegionServer位置顽冶。
物理架構(gòu)
HBase容錯(cuò)性
Master容錯(cuò):Zookeeper重新選擇一個(gè)新的Master
- 無(wú)Master過(guò)程中,數(shù)據(jù)讀取仍照常進(jìn)行售碳;
- 無(wú)master過(guò)程中强重,region切分、負(fù)載均衡等無(wú)法進(jìn)行贸人;
RegionServer容錯(cuò):定時(shí)向Zookeeper匯報(bào)心跳间景,如果一旦時(shí)間內(nèi)未出現(xiàn)心跳,Master將該RegionServer上的Region重新分配到其他RegionServer上艺智,失效服務(wù)器上“預(yù)寫(xiě)”日志由主服務(wù)器進(jìn)行分割并派送給新的RegionServer
Zookeeper容錯(cuò):
Zookeeper是一個(gè)可靠地服務(wù)倘要,一般配置3或5個(gè)Zookeeper實(shí)例
HBase寫(xiě)入
每個(gè)HRegionServer中都有一個(gè)HLog對(duì)象,HLog是一個(gè)實(shí)現(xiàn)Write Ahead Log的類十拣,在每次用戶操作寫(xiě)入MemStore的同時(shí)封拧,也會(huì)寫(xiě)一份數(shù)據(jù)到HLog文件中(HLog文件格式見(jiàn)后續(xù)),HLog文件定期會(huì)滾動(dòng)出新的夭问,并刪除舊的文件(已持久化到StoreFile中的數(shù)據(jù))泽西。當(dāng)HRegionServer意外終止后,HMaster會(huì)通過(guò)Zookeeper感知到缰趋,HMaster首先會(huì)處理遺留的 HLog文件捧杉,將其中不同Region的Log數(shù)據(jù)進(jìn)行拆分陕见,分別放到相應(yīng)region的目錄下,然后再將失效的region重新分配糠溜,領(lǐng)取 到這些region的HRegionServer在Load Region的過(guò)程中淳玩,會(huì)發(fā)現(xiàn)有歷史HLog需要處理直撤,因此會(huì)Replay HLog中的數(shù)據(jù)到MemStore中非竿,然后flush到StoreFiles,完成數(shù)據(jù)恢復(fù)
HBase讀取
讀數(shù)據(jù)的關(guān)鍵是定位Region所在的RegionServer谋竖,數(shù)據(jù)的RegionServer如果被定位過(guò)红柱,會(huì)緩存到client端。
HBase里有兩個(gè)特殊表分別是 -ROOT-
和 .META.
-ROOT-
表包含.META.表所在的region列表蓖乘,該Region永不拆分锤悄,只有一個(gè)。
.META.
表包含所有的用戶表對(duì)應(yīng)的region的位置信息嘉抒。
定位RegionServer
ZooKeeper--> -ROOT-(單Region)--> .META.--> 用戶表
ZK的結(jié)構(gòu)如下
整個(gè)過(guò)程如下
Hbase使用總結(jié)
1.rowKey 必須盡量的分散零聚,避免數(shù)據(jù)傾斜到單個(gè)Region節(jié)點(diǎn)。
- 自增id開(kāi)頭的些侍,一定要 reverse 反轉(zhuǎn)一下
- 羅列出查詢場(chǎng)景隶症,看看rowkey是否能滿足查詢需要
- scan查詢,默認(rèn)一次只返回100條數(shù)據(jù)岗宣,如果需要返回的更多蚂会,需要設(shè)置cache參數(shù)
- mutliGet注意控制 rowkey數(shù)量,針對(duì)rt設(shè)置一個(gè)合理的查詢上限
參考文章
https://cloud.tencent.com/developer/article/1018571
http://www.reibang.com/p/3832ae37fac4
http://www.uml.org.cn/bigdata/201810181.asp
官方
http://blog.zahoor.in/2012/08/hbase-hmaster-architecture/
http://hbase.apache.org/book.html#regionserver_splitting_implementation