真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

HBase工作原理是什么

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)HBase工作原理是什么,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

目前成都創(chuàng)新互聯(lián)已為上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、綿陽(yáng)服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、香格里拉網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

1. HBase系統(tǒng)架構(gòu)圖

HBase工作原理是什么

整個(gè)HBase架構(gòu)重點(diǎn)關(guān)注幾部分:HMaster、HRegionServer、Zookeeper、HRegion(內(nèi)部包括HLog、StoreFile、MemStore)。

2. HMaster介紹

Hbase集群采用的是master/slave模式,HMaster是集群老大(后面簡(jiǎn)稱Master),統(tǒng)籌管理,所以干的底層雜活不多,負(fù)載不高。

2.1 Master職責(zé)
(1)為RegionServer分配Region。
(2)負(fù)責(zé)RegionServer的負(fù)載均衡。
(3)發(fā)現(xiàn)下線或dead的RegionServer,并重新分配其上的Region。
(4)回收HDFS上的垃圾文件。
(5)處理Schema的更新請(qǐng)求。

2.2 Master工作機(jī)制
(1) master上線
1)從zookeeper上獲取唯一一個(gè)代表active master的鎖,用來(lái)阻止其它master成為master。
2)掃描zookeeper上的server父節(jié)點(diǎn),獲得當(dāng)前可用的region server列表。
3)和每個(gè)region server通信,獲得當(dāng)前已分配的region和region server的對(duì)應(yīng)關(guān)系。
4)掃描.META.region的集合,計(jì)算得到當(dāng)前還未分配的region,將他們放入待分配region列表。 
(2) master下線
由于master只維護(hù)表和region的元數(shù)據(jù),而不參與表數(shù)據(jù)IO的過(guò)程(尋址訪問(wèn)zk和RegionServer,數(shù)據(jù)讀寫(xiě)訪問(wèn)RegionServer),所以Master的負(fù)載很低,master下線僅導(dǎo)致所有元數(shù)據(jù)的修改被凍結(jié)(無(wú)法創(chuàng)建刪除表,無(wú)法修改表的schema,無(wú)法進(jìn)行region的負(fù)載均衡,無(wú)法處理region 上下線,無(wú)法進(jìn)行region的合并,唯一例外的是region的split可以正常進(jìn)行,因?yàn)橹挥衦egion server參與),表的數(shù)據(jù)讀寫(xiě)還可以正常進(jìn)行。因此master下線短時(shí)間內(nèi)對(duì)整個(gè)hbase集群沒(méi)有影響。從上線過(guò)程可以看到,master保存的 信息全是可以冗余信息(都可以從系統(tǒng)其它地方收集到或者計(jì)算出來(lái)),因此,一般hbase集群中總是有一個(gè)master在提供服務(wù),還有一個(gè)以上 的’master’在等待時(shí)機(jī)搶占它的位置。
 
3. HRegionServer介紹

HRegionServer(后面簡(jiǎn)稱RegionSever)是集群中的slave,負(fù)責(zé)處理具體的讀寫(xiě)請(qǐng)求及對(duì)數(shù)據(jù)的compact和split等具體過(guò)程。

3.1 RegionServer職責(zé)
(1) 維護(hù)Master給它分配的Region,并處理這些Region的I/O請(qǐng)求。
(2) 負(fù)責(zé)切分在運(yùn)行過(guò)程中不斷變大的Region。
3.2 RegionServer工作機(jī)制
(1) regionserver上線
master通過(guò)zk來(lái)獲取regionserver信息。當(dāng)某個(gè)regionserver啟動(dòng)時(shí),首先會(huì)在zk的server目錄下建立一個(gè)屬于自己的文件,并獲得該文件的獨(dú)占鎖。由于master訂閱了server目錄的變更消息,所以當(dāng)server目錄下的文件出現(xiàn)新增或變更時(shí),zk會(huì)及時(shí)通知master。

(2) regionserver下線
當(dāng)region server下線時(shí),它和zookeeper的會(huì)話斷開(kāi),zookeeper而自動(dòng)釋放代表這臺(tái)server的文件上的獨(dú)占鎖。而master不斷輪詢 server目錄下文件的鎖狀態(tài)。如果master發(fā)現(xiàn)某個(gè)region server丟失了它自己的獨(dú)占鎖,(或者master連續(xù)幾次和region server通信都無(wú)法成功),master就是嘗試去獲取代表這個(gè)region server的讀寫(xiě)鎖,一旦獲取成功,就可以確定:
1) region server和zookeeper之間的網(wǎng)絡(luò)斷開(kāi)了。
2) region server掛了。
的其中一種情況發(fā)生了,無(wú)論哪種情況,region server都無(wú)法繼續(xù)為它的region提供服務(wù)了,此時(shí)master會(huì)刪除server目錄下代表這臺(tái)region server的文件,并將這臺(tái)region server的region分配給其它還活著的同志。
如果網(wǎng)絡(luò)短暫出現(xiàn)問(wèn)題導(dǎo)致region server丟失了它的鎖,那么region server重新連接到zookeeper之后,只要代表它的文件還在,它就會(huì)不斷嘗試獲取這個(gè)文件上的鎖,一旦獲取到了,就可以繼續(xù)提供服務(wù)。

4. Zookeeper介紹

Zookeeper應(yīng)該可以說(shuō)是在Hadoop生態(tài)中主從結(jié)構(gòu)架構(gòu)的設(shè)計(jì)中是大眾情人,它能夠很好的協(xié)調(diào)整個(gè)集群統(tǒng)統(tǒng)一有序的工作。在HBase的架構(gòu)中,ZooKeeper提供了類似文件系統(tǒng)一樣的訪問(wèn)目錄和文件(稱為znode)的功能,通常分布式文件系統(tǒng)利用它協(xié)調(diào)所有權(quán)、注冊(cè)服務(wù)、監(jiān)聽(tīng)更新。
每臺(tái)Region服務(wù)器在ZooKeeper中注冊(cè)一個(gè)自己的臨時(shí)節(jié)點(diǎn),主服務(wù)器會(huì)利用這些臨時(shí)節(jié)點(diǎn)來(lái)發(fā)現(xiàn)可用服務(wù)器,還可以利用臨時(shí)節(jié)點(diǎn)來(lái)跟蹤機(jī)器故障和網(wǎng)絡(luò)分區(qū)。
在ZooKeeper服務(wù)器中,每個(gè)臨時(shí)節(jié)點(diǎn)都屬于某一個(gè)會(huì)話,這個(gè)會(huì)話是客戶端連接ZooKeeper服務(wù)器后自動(dòng)生成的。每個(gè)會(huì)話在服務(wù)器中有一個(gè)唯一的id,并且客戶端會(huì)以此id不斷的向ZooKeeper發(fā)送“心跳”,一旦發(fā)生故障ZooKeeper客戶端進(jìn)程死掉,ZooKeeper服務(wù)器會(huì)判定該會(huì)話超時(shí),并自動(dòng)刪除屬于它的臨時(shí)節(jié)點(diǎn)。
HBase還可以利用ZooKeeper確保只有一個(gè)主服務(wù)器在運(yùn)行,存儲(chǔ)用于發(fā)現(xiàn)Region的引導(dǎo)位置,作為一個(gè)Region服務(wù)器的注冊(cè)表,一級(jí)實(shí)現(xiàn)其他目的。ZooKeeper是一個(gè)關(guān)鍵組成部分,沒(méi)有它HBase就無(wú)法工作。

Zookeeper的主要功能:

(1) 保證master的唯一性。    原理:master啟動(dòng)時(shí)會(huì)從ZK上獲取一個(gè)active master鎖,阻止其他節(jié)點(diǎn)成為master。 
(2) 實(shí)時(shí)監(jiān)控RegionServer的狀態(tài),將Regionserver上下線的消息及時(shí)告知master。
(3) 存儲(chǔ)所有Region的尋址入口(即ROOT表在哪臺(tái)服務(wù)器上)。
(4) 存儲(chǔ)Hbase的Scema(Zookeeper存的是-ROOT-和.META.這兩張表的location,實(shí)際存在HBase中),包括有哪些table,每個(gè)table有哪些column family。
 

5. Region介紹

Region是HBase存儲(chǔ)和管理數(shù)據(jù)的基本單位。Region和RegionServer是多對(duì)一的關(guān)系,即一個(gè)Region只能同時(shí)被一個(gè)RegionServer使用,而一個(gè)RegionServer可以同時(shí)處理多個(gè)Region。

5.1 Region和Table的關(guān)系

Region實(shí)際是Table在行方向上的一個(gè)個(gè)劃分,一般來(lái)說(shuō)一個(gè)表在初始的時(shí)候只有一個(gè)Region,隨著數(shù)據(jù)的增多,當(dāng)達(dá)到某個(gè)閾值時(shí),ReginServer就會(huì)把這個(gè)Region切分成兩個(gè)Region,以此類推。

5.2 Region細(xì)分

繼續(xù)深究的話,Region還是可以再細(xì)分的,它是由一個(gè)或多個(gè)Store組成的,在這里有必要搞清楚幾個(gè)基本概念:HFile、HLog、StoreFile、MemStore。

上圖反應(yīng)了客戶端對(duì)數(shù)據(jù)請(qǐng)求在底層的流轉(zhuǎn),可以簡(jiǎn)單理解為:HLog實(shí)際就是備份數(shù)據(jù),用來(lái)做災(zāi)難恢復(fù)的;MemStore是緩存數(shù)據(jù),用來(lái)提高讀寫(xiě)效率;StoreFile是最下面一層的存儲(chǔ),它基本等于HFile,前者是相對(duì)于HBase而已邏輯上的存儲(chǔ),后者是相對(duì)于HDFS在物理上的存儲(chǔ)(也就是前面說(shuō)的hbase不管存,數(shù)據(jù)二進(jìn)制文件存在HDFS上,指的就是HFile)。

5.2.1 關(guān)于HLog

(1)HLog 又叫WAL(Write Ahead Log),類似于MySQL中的binlog,用來(lái)做災(zāi)難恢復(fù)的,HLog記錄所有數(shù)據(jù)的變更,一旦數(shù)據(jù)發(fā)生變化就會(huì)在HLog里記錄,所以也可以從這里恢復(fù)。
(2) 每個(gè)RegionServer維護(hù)一個(gè)HLog,而不是每個(gè)Region對(duì)應(yīng)一個(gè)。所以不同的Region(來(lái)自不同的table)的日志就會(huì)混合在一起。
        好處:所有日志都往一個(gè)文件寫(xiě),減少磁盤(pán)尋址次數(shù),提高對(duì)Hbase寫(xiě)的性能。
        缺點(diǎn):假設(shè)某臺(tái)RegionServer下線,正好要恢復(fù)某個(gè)Region,這時(shí)就需要將這個(gè)HLog發(fā)送到其他RegionServer然后再恢復(fù)。
補(bǔ)充:HLog就是一個(gè)普通的Hadoop Sequence File,Sequence File的key為HLogKey對(duì)象(包括數(shù)據(jù)的歸屬信息、tablename、region等信息,還包括sequence number和timestamp),value為Hbase實(shí)際的key-value對(duì)象數(shù)據(jù)。

5.2.2 關(guān)于MemStore

MemStore是擋在StoreFile前面的一層緩存,當(dāng)Region請(qǐng)求到達(dá)時(shí),會(huì)先去在MemStore中查找,若命中直接返回結(jié)果,這樣可以避免對(duì)大規(guī)模的StoreFile進(jìn)行掃描。

6. 數(shù)據(jù)讀寫(xiě)過(guò)程
數(shù)據(jù)在更新時(shí)首先寫(xiě)入Log(WAL log)和內(nèi)存(MemStore)中,MemStore中的數(shù)據(jù)是排序的,當(dāng)MemStore累計(jì)到一定閾值時(shí),就會(huì)創(chuàng)建一個(gè)新的MemStore,并且將老的MemStore添加到Flush隊(duì)列,由單獨(dú)的線程Flush到磁盤(pán)上,成為一個(gè)StoreFile。于此同時(shí),系統(tǒng)會(huì)在Zookeeper中記錄一個(gè)Redo Point,表示這個(gè)時(shí)刻之前的變更已經(jīng)持久化了。(minor Compact)當(dāng)系統(tǒng)出現(xiàn)意外時(shí),可能導(dǎo)致內(nèi)存(MemStore)中的數(shù)據(jù)丟失,此時(shí)使用Log(WAL log)來(lái)恢復(fù)Checkpoint之后的數(shù)據(jù)。StoreFile是只讀的,一旦創(chuàng)建后就不可以再修改。因此Hbase的更新其實(shí)是不斷追加的操作。當(dāng)一個(gè)Store中的StoreFile達(dá)到一定的閾值后,就會(huì)進(jìn)行一次合并(Major Compact),將對(duì)同一個(gè)Key的修改合并到一起,形成一個(gè)大的StoreFile,當(dāng)StoreFile的大小達(dá)到一定閾值后,又會(huì)對(duì) StoreFile進(jìn)行Split,等分為兩個(gè)StoreFile。由于對(duì)表的更新是不斷追加的,處理讀請(qǐng)求時(shí),需要訪問(wèn)Store中全部的 StoreFile和MemStore,將他們的按照row key進(jìn)行合并,由于StoreFile和MemStore都是經(jīng)過(guò)排序的,并且StoreFile帶有內(nèi)存中索引,合并的過(guò)程還是比較快。

6.1 讀請(qǐng)求
(1)客戶端通過(guò)ZK和ROOT表、META表找到目標(biāo)數(shù)據(jù)所在的RegionServer。
(2)請(qǐng)求RegionServer查找目標(biāo)數(shù)據(jù)。
(3)由RegionServer定位到目標(biāo)數(shù)據(jù)所在的Region,發(fā)出查詢請(qǐng)求。
(4)Region會(huì)先從Memstore中查,命中則返回(先查Memstore的好處是在內(nèi)存中,查詢快)。
(3)若Memstore沒(méi)有,則掃描StoreFile(這個(gè)過(guò)程可以能會(huì)掃描很多StorFfiel,借助Bloomfilter)。

6.2 寫(xiě)請(qǐng)求
(1)Client向Regionserver提交寫(xiě)請(qǐng)求。
(2)Regionserver找到目標(biāo)Region。
(3)Region會(huì)檢查數(shù)據(jù)是否與Schema一致。
(4)若客戶端沒(méi)有指定時(shí)間戳,默認(rèn)取當(dāng)前時(shí)間。
(5)將數(shù)據(jù)更新到WAL Log。
(6)將數(shù)據(jù)寫(xiě)入到Memstore。
(7)判斷Memstore是否需要Flush為Storefile文件。

7. -ROOT-和.Meta.兩張內(nèi)置表介紹

Hbase內(nèi)置兩張表(-ROOT-、.META.)來(lái)管理region相關(guān)信息,且這兩張表結(jié)構(gòu)相同。

大致尋址過(guò)程:client-->Zookeeper-->-ROOT-表-->.META.表-->RegionServer-->Region-->client

關(guān)于兩張表的具體介紹及實(shí)例尋址過(guò)程,參考:http://greatwqs.iteye.com/blog/1838904

注意幾點(diǎn):
(1) 為什么要設(shè)計(jì)兩張一模一樣的表?
首先要注意這兩張表也是兩張普通的表,所以有可能會(huì)有多個(gè)region的情況(其實(shí)只有.META.表可能會(huì)有,.ROOT.很?。?。
.META.表用來(lái)存儲(chǔ)的是region相關(guān)的信息,每一行代表一個(gè)region,.META.表可能也會(huì)有很多region,且散落到不同的regionServer上,所以就用-ROOT-表,以同樣的原理來(lái)管理.META.表的region(有點(diǎn)繞,其實(shí)就是公司管理的層級(jí)關(guān)系),然后把-ROOT-表的地址放到Zookeeper上(默認(rèn)地址:/hbase/root-region-server),這樣大家就知道所有查詢的入口了。

(2) -ROOT-表并不會(huì)很大,永遠(yuǎn)不會(huì)被split,所以不會(huì)出現(xiàn)-ROOT-表也有很多region的情況,就避免了一直套表的現(xiàn)象了。
(3) -ROOT-表是放在內(nèi)存中的,所以查詢很快。
(4) 其實(shí)client的每次請(qǐng)求并非都走這么復(fù)雜的過(guò)程,client會(huì)將查詢過(guò)的位置信息緩存起來(lái),緩存不會(huì)主動(dòng)失效。

上述就是小編為大家分享的HBase工作原理是什么了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


名稱欄目:HBase工作原理是什么
瀏覽地址:http://weahome.cn/article/gejsgi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部