Hbase 概述
Hbase 是構(gòu)件在HDFS上的分布式列存儲系統(tǒng)
Hbase 是基于谷歌Big table 模型開發(fā)的蹲盘,典型的key/value
Hbase 主要用于海量結(jié)構(gòu)化數(shù)據(jù)存儲
從邏輯上講,Hbase 將數(shù)據(jù)按照表嘹狞,行和列進(jìn)行存儲
Hbase 表的特點(diǎn)
1.大: 一個表有數(shù)十億行蚪缀,上百萬列
2.面向列存儲: 面向列的存儲和權(quán)限控制疹启,列族獨(dú)立檢索
3.稀疏: 空列不會占用存儲空間,表可以設(shè)計的非常稀疏
4.數(shù)據(jù)多版本:每個單元中的數(shù)據(jù)可以有多個版本煎殷,默認(rèn)情況下是自動分配屯伞,是單元格插入時的時間戳
5.數(shù)據(jù)類型單一:都是字符串,沒有其他類型
Hbase 數(shù)據(jù)模型
Hbase 基本概念
1.RowKey 是Byte array ,是表中每條記錄的主鍵豪直,方便快速查找愕掏,Rowkey 的設(shè)計非常重要
2.Column Famliy 列族,擁有一個名稱(string),包含一個或者多個相關(guān)列
3.Column 屬于某一個columnfamliy famliyNode:columnName ,每條記錄可以動態(tài)添加
4.Version Number 類型為Long ,默認(rèn)是系統(tǒng)時間戳顶伞,可以由用戶自定義
5.Value :Byte arry
Hbase 物理模型
1.每個column famliy 存儲在HDFS上的一個單獨(dú)文件中饵撑,空值不會被保存
2.key 和Version number 在每一個column famliy 中均有一份、
3.Hbase 為每個值維護(hù)多級索引
物理存儲:
??????????????? 1.Table 中所有行按照row key 的字典排序
??????????????? 2.Table 在行的分割方向上分割為多個Region
??????????????? 3. Region 按大小分割的唆貌,每個表開始只有一個Region 隨著數(shù)據(jù)增多滑潘,region 不斷增大,當(dāng)增大到一個閥值的時候锨咙。Region 就會等分成2個Region 之后會有越來越多的Region
???????????????? 4. Region是Hbase 中分布式存儲和負(fù)載均衡的最小單元语卤,不同的Region 分布在不同的RegionServer
5、Region雖然是分布式存儲的最小單元酪刀,但并不是存儲的最小單元粹舵。Region由一個或者多個Store組成,每個store保存一個columns family骂倘;每個Strore又由一個memStore和0至多個StoreFile組成眼滤,StoreFile包含HFile;memStore存儲在內(nèi)存中历涝,StoreFile存儲在HDFS上
诅需。
Hbase基本組件說明:
Client
包含訪問HBase的接口漾唉,并維護(hù)cache來加快對HBase的訪問,比如region的位置信息
Master
為Region server分配region
負(fù)責(zé)Region server的負(fù)載均衡
發(fā)現(xiàn)失效的Region server并重新分配其上的region
管理用戶對table的增刪改查操作
Region Server
Regionserver維護(hù)region堰塌,處理對這些region的IO請求
Regionserver負(fù)責(zé)切分在運(yùn)行過程中變得過大的region
Zookeeper作用
通過選舉赵刑,保證任何時候,集群中只有一個master场刑,Master與RegionServers 啟動時會向ZooKeeper注冊
存貯所有Region的尋址入口
實時監(jiān)控Region server的上線和下線信息般此。并實時通知給Master
存儲HBase的schema和table元數(shù)據(jù)
默認(rèn)情況下,HBase 管理ZooKeeper 實例牵现,比如恤煞, 啟動或者停止ZooKeeper
Zookeeper的引入使得Master不再是單點(diǎn)故障
該機(jī)制用于數(shù)據(jù)的容錯和恢復(fù):
每個HRegionServer中都有一個HLog對象,HLog是一個實現(xiàn)Write AheadLog的類施籍,在每次用戶操作寫入MemStore的同時居扒,也會寫一份數(shù)據(jù)到HLog文件中(HLog文件格式見后續(xù)),HLog文件定期會滾動出新的丑慎,并刪除舊的文件(已持久化到StoreFile中的數(shù)據(jù))喜喂。當(dāng)HRegionServer意外終止后,HMaster會通過Zookeeper感知到竿裂,HMaster首先會處理遺留的HLog文件玉吁,將其中不同Region的Log數(shù)據(jù)進(jìn)行拆分,分別放到相應(yīng)region的目錄下腻异,然后再將失效的region重新分配进副,領(lǐng)取到這些region的HRegionServer在Load Region的過程中,會發(fā)現(xiàn)有歷史HLog需要處理悔常,因此ReplayHLog中的數(shù)據(jù)到MemStore中影斑,然后flush到StoreFiles,完成數(shù)據(jù)恢復(fù)
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實例
Region定位流程:
尋找RegionServer
ZooKeeper-->-ROOT-(單Region)-->.META.-->用戶表
-ROOT-
表包含.META.表所在的region列表空免,該表只會有一個Region空另;
Zookeeper中記錄了-ROOT-表的location。
.META.
表包含所有的用戶空間region列表鼓蜒,以及RegionServer的服務(wù)器地址痹换。
Hbase使用場景
大數(shù)據(jù)量存儲,大數(shù)據(jù)量高并發(fā)操作
需要對數(shù)據(jù)隨機(jī)讀寫操作
讀寫訪問均是非常簡單的操作
Hbase與HDFS對比
兩者都具有良好的容錯性和擴(kuò)展性都弹,都可以擴(kuò)展到成百上千個節(jié)點(diǎn)娇豫;
HDFS適合批處理場景
不支持?jǐn)?shù)據(jù)隨機(jī)查找
不適合增量數(shù)據(jù)處理
不支持?jǐn)?shù)據(jù)更新