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