主從架構(gòu):HmasterHRegionServer
協(xié)調(diào)服務(wù)Zookeeper協(xié)調(diào)hmaster與hregionServer
底層hbase數(shù)據(jù)存儲hbase文件中
Client與zookeeper和hregionServer交互不與Hmaster交互類似于hdfs
namenode和datanode
客戶端Client:
整個(gè)hbase集群的入口進(jìn)行表的增刪查改操作入口與zookeeper進(jìn)行一系列的的交互
使用hbase
rpc機(jī)制與hmaster、hregionServer進(jìn)行通信
與hmaster通信進(jìn)行管理類的操作
與hregionserver通信進(jìn)行讀寫類的操作表的交互
包含訪問hbase的接口,并維護(hù)cache加快對hbase的訪問窝爪,與hregionServer交互
協(xié)調(diào)服務(wù)zookeeper
保證任何時(shí)候呈宇,集群中只有一個(gè)master HA解決單節(jié)點(diǎn)故障
存儲所有region的尋址入口
實(shí)時(shí)監(jiān)控Region server的上線和下線信息并實(shí)時(shí)通知給master
存儲hbase的schema和table元數(shù)據(jù)
Hbase主節(jié)點(diǎn)Hmaster
通過zookeeper選舉機(jī)制解決單節(jié)點(diǎn)故障問題
管理用戶對表table的增刪改查操作主要是針對表的管理不是表數(shù)據(jù)的管理
管理HregionServer的負(fù)載均衡和調(diào)整Region的分布
在Region Split(擴(kuò)大)后,負(fù)責(zé)新Region的分配
Hmaster失效僅會導(dǎo)致所有元數(shù)據(jù)無法被修改,表的數(shù)據(jù)讀寫還是可以正常進(jìn)行
RegionServer節(jié)點(diǎn):
維護(hù)Hregion并往HDFS中寫數(shù)據(jù)
當(dāng)表的大小超過設(shè)置時(shí)候,split HRegion
在Hregion Server停機(jī)后,負(fù)責(zé)失效HregionServer上的Region遷移
Hbase與Zookeeper
Hbase元數(shù)據(jù)存儲在zookeeper中
默認(rèn)情況下秸架,Hbase(自帶zookeeper,生產(chǎn)環(huán)境中一般使用外置通用的的zookeeper)管理Zookeeper的實(shí)例比如啟動或停止zookeeper
Zookeeper解決Hbase單點(diǎn)故障問題zookeeper選舉機(jī)制
Hmaster與HregionServer啟動時(shí)會向Zookeeper注冊
Zookeeper文件->root表信息(0.96后不存儲root表信息)->meta Data->user Table
尋找RegionServer過程:
Zookeeper(讀取zookeeper找到root表位置) ->
Root (root表包含meta表所在的region列表該表只會有一個(gè)Region
zookeeper中記錄了root的location)
Meta(meta表包含所有用戶控件region列表以及RegionServer服務(wù)器的地址)
用戶表
Client第一次操作后咆蒿,會將root meta緩存到本地不需要再訪問zoookeeper
Hbase容錯(cuò):
Master容錯(cuò):zookeeper重新選擇一個(gè)新的master
無master過程中东抹,數(shù)據(jù)讀取照常進(jìn)行客戶端讀取數(shù)據(jù)無需經(jīng)過hmaster
無master過程中,region切分蜡秽、負(fù)載均衡等無法進(jìn)行
RegionServer容錯(cuò):定時(shí)向zookeeper匯報(bào)心跳如果一段時(shí)間未出現(xiàn)心跳府阀,master將該RegionServer的region重新分配到其他RegionServer
失效服務(wù)器上的預(yù)寫日志由主服務(wù)器進(jìn)行分割并派送給新的RegionServer
Zookeeper容錯(cuò):zookeeper高可靠的服務(wù)不存在單點(diǎn)故障
HBase數(shù)據(jù)存儲:
HLog HFileStoreFile是對HFile做一層封裝
插入一條數(shù)據(jù)寫兩份文件一個(gè)是HLog文件二進(jìn)制日志文件
Region文件,內(nèi)存中寫數(shù)據(jù)-memstore文件達(dá)到一定大小后StoreFile文件
Hbase中所有數(shù)據(jù)文件都存儲在hadoop
hdfs文件系統(tǒng)上芽突,格式主要有:
HFile:Hbase中keyValue數(shù)據(jù)的存儲格式试浙,Hfile是hadoop的二進(jìn)制格式文件,實(shí)際上StoreFile就是對HFile做了輕量級包裝寞蚌,即StoreFile底層就是HFile
HLogFile:Hbase中WAL write
ahead log的存儲格式田巴,物理上是hadoop的sequence file帶項(xiàng)目符號的內(nèi)容。在機(jī)器學(xué)習(xí)的迭代計(jì)算中非常有優(yōu)勢
Delete是針對數(shù)據(jù)打上標(biāo)簽挟秤,后期進(jìn)行compactor時(shí)候壹哺,再進(jìn)行刪除操作。
不是立即刪除艘刚。
Log flusher -> HLog線程同步
HRegionServer:
其管理一些列Hregion對象
每個(gè)HRegion對應(yīng)Table中一個(gè)Region管宵,HRegion由多個(gè)HStore組成
每個(gè)HStore對應(yīng)Table中一個(gè)Column Family的存儲
Column Family就是一個(gè)集中地存儲單元,將具有IO特性的Column放在一個(gè)Column
Family會更高效
版本合并和數(shù)據(jù)刪除:刪除的數(shù)據(jù)是客戶端打了標(biāo)簽的數(shù)據(jù),即之前delete的數(shù)據(jù)。
Hbase的寫操作非橙裰模快鹿寻,直接往內(nèi)存中寫數(shù)據(jù)素跺。
所有的更新和刪除操作都是在conpact階段做的。
StoreFile文件結(jié)構(gòu):
StoreFile以HFile格式保存在HDFS上
Data Block段-保存表中的數(shù)據(jù),可以被壓縮
Meta block段可選,保存用戶自定義的kv對埠居,可以被壓縮
File info段,HFile的元信息事期,不壓縮用戶也可以在這一部分添加自己的元信息
Data block index段– data block索引滥壕,每條索引的key是被索引的block的第一條記錄的key
Meta block index段meta block索引
Trailer定長保存每一段的偏移量
類似于Mysql的banglog用于做災(zāi)難恢復(fù)集群掛了下次啟動根據(jù)日志恢復(fù)