https://blog.csdn.net/u013332124/article/details/100125269
一、Hbase中的4大組件
1咕晋、hbase-client
客戶端,用來訪問hbase集群。可以和Hbase交互宝鼓,也可以和HRegionServer交互倘潜。都是通過hbase rpc來訪問對應的接口吹零。
這里的客戶端模式有多種,可以是Thrift滨嘱、Avro峰鄙、Rest等。
另外太雨,hbase-client自身會緩存region的一些信息吟榴。
2、Zookeeper
作用:
- HMaster的HA囊扳,哪個HMaster先搶到zk上的鎖吩翻,哪個就是active
- 存儲-ROOT-表的地址,HMaster的地址
- 存儲所有HRegionServer的狀態(tài)锥咸,監(jiān)控HRegionServer的上下線
- 存儲Hbase的一些schema和table的元數(shù)據
3狭瞎、HMaster
HMaster可以啟動多個,通過選舉機制來保證只有一個HMaster正常運行并提供服務搏予,其他的HMaster作為standby來保證HA熊锭。
HMaster主要負責表和Region的管理工作。如:
- 用戶對表的增刪改查
- 管理RegionServer的負載均衡,調整Region的分布
- 在RegionServer宕機或下線后碗殷,負責遷移RegionServer上的Region到其他的RegionServer上
- Region在分裂后精绎,負責分配新的Region
4、HRegionServer
HRegionServer是hbase中真正的工作節(jié)點锌妻,主要負責響應用戶的I/O請求仿粹,向HDFS文件系統(tǒng)讀寫數(shù)據堕仔,以及Region的數(shù)據文件的合并和拆分等,是Hbase中最核心的模塊。
在Hbase中唤冈,一張表由多個的HRegion組成,一個HRegionServer中管理著多個HRegion對象傅物。而一個HRegion由多個HStore組成圆米,每個HStore對象都對應著表的一個列族(Column Family)也祠。之后堪旧,一個HStore又由一個MemStore和多個StoreFile組成。這些StoreFile就是hbase存儲在hdfs上的數(shù)據文件干厚,MemStore表示還在內存中未刷新到文件上的那些數(shù)據所坯。
MemStore是基于LSM算法來寫數(shù)據的状土,當大小達到一定的量后训桶,會將內存中的數(shù)據刷新到磁盤,形成一個新的StoreFile置侍。隨著程序的不斷運行墅垮,StoreFile的數(shù)量會越來越多,所以HRegionServer還需要定期的去合并這些StoreFile耕漱。
另外算色,當數(shù)據越來越多,一個Region下的StoreFile的總大小會越來越大螟够,為了更好的查詢性能灾梦,HRegionServer會負責將達到一定大小的Region分裂成兩個Region峡钓。分配的過程大概就是原Region下線,然后分裂出來的兩個新Region由HMaster來分配給相應的HRegionServer(根據負載均衡算法)若河。
HRegionServer還有一個HLog對象能岩,主要實現(xiàn)了WAL機制。因為hbase是將數(shù)據先寫到內存萧福,堆積到一定程度才刷新到磁盤拉鹃,如果HRegionServer突然宕機,就會導致一部分數(shù)據丟失鲫忍。所以通過WAL機制膏燕,我們可以保證HRegionServer宕機后數(shù)據依舊可以通過WAL日志來恢復。每一個HRegionServer實例只會有一個HLog對象悟民,也就是該HRegionServer上各個表的HRegion的寫操作全部記錄在一個WAL文件中坝辫。
在HRegionServer宕機后,主要數(shù)據恢復流程大概如下:
- HMaster通過zk檢測到有HRegionServer下線射亏,開始處理它遺留的WAL文件
- 將該WAL文件中不同Region的數(shù)據進行拆分近忙,然后放到對應的Region的目錄下
- 接著HMaster開始將這些失效的Region進行分配,也就是各個在線的HRegionServer都可能領到這些Region
- HRegionServer實例分配到Region后智润,發(fā)現(xiàn)對應的Region目錄下有WAL文件需要處理及舍,就會讀取這些數(shù)據進行回放,數(shù)據也就重新加載到MemStore中去了
二做鹰、Hbase 組件的HA保證
1击纬、zk的HA保證
作為一個分布式協(xié)調系統(tǒng),zk本身就有做HA钾麸。只要有足夠的zk實例在運行更振,zk就可以正常的提供服務。
zk一般建議部署單數(shù)臺的實例饭尝,這主要和他的選舉機制有關肯腕。zk在讀數(shù)據的時候可以去任何一臺節(jié)點讀取數(shù)據,但是在寫數(shù)據時需要把請求轉發(fā)給leader節(jié)點進行處理钥平,如果無法選出leader節(jié)點的話实撒,zk集群是無法正常工作的。leader的選舉規(guī)則是某個節(jié)點必須獲得超過一半的選票才可以成為leader涉瘾,所以如果掛掉n/2臺知态,選舉無法進行,zk集群就無法提供服務了立叛。舉幾個例子:
- 假設有2臺zk節(jié)點负敏,掛掉了一臺后,只剩下一臺zk節(jié)點秘蛇,這時候只能獲取到一個投票其做,沒有超過1/2顶考,所以剩下的那臺zk節(jié)點也無法成為leader,集群無法提供服務(此時容忍度是可以掛掉0臺)
- 假設有3臺zk節(jié)點妖泄,掛掉了一臺后驹沿,只剩下2臺zk節(jié)點,這時候可以獲取到2個投票蹈胡,占2/3渊季,超過了1/2,所以zk可以選出leader审残,是可以正常工作的(此時容忍度是可以掛掉1臺)
- 假設有4臺zk節(jié)點梭域,掛掉兩臺后,只剩下兩臺zk節(jié)點搅轿,這時候只能獲取到兩個投票,沒有超過1/2富玷,所以剩下的那臺zk節(jié)點也無法成為leader璧坟,集群無法提供服務(此時容忍度是可以掛掉1臺)
從上面3個例子可以看出,1臺zk節(jié)點和2臺zk節(jié)點的容忍度都是0臺赎懦,3臺zk節(jié)點和4臺zk節(jié)點的容忍度都是1臺雀鹃。可以推出2n-1和2n的效果是一樣的励两,沒必要花更多的資源去部署多余的zk節(jié)點黎茎。因此普遍建議部署奇數(shù)臺zk節(jié)點即可。
hbase有許多地方都依賴于zk当悔,如果zk無法正常工作傅瞻,會嚴重影響hbase的運行。因此建議zk至少部署3個實例盲憎。
2嗅骄、HMaster的HA保證
HMaster一般采用一主多備的方式來保證HA。HMaster在啟動后通過嘗試創(chuàng)建zk節(jié)點來成為Active饼疙,其他沒有創(chuàng)建成果的則成為standby溺森。如果active節(jié)點的HMaster因為一些原因掛掉了,standby的HMaster實例就可以迅速成為新的active然后開始工作窑眯。
HMaster的HA依賴于zk屏积,因此只要zk能正常提供服務,HMaster只要部署2臺即可保證高可用磅甩。
3炊林、HRegionServer的HA保證
HRegionServer只是一個工作節(jié)點,負責一部分的Region更胖,因此只要不是所有的HRegionServer全掛了铛铁,都不會對hbase有什么影響隔显。
HRegionServer下線后,HMaster會將它負責的那些Region分發(fā)給其他的HRegionServer來管理饵逐。