HBase依賴Zookeeper原因分析

本篇內(nèi)容介紹了“HBase依賴Zookeeper原因分析”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(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)用從零開始實(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)聽,一旦配置信息發(fā)生變化,每個(gè)應(yīng)用程序就會(huì)收到 zookeeper 的通知,然后從 zookeeper 獲取新的配置信息應(yīng)用到系統(tǒng)中。

數(shù)據(jù)節(jié)點(diǎn)(znode):

    Zookeeper維護(hù)一個(gè)類似文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu),每一個(gè)節(jié)點(diǎn)是指數(shù)據(jù)模型中的數(shù)據(jù)單元,稱為ZNode。ZooKeeper將所有數(shù)據(jù)存儲(chǔ)在內(nèi)存中,數(shù)據(jù)模型是一棵樹(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)單說一下,其他命令請(qǐng)自行百度:

  1. create:在樹中的某個(gè)位置創(chuàng)建一個(gè)節(jié)點(diǎn)。

  2. delete:刪除一個(gè)節(jié)點(diǎn)。

  3. exists:測(cè)試一個(gè)節(jié)點(diǎn)是否存在。

  4. get data:讀取節(jié)點(diǎn)數(shù)據(jù)。

  5. set data:向節(jié)點(diǎn)中寫入數(shù)據(jù)。

  6. get children:檢索某節(jié)點(diǎn)的子節(jié)點(diǎn)列表。

  7. sync:等待要傳播的數(shù)據(jù)。

這里專門說下get path 獲取節(jié)點(diǎn)信息

[zk: salver158.hadoop.unicom:2181(CONNECTED) 3] get /hbase-unsecure cZxid = 0x1a005eda9b   //每個(gè)znode被賦予一個(gè)全局唯一的ID,我們稱之為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的關(guān)系

    HBase主要用ZooKeeper來實(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ī)制類似(后面我會(huì)專門寫一篇文章講解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)來發(fā)現(xiàn)可用RegionServer,還可以利用臨時(shí)節(jié)點(diǎn)來跟蹤及其故障和網(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)超過限定時(shí)間后,Zookeeper服務(wù)器會(huì)判定會(huì)話超時(shí),并自動(dòng)刪除屬于它的臨時(shí)會(huì)話。與此同時(shí),HMaster 則會(huì)接收到 ZooKeeper 的 NodeDelete 通知,從而感知到某個(gè)節(jié)點(diǎn)斷開,并立即開始容錯(cuò)工作。

   備注

       為啥選擇zookeeper干這個(gè)事?因?yàn)殡S著集群節(jié)點(diǎn)越來越多,HMaster的管理負(fù)擔(dān)會(huì)越來越重,另外它自身也有掛掉的可能,因此數(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遷移、上線、離線,都是通過zookeeper來統(tǒng)一管理的。

5).預(yù)寫日志恢復(fù)

    RegionServer經(jīng)常會(huì)通過WAL預(yù)寫日志進(jìn)行數(shù)據(jù)的恢復(fù),由于RegionServer數(shù)據(jù)量比較大,單個(gè)節(jié)點(diǎn)進(jìn)行恢復(fù)速度比較慢,HMaster會(huì)把WAL預(yù)寫日志進(jìn)行切分,放到Zookeeper的/hbase-unsecure/splitWAL目錄中,讓其他的RegionSever都能參與日志的恢復(fù)工作,提升恢復(fù)速度。ZooKeeper在這里擔(dān)負(fù)起了分布式集群中相互通知和信息持久化的角色。

三、HBase的znode

    HBase在zookeeper的znode的根節(jié)點(diǎn)是通過hbase-site.xml中的“zookeeper.znode.parent”屬性進(jìn)行配置的(/hbase-unsecure),每次HBase集群重啟znode都會(huì)重建,所以如果集群重啟的話,重啟之前直接刪除/hbase-unsecure也是沒有問題的。下面就具體講解下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ī)、掉線沒有。

splitWAL:

    WAL預(yù)寫分割工作分配目錄

backup-masters:

    備用HMaster節(jié)點(diǎn)

table-lock:    

       表鎖節(jié)點(diǎn)會(huì)有所有表

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://bm7419.com/article0/phooio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、移動(dòng)網(wǎng)站建設(shè)網(wǎng)站導(dǎo)航、小程序開發(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í)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)