Zookeeper的底層是一套數(shù)據(jù)儲(chǔ)存結(jié)構(gòu),其中的節(jié)點(diǎn),我們稱之為znode。Zookeeper中數(shù)據(jù)存儲(chǔ)的結(jié)構(gòu)和標(biāo)準(zhǔn)文件系統(tǒng)非常類似,擁有一個(gè)層次的命名空間,也是使用斜杠(/)進(jìn)行分割,兩者都是采用樹(shù)形層次結(jié)構(gòu)。不同的是,標(biāo)準(zhǔn)文件系統(tǒng)是由文件夾和文件來(lái)組成的樹(shù),而Zookeeper是由什么來(lái)組成的樹(shù)呢?下面我們來(lái)看一下Zookeeper數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),如圖1所示。
圖1 Zookeeper數(shù)據(jù)模型
從圖2可知,Zookeeper是由節(jié)點(diǎn)組成的樹(shù),樹(shù)中的每個(gè)節(jié)點(diǎn)被稱為—Znode。每個(gè)節(jié)點(diǎn)都可以擁有子節(jié)點(diǎn)。每一個(gè)Znode默認(rèn)能夠存儲(chǔ)1MB的數(shù)據(jù),每個(gè)Znode都可以通過(guò)其路徑唯一標(biāo)識(shí),如圖5-2中第三層的第一個(gè)Znode~~,~~,它的路徑是/app1/p_1。Zookeeper數(shù)據(jù)模型中的每個(gè)Znode都是由三部分組成,分別是stat(狀態(tài)信息,描述該Znode的版本,權(quán)限信息等組成)、data(與該Znode關(guān)聯(lián)的數(shù)據(jù))、children(該Znode下的子節(jié)點(diǎn))。
Znode有兩種類型,分別是臨時(shí)節(jié)點(diǎn)和永久節(jié)點(diǎn)。
臨時(shí)節(jié)點(diǎn),該生命周期依賴于創(chuàng)建它們的會(huì)話,一旦會(huì)話結(jié)束,臨時(shí)節(jié)點(diǎn)將會(huì)被自動(dòng)刪除,當(dāng)然也可以手動(dòng)刪除。雖然每個(gè)臨時(shí)的Znode都會(huì)綁定到一個(gè)客戶端,但它們對(duì)所有的客戶端還是可見(jiàn)的。另外,需要注意的是臨時(shí)節(jié)點(diǎn)不允許擁有子節(jié)點(diǎn)。
永久節(jié)點(diǎn),該生命周期不依賴于會(huì)話,并且只有在客戶端顯示執(zhí)行刪除操作的時(shí)候,它們才能被刪除。
由于Znode的序列化特性,在創(chuàng)建節(jié)點(diǎn)時(shí),用戶可以請(qǐng)求在該Znode的路徑結(jié)尾添加一個(gè)不斷增加的序列號(hào),序列號(hào)對(duì)于此節(jié)點(diǎn)的父節(jié)點(diǎn)來(lái)說(shuō)是唯一的,這樣便會(huì)記錄每個(gè)子節(jié)點(diǎn)創(chuàng)建的先后順序。它的格式為“%010d”(10位數(shù)字,沒(méi)有數(shù)值的數(shù)位用0補(bǔ)充,例如“0000000001”)。當(dāng)計(jì)數(shù)值大于232-1時(shí),計(jì)數(shù)器將會(huì)溢出。這樣便會(huì)存在四種類型的目錄節(jié)點(diǎn),分別對(duì)應(yīng)如下:
PERSISTENT:永久節(jié)點(diǎn)
EPHEMERAL:臨時(shí)節(jié)點(diǎn)
PERSISTENT_SEQUENTIAL:序列化永久節(jié)點(diǎn)
EPHEMERAL_SEQUENTIAL:序列化臨時(shí)節(jié)點(diǎn)
猜你喜歡:
Zookeeper分布式系統(tǒng)的集群架構(gòu)介紹
Spark的集群安裝與配置簡(jiǎn)介【大數(shù)據(jù)技術(shù)文章】
簡(jiǎn)單舉例,MapReduce是如何進(jìn)行計(jì)算的