大数据之路Week10_day01 (Hbase总结 II)
Hbase是數(shù)據(jù)庫
特點:
1.面向列:Hbase是面向列的存儲和權(quán)限控制,并支持獨立索引。列式存儲,其數(shù)據(jù)在表中是按照某列存儲的,這樣在查詢只需要少數(shù)幾個字段時,能大大減少讀取的數(shù)據(jù)量。
2.多版本:Hbase每一個列的存儲有多個Version(這個版本是針對列簇來說的)。
3.稀疏性:為空的列不占用存儲空間,表可以設(shè)計得非常稀疏。
4.擴展性:底層依賴HDFS。
5.高可靠性:WAL機制保證了數(shù)據(jù)寫入時不會因集群異常而導(dǎo)致寫入數(shù)據(jù)丟失,Replication機制保證了在集群出現(xiàn)嚴重的問題時,數(shù)據(jù)不會發(fā)生丟失或損壞。而且Hbase底層使用HDFS,HDFS本身也有備份。
6.高性能:底層的LSM數(shù)據(jù)結(jié)構(gòu)和Rowkey有序排列等架構(gòu)上的獨特設(shè)計,使得Hbase具有非常高的寫入性能。region切分,主鍵索引和緩存機制使得Hbase在海量數(shù)據(jù)下具備一定的隨機讀取性能,該性能真對Rowkey的查詢能到達到毫秒級別。
數(shù)據(jù)量
十億級別的行
百萬級別的列
速度快的原因
充分利用內(nèi)存
使用了LSM結(jié)構(gòu)
緩存機制
文件是順序讀的
數(shù)據(jù)模型
rowkey
相當(dāng)于MySql中的主鍵,唯一標識一行記錄
rowkey是字典順序
rowkey的長度最長是64k,但是一般推薦10-100字節(jié)
colunm family
一組列的集合
列簇必須作為表的schema定義給出
列簇是權(quán)限,存儲的最小單元
qulifier
列
可以動態(tài)的,隨機的插入
表定義之后沒有限制列,隨著值得插入也把列插入
列必須歸屬某一個列簇
timestamp
時間戳,64位,精度是毫秒
起版本號的作用,一個cell中可以存多個版本的數(shù)據(jù)
時間戳可以自己當(dāng)以,但是一般不推薦!!
cell
存儲數(shù)據(jù)的最小單元(邏輯概念,實際存儲中并沒有這個)
存儲的是K-V格式的數(shù)據(jù)
K: rowkey + colunm family + qulifier + timestamp
V: value
hbase的cell存儲數(shù)據(jù)的時候沒有類型的區(qū)分,存放的都是字節(jié)數(shù)組
架構(gòu)
hbase是主從架構(gòu)
角色
client
操作hbase的入口,命令行,API,并維護客戶端緩存
zookeeper
保證任何時刻集群中有且僅有一臺active的hmaster
存儲所有region的尋址入口,所有regoin元數(shù)據(jù)存儲在哪一臺regionserver
監(jiān)控regonserver的上線和下線信息,并實時通知Hmaster
存儲相關(guān)表的schema數(shù)據(jù)
Hmaster
分配region
保證整個集群中的所有regionserver的負載均衡
當(dāng)發(fā)現(xiàn)某一臺regoinserver宕機之后,重新分配上面的region
當(dāng)region變大的時候,Hmaster去分配region到哪一臺regionserver
HRegionServer
負責(zé)接受客戶端的讀寫請求,處理對于region的IO
當(dāng)某一個region變大之后,負責(zé)等分兩個region
region
相當(dāng)于表的概念,一張表至少對應(yīng)一個region
當(dāng)表的數(shù)據(jù)過大的時候,region會發(fā)生裂變
store
相當(dāng)于列簇
角色:
memstore
位于內(nèi)存
每一個store有一個memstore
storefile
磁盤的存儲空間,將數(shù)據(jù)持久化的存儲位置
每一個region有一個或者多個storefile
storefile可以進行合并操作
存儲結(jié)構(gòu):使用了LSM的數(shù)據(jù)模型
WAL:
write ahead log (預(yù)寫日志)
防止數(shù)據(jù)丟失
先寫內(nèi)存,再向HDFS上溢寫,但是是異步的方式
先寫到memstore,然后memstore達到一個閾值,memstore到一個消息隊列中,原來的regon會生成一個新的memstore,再通過這個消息隊列,向storefile中寫數(shù)據(jù),異步的方式。
讀寫流程
讀流程
1、客戶端向zookeeper中發(fā)送請求
2、從ZK中拿到metadata的存儲節(jié)點
3、去存儲metadata的節(jié)點獲取對應(yīng)的region的所在位置
4、訪問對應(yīng)得regon獲取數(shù)據(jù)
5、先去memstore中查詢數(shù)據(jù),如果有,直接返回
6、如果沒有查詢到結(jié)果,去blockcache查找數(shù)據(jù),如果找到,直接返回
7、如果沒有找到,就去storefile中查找數(shù)據(jù),并將查詢到得結(jié)果緩存到blockcache中,方便下一次查詢
8、將結(jié)果返回給客戶端
注意:blockchache是緩存,有大小限制,會有淘汰機制,默認將最早得數(shù)據(jù)淘汰
寫流程
1、client向ZK發(fā)送請求
2、從ZK中拿到metadata得存儲節(jié)點
3、去存儲metadata的節(jié)點獲取對應(yīng)的region所在的位置
4、訪問對應(yīng)的region進行寫數(shù)據(jù)
5、首先會向WAL中寫數(shù)據(jù),寫成功之后才會存儲到memstore
6、當(dāng)memstore中的數(shù)據(jù)量達到閾值之后,進行溢寫,溢寫成storefile
7、store file是一個個的小文件,會進行合并(minor(部分合并) , major(一個regon下面的都進行合并))
8、store file 是對Hfile的封裝,Hfile是實際存儲在HDFS上的數(shù)據(jù)文件
總結(jié)
以上是生活随笔為你收集整理的大数据之路Week10_day01 (Hbase总结 II)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 饺紫猫配色教程
- 下一篇: springboot ftp 笔记