本篇內(nèi)容介紹了“HBase依賴Zookeeper原因分析”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
目前創(chuàng)新互聯(lián)建站已為上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站托管、服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、大連網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
一、ZooKeeper相關(guān)知識(shí):
概念:
Zookeeper是一個(gè)分布式應(yīng)用程序協(xié)調(diào)服務(wù),提供了簡(jiǎn)單易用的接口和性能高效、功能穩(wěn)定的系統(tǒng)讓用戶可以很輕松解決分布式應(yīng)用程序下面的出現(xiàn)的協(xié)調(diào)服務(wù),確保避免出現(xiàn)競(jìng)態(tài)條件或者死鎖等錯(cuò)誤。其設(shè)計(jì)目標(biāo)是減輕分布式應(yīng)用從零開(kāi)始實(shí)現(xiàn)分布式協(xié)調(diào)服務(wù)的壓力。
假設(shè)我們的程序是分布式部署在多臺(tái)機(jī)器上,如果我們要改變程序的配置文件,需要逐臺(tái)機(jī)器去修改,非常麻煩,現(xiàn)在把這些配置全部放到zookeeper上去,保存在 zookeeper 的某個(gè)目錄節(jié)點(diǎn)中,然后所有相關(guān)應(yīng)用程序?qū)@個(gè)目錄節(jié)點(diǎn)進(jìn)行監(jiān)聽(tīng),一旦配置信息發(fā)生變化,每個(gè)應(yīng)用程序就會(huì)收到 zookeeper 的通知,然后從 zookeeper 獲取新的配置信息應(yīng)用到系統(tǒng)中。
數(shù)據(jù)節(jié)點(diǎn)(znode):
Zookeeper維護(hù)一個(gè)類(lèi)似文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu),每一個(gè)節(jié)點(diǎn)是指數(shù)據(jù)模型中的數(shù)據(jù)單元,稱(chēng)為ZNode。ZooKeeper將所有數(shù)據(jù)存儲(chǔ)在內(nèi)存中,數(shù)據(jù)模型是一棵樹(shù)(ZNode Tree),由斜杠(/)進(jìn)行分割的路徑,就是一個(gè)ZNode,如/hbase-unsecure/replication,其中hbase-unsecure和replication都是ZNode。每個(gè)ZNode上都會(huì)保存自己的數(shù)據(jù)內(nèi)容,同時(shí)會(huì)保存一系列屬性信息。每個(gè)znode由三部分組成。
stat:狀態(tài)信息,描述該znode的版本,權(quán)限等信息
data:與該znode關(guān)聯(lián)的數(shù)據(jù)
children:該znode下的子節(jié)點(diǎn)
zkCli.sh使用:
ZooKeeper提供了一個(gè)交互式shell,允許各種Znode操作,就像在典型的文件系統(tǒng)中一樣。還可以使用get命令獲得關(guān)于znode內(nèi)容的一些信息。
兩種方式:
#hbase命令直接登錄[hbase@salver158 ~]$ hbase zkcli
#zookeeper客戶端腳本登錄[hbase@salver158 ~]$ /usr/hdp/2.6.3.0-235/zookeeper/bin/zkCli.sh -server salver158.hadoop.unicom:2181
zkCli客戶端中輸入 help 命令(其實(shí)輸入任何 zkCli 不能識(shí)別的命令,都會(huì)列出所有的命令),查看可用的命令:
[zk: salver158.hadoop.unicom:2181(CONNECTED) 0] helpZooKeeper -server host:port cmd args stat path [watch] set path data [version] ls path [watch] delquota [-n|-b] path ls2 path [watch] setAcl path acl setquota -n|-b val path history redo cmdno printwatches on|off delete path [version] sync path listquota path rmr path get path [watch] create [-s] [-e] path data acl addauth scheme auth quit getAcl path close connect host:port
有幾個(gè)比較重要的命令我這里結(jié)合HBase的znode簡(jiǎn)單說(shuō)一下,其他命令請(qǐng)自行百度:
create
:在樹(shù)中的某個(gè)位置創(chuàng)建一個(gè)節(jié)點(diǎn)。
delete
:刪除一個(gè)節(jié)點(diǎn)。
exists
:測(cè)試一個(gè)節(jié)點(diǎn)是否存在。
get data
:讀取節(jié)點(diǎn)數(shù)據(jù)。
set data
:向節(jié)點(diǎn)中寫(xiě)入數(shù)據(jù)。
get children
:檢索某節(jié)點(diǎn)的子節(jié)點(diǎn)列表。
sync
:等待要傳播的數(shù)據(jù)。
這里專(zhuān)門(mén)說(shuō)下get path 獲取節(jié)點(diǎn)信息
[zk: salver158.hadoop.unicom:2181(CONNECTED) 3] get /hbase-unsecure cZxid = 0x1a005eda9b //每個(gè)znode被賦予一個(gè)全局唯一的ID,我們稱(chēng)之為zxidctime = Thu Aug 15 14:46:01 CST 2019 //znode創(chuàng)建時(shí)間mZxid = 0x1a005eda9b //mtime = Thu Aug 15 14:46:01 CST 2019 //znode最后一次修改時(shí)間pZxid = 0x2100398049 //最后一次修改該znode子節(jié)點(diǎn)的 zxidcversion = 89 //該節(jié)點(diǎn)子節(jié)點(diǎn)的版本dataVersion = 0 //該節(jié)點(diǎn)內(nèi)容的版本,每次修改內(nèi)容,版本都會(huì)增加aclVersion = 0 //該節(jié)點(diǎn)的 ACL 版本ephemeralOwner = 0x0 //如果該節(jié)點(diǎn)是臨時(shí)節(jié)點(diǎn)(ephemeral node),會(huì)列出該節(jié)點(diǎn)所在客戶端的 session id;如果不是臨時(shí)節(jié)點(diǎn),該值為 0dataLength = 0 //該節(jié)點(diǎn)存儲(chǔ)的數(shù)據(jù)長(zhǎng)度numChildren = 17 //該節(jié)點(diǎn)子節(jié)點(diǎn)的個(gè)數(shù)
另外一個(gè)命令:sync path
sync方法會(huì)強(qiáng)制客戶端所連接的服務(wù)器狀態(tài)與leader的狀態(tài)同步,這樣在讀取 path 的值就是最新的值了。
HBase主要用ZooKeeper來(lái)實(shí)現(xiàn)HA選舉與主備集群主節(jié)點(diǎn)的切換、系統(tǒng)容錯(cuò)、RootRegion管理、Region狀態(tài)管理和分布式SplitWAL任務(wù)管理等。
1).HA管理:
集群的主節(jié)點(diǎn)的選舉和主備的切換跟Hadoop中Namnode的HA的選舉和切換機(jī)制類(lèi)似(后面我會(huì)專(zhuān)門(mén)寫(xiě)一篇文章講解Namenode的HA)。
2).RegionServer管理:
HBase集群?jiǎn)?dòng)時(shí),每臺(tái)RegionServer在Zookeeper中/hbase-unsecure/rs注冊(cè)一個(gè)自己的臨時(shí)節(jié)點(diǎn),HMaster會(huì)利用這些臨時(shí)節(jié)點(diǎn)來(lái)發(fā)現(xiàn)可用RegionServer,還可以利用臨時(shí)節(jié)點(diǎn)來(lái)跟蹤及其故障和網(wǎng)絡(luò)分區(qū)。這些臨時(shí)節(jié)點(diǎn)相當(dāng)于一個(gè)“會(huì)話”,會(huì)話是客戶端鏈接上Zookeeper服務(wù)器之后自動(dòng)生成的。每個(gè)會(huì)話有一個(gè)唯一的id,RegionServer會(huì)用這個(gè)id不斷向Zookeeper服務(wù)器發(fā)送“心跳”,一旦RegionServer發(fā)生故障,發(fā)送心跳則會(huì)停止,當(dāng)超過(guò)限定時(shí)間后,Zookeeper服務(wù)器會(huì)判定會(huì)話超時(shí),并自動(dòng)刪除屬于它的臨時(shí)會(huì)話。與此同時(shí),HMaster 則會(huì)接收到 ZooKeeper 的 NodeDelete 通知,從而感知到某個(gè)節(jié)點(diǎn)斷開(kāi),并立即開(kāi)始容錯(cuò)工作。
備注:
為啥選擇zookeeper干這個(gè)事?因?yàn)殡S著集群節(jié)點(diǎn)越來(lái)越多,HMaster的管理負(fù)擔(dān)會(huì)越來(lái)越重,另外它自身也有掛掉的可能,因此數(shù)據(jù)還需要持久化,zookeeper通常是一個(gè)集群,這樣穩(wěn)定性相對(duì)就高了很多。
3).元數(shù)據(jù)Region:
每次客戶端向HBase發(fā)起請(qǐng)求時(shí),都會(huì)去查詢元數(shù)據(jù)Region,默認(rèn)目錄是:
/hbase-unsecure/meta-region-server,如果發(fā)生region的遷移,zookeeper都會(huì)進(jìn)行試試更新,以便其他客戶端請(qǐng)求時(shí),總能查到最新的RootRegion信息。
4).Region管理:
的狀態(tài)經(jīng)常會(huì)發(fā)生變更,比如Region遷移、上線、離線,都是通過(guò)zookeeper來(lái)統(tǒng)一管理的。
5).預(yù)寫(xiě)日志恢復(fù)
RegionServer經(jīng)常會(huì)通過(guò)WAL預(yù)寫(xiě)日志進(jìn)行數(shù)據(jù)的恢復(fù),由于RegionServer數(shù)據(jù)量比較大,單個(gè)節(jié)點(diǎn)進(jìn)行恢復(fù)速度比較慢,HMaster會(huì)把WAL預(yù)寫(xiě)日志進(jìn)行切分,放到Zookeeper的/hbase-unsecure/splitWAL目錄中,讓其他的RegionSever都能參與日志的恢復(fù)工作,提升恢復(fù)速度。ZooKeeper在這里擔(dān)負(fù)起了分布式集群中相互通知和信息持久化的角色。
三、HBase的znode
HBase在zookeeper的znode的根節(jié)點(diǎn)是通過(guò)hbase-site.xml中的“zookeeper.znode.parent”屬性進(jìn)行配置的(/hbase-unsecure),每次HBase集群重啟znode都會(huì)重建,所以如果集群重啟的話,重啟之前直接刪除/hbase-unsecure也是沒(méi)有問(wèn)題的。下面就具體講解下HBase在ZooKeeper中znode目錄結(jié)構(gòu):
replication:
meta-region-server:
HBase元數(shù)據(jù)表Region位置信息,在哪個(gè)Regionsever上;
rs:
RS的臨時(shí)節(jié)點(diǎn),應(yīng)該是只有在線RegionServer節(jié)點(diǎn),宕機(jī)、掉線沒(méi)有。
splitWAL:
WAL預(yù)寫(xiě)分割工作分配目錄
backup-masters:
備用HMaster節(jié)點(diǎn)
table-lock:
flush-table-proc:
flush進(jìn)程
region-in-transition:
處于RIT狀態(tài)的region
online-snapshot:
快照
master:
激活HMaster節(jié)點(diǎn)
balancer:
正在進(jìn)行balance的節(jié)點(diǎn)
recovering-regions:
正在恢復(fù)的region
namespace:
HBase集群所有命名空間
hbaseid:
HBase集群的唯一ID
table:
集群中各個(gè)表信息
“HBase依賴Zookeeper原因分析”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
當(dāng)前文章:HBase依賴Zookeeper原因分析
網(wǎng)址分享:http://www.rwnh.cn/article0/phooio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航、小程序開(kāi)發(fā)、做網(wǎng)站、網(wǎng)站設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)