CGFT考點(diǎn):HBase系統(tǒng)架構(gòu)包括什么?HBase的系統(tǒng)架構(gòu)包括客戶(hù)端、Zookeeper服務(wù)器、Master主服務(wù)器、Region服務(wù)器。需要說(shuō)明的是,HBase一般采用HDFS作為底層數(shù)據(jù)存儲(chǔ),因此,圖4-9中加入了HDFS和Hadoop。
1.客戶(hù)端
客戶(hù)端包含訪(fǎng)問(wèn)HBase的接口,同時(shí)在緩存中維護(hù)著已經(jīng)訪(fǎng)問(wèn)過(guò)的Region位置信息,用來(lái)加快后續(xù)數(shù)據(jù)訪(fǎng)問(wèn)過(guò)程。HBase客戶(hù)端使用HBase的RPC機(jī)制與Master和Region服務(wù)器進(jìn)行通信,其中,對(duì)于管理類(lèi)操作,客戶(hù)端與Master進(jìn)行RPC,而對(duì)于數(shù)據(jù)讀寫(xiě)類(lèi)操作,客戶(hù)端則會(huì)與Region服務(wù)器進(jìn)行RPC。
2.Zookeeper服務(wù)器
Zookeeper服務(wù)器并非一臺(tái)單一的機(jī)器,可能是由多臺(tái)機(jī)器構(gòu)成的集群來(lái)提供穩(wěn)定可靠的協(xié)同服務(wù)。Zookeeper能夠很容易地實(shí)現(xiàn)集群管理的功能,如果有多臺(tái)服務(wù)器組成一個(gè)服務(wù)器集群,那么必須要一個(gè)“總管”知道當(dāng)前集群中每臺(tái)機(jī)器的服務(wù)狀態(tài),一旦某臺(tái)機(jī)器不能提供服務(wù),集群中其他機(jī)器必須知道,從而做出調(diào)整重新分配服務(wù)策略。同樣,當(dāng)增加集群的服務(wù)能力時(shí),就會(huì)增加一臺(tái)或多臺(tái)服務(wù)器,同樣,也必須讓“總管”知道。
在HBase服務(wù)器集群中,包含了一個(gè)Master和多個(gè)Region服務(wù)器,Master就是這個(gè)HBase集群的“總管”,它必須知道Region服務(wù)器的狀態(tài)。Zookeeper就可以輕松做到這一點(diǎn),每個(gè)Region服務(wù)器都需要到Zookeeper中進(jìn)行注冊(cè),Zookeeper會(huì)實(shí)時(shí)監(jiān)控每個(gè)Region服務(wù)器的狀態(tài)并通知給Master,這樣,Master就可以通過(guò)Zookeeper隨時(shí)感知到各個(gè)Region服務(wù)器的工作狀態(tài)。
Zookeeper不僅能夠幫助維護(hù)當(dāng)前的集群中機(jī)器的服務(wù)狀態(tài),而且能夠幫助選出一個(gè)“總管”,讓這個(gè)總管來(lái)管理集群。HBase中可以啟動(dòng)多個(gè)Master,但是,Zookeeper可以幫助選舉出一個(gè)Master作為集群的總管,并*在任何時(shí)刻總有*一個(gè)Master在運(yùn)行,這就避免了Master的“單點(diǎn)失效”問(wèn)題。
Zookeeper中保存了-ROOT-表的地址和Master的地址,客戶(hù)端可以通過(guò)訪(fǎng)問(wèn)Zookeeper獲得-ROOT-表的地址,并*終通過(guò)三級(jí)尋址找到所需的數(shù)據(jù)。Zookeeper中還存儲(chǔ)了HBase的模式,包括有哪些表,每個(gè)表有哪些列族。
3. Master
主服務(wù)器Master主要負(fù)責(zé)表和Region的管理工作。
·管理用戶(hù)對(duì)表的增加、刪除、修改、查詢(xún)等操作。
·實(shí)現(xiàn)不同Region服務(wù)器之間的負(fù)載均衡。
·在Region分裂或合并后,負(fù)責(zé)重新調(diào)整Region的分布。
對(duì)發(fā)生故障失效的Region服務(wù)器上的Region進(jìn)行遷
客戶(hù)端訪(fǎng)問(wèn)HBase上數(shù)據(jù)的過(guò)程并不需要Master的參與,客戶(hù)端可以訪(fǎng)問(wèn)Zookeeper獲取-ROOT-表的地址,并*終到達(dá)相應(yīng)的Region服務(wù)器進(jìn)行數(shù)據(jù)讀寫(xiě),Master僅僅維護(hù)著表和Region的元數(shù)據(jù)信息,因此,負(fù)載很低。
任何時(shí)刻,一個(gè)Region只能分配給一個(gè)Region服務(wù)器。Master維護(hù)了當(dāng)前可用的Region服務(wù)器列表,以及當(dāng)前哪些Region分配給了哪些Region服務(wù)器,哪些Region還未被分配。當(dāng)存在未被分配的Region,并且有一個(gè)Region服務(wù)器上有可用空間時(shí),Master就給這個(gè)Region服務(wù)器發(fā)送一個(gè)請(qǐng)求,把該Region分配給它。Region服務(wù)器接受請(qǐng)求并完成數(shù)據(jù)加載后,就開(kāi)始負(fù)責(zé)管理該Region對(duì)象,并對(duì)外提供服務(wù)。
4.Region服務(wù)器
Region服務(wù)器是HBase中*核心的模塊,負(fù)責(zé)維護(hù)分配給自己的Region,并響應(yīng)用戶(hù)的讀寫(xiě)請(qǐng)求。HBase一般采用HDFS作為底層存儲(chǔ)文件系統(tǒng)(見(jiàn)圖4-9),因此,Region服務(wù)器需要向HDFS文件系統(tǒng)中讀寫(xiě)數(shù)據(jù)。采用HDFS作為底層存儲(chǔ),可以為HBase提供可靠穩(wěn)定的數(shù)據(jù)存儲(chǔ),HBase自身并不具備數(shù)據(jù)復(fù)制和維護(hù)數(shù)據(jù)副本的功能,而HDFS可以為HBase提供這些支持。當(dāng)然,HBase也可以不采用HDFS,而是使用其他任何支持Hadoop接口的文件系統(tǒng)作為底層存儲(chǔ),比如本地文件系統(tǒng)或問(wèn)計(jì)算環(huán)境中的AmazonS3。