HBase依賴Zookeeper原因分析

本篇內(nèi)容介紹了“HBase依賴Zookeeper原因分析”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

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

一、ZooKeeper相關(guān)知識:

概念:

  Zookeeper是一個分布式應(yīng)用程序協(xié)調(diào)服務(wù),提供了簡單易用的接口和性能高效、功能穩(wěn)定的系統(tǒng)讓用戶可以很輕松解決分布式應(yīng)用程序下面的出現(xiàn)的協(xié)調(diào)服務(wù),確保避免出現(xiàn)競態(tài)條件或者死鎖等錯誤。其設(shè)計目標(biāo)是減輕分布式應(yīng)用從零開始實現(xiàn)分布式協(xié)調(diào)服務(wù)的壓力。

    假設(shè)我們的程序是分布式部署在多臺機器上,如果我們要改變程序的配置文件,需要逐臺機器去修改,非常麻煩,現(xiàn)在把這些配置全部放到zookeeper上去,保存在 zookeeper 的某個目錄節(jié)點中,然后所有相關(guān)應(yīng)用程序?qū)@個目錄節(jié)點進(jìn)行監(jiān)聽,一旦配置信息發(fā)生變化,每個應(yīng)用程序就會收到 zookeeper 的通知,然后從 zookeeper 獲取新的配置信息應(yīng)用到系統(tǒng)中。

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

    Zookeeper維護一個類似文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu),每一個節(jié)點是指數(shù)據(jù)模型中的數(shù)據(jù)單元,稱為ZNode。ZooKeeper將所有數(shù)據(jù)存儲在內(nèi)存中,數(shù)據(jù)模型是一棵樹(ZNode Tree),由斜杠(/)進(jìn)行分割的路徑,就是一個ZNode,如/hbase-unsecure/replication,其中hbase-unsecure和replication都是ZNode。每個ZNode上都會保存自己的數(shù)據(jù)內(nèi)容,同時會保存一系列屬性信息。每個znode由三部分組成。

  • stat:狀態(tài)信息,描述該znode的版本,權(quán)限等信息

  • data:與該znode關(guān)聯(lián)的數(shù)據(jù)

  • children:該znode下的子節(jié)點

zkCli.sh使用:

    ZooKeeper提供了一個交互式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 命令(其實輸入任何 zkCli 不能識別的命令,都會列出所有的命令),查看可用的命令:

[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

有幾個比較重要的命令我這里結(jié)合HBase的znode簡單說一下,其他命令請自行百度:

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

  2. delete:刪除一個節(jié)點。

  3. exists:測試一個節(jié)點是否存在。

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

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

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

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

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

[zk: salver158.hadoop.unicom:2181(CONNECTED) 3] get /hbase-unsecure cZxid = 0x1a005eda9b   //每個znode被賦予一個全局唯一的ID,我們稱之為zxidctime = Thu Aug 15 14:46:01 CST 2019 //znode創(chuàng)建時間mZxid = 0x1a005eda9b      //mtime = Thu Aug 15 14:46:01 CST 2019 //znode最后一次修改時間pZxid = 0x2100398049  //最后一次修改該znode子節(jié)點的 zxidcversion = 89   //該節(jié)點子節(jié)點的版本dataVersion = 0 //該節(jié)點內(nèi)容的版本,每次修改內(nèi)容,版本都會增加aclVersion = 0  //該節(jié)點的 ACL 版本ephemeralOwner = 0x0  //如果該節(jié)點是臨時節(jié)點(ephemeral node),會列出該節(jié)點所在客戶端的 session id;如果不是臨時節(jié)點,該值為 0dataLength = 0  //該節(jié)點存儲的數(shù)據(jù)長度numChildren = 17  //該節(jié)點子節(jié)點的個數(shù)

 另外一個命令:sync path

sync方法會強制客戶端所連接的服務(wù)器狀態(tài)與leader的狀態(tài)同步,這樣在讀取 path 的值就是最新的值了。

二、hbase與zookeeper的關(guān)系

    HBase主要用ZooKeeper來實現(xiàn)HA選舉與主備集群主節(jié)點的切換、系統(tǒng)容錯、RootRegion管理Region狀態(tài)管理分布式SplitWAL任務(wù)管理等。

1).HA管理:

    集群的主節(jié)點的選舉和主備的切換跟Hadoop中Namnode的HA的選舉和切換機制類似(后面我會專門寫一篇文章講解Namenode的HA)。

2).RegionServer管理:

    HBase集群啟動時,每臺RegionServer在Zookeeper中/hbase-unsecure/rs注冊一個自己的臨時節(jié)點,HMaster會利用這些臨時節(jié)點來發(fā)現(xiàn)可用RegionServer,還可以利用臨時節(jié)點來跟蹤及其故障和網(wǎng)絡(luò)分區(qū)。這些臨時節(jié)點相當(dāng)于一個“會話”,會話是客戶端鏈接上Zookeeper服務(wù)器之后自動生成的。每個會話有一個唯一的id,RegionServer會用這個id不斷向Zookeeper服務(wù)器發(fā)送“心跳”,一旦RegionServer發(fā)生故障,發(fā)送心跳則會停止,當(dāng)超過限定時間后,Zookeeper服務(wù)器會判定會話超時,并自動刪除屬于它的臨時會話。與此同時,HMaster 則會接收到 ZooKeeper 的 NodeDelete 通知,從而感知到某個節(jié)點斷開,并立即開始容錯工作。

   備注

       為啥選擇zookeeper干這個事?因為隨著集群節(jié)點越來越多,HMaster的管理負(fù)擔(dān)會越來越重,另外它自身也有掛掉的可能,因此數(shù)據(jù)還需要持久化,zookeeper通常是一個集群,這樣穩(wěn)定性相對就高了很多。

3).元數(shù)據(jù)Region

    每次客戶端向HBase發(fā)起請求時,都會去查詢元數(shù)據(jù)Region,默認(rèn)目錄是:

/hbase-unsecure/meta-region-server,如果發(fā)生region的遷移,zookeeper都會進(jìn)行試試更新,以便其他客戶端請求時,總能查到最新的RootRegion信息。

4).Region管理:

    的狀態(tài)經(jīng)常會發(fā)生變更,比如Region遷移、上線、離線,都是通過zookeeper來統(tǒng)一管理的。

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

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

三、HBase的znode

    HBase在zookeeper的znode的根節(jié)點是通過hbase-site.xml中的“zookeeper.znode.parent”屬性進(jìn)行配置的(/hbase-unsecure),每次HBase集群重啟znode都會重建,所以如果集群重啟的話,重啟之前直接刪除/hbase-unsecure也是沒有問題的。下面就具體講解下HBase在ZooKeeper中znode目錄結(jié)構(gòu):

replication:

meta-region-server:

    HBase元數(shù)據(jù)表Region位置信息,在哪個Regionsever上;

rs:

        RS的臨時節(jié)點,應(yīng)該是只有在線RegionServer節(jié)點,宕機、掉線沒有。

splitWAL:

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

backup-masters:

    備用HMaster節(jié)點

table-lock:    

       表鎖節(jié)點會有所有表

flush-table-proc:

    flush進(jìn)程

region-in-transition:

    處于RIT狀態(tài)的region

online-snapshot:

   快照

master:

    激活HMaster節(jié)點

balancer:

    正在進(jìn)行balance的節(jié)點

recovering-regions:

    正在恢復(fù)的region

namespace:

     HBase集群所有命名空間

hbaseid:

    HBase集群的唯一ID

table:

    集群中各個表信息

“HBase依賴Zookeeper原因分析”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

當(dāng)前文章:HBase依賴Zookeeper原因分析
網(wǎng)址分享:http://muchs.cn/article0/phooio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、移動網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航、小程序開發(fā)、做網(wǎng)站、網(wǎng)站設(shè)計公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

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