版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
項(xiàng)目五Zookeeper分布式協(xié)調(diào)服務(wù)操作CONTENTS目錄01
項(xiàng)目導(dǎo)讀02
知識(shí)目標(biāo)03
技能目標(biāo)04
素質(zhì)(思政)目標(biāo)05
任務(wù)一Zookeeper分布式集群安裝部署CONTENTS目錄06
任務(wù)二Zookeeper命令行操作07
任務(wù)三ZookeeperJavaAPI操作08
項(xiàng)目總結(jié)09
項(xiàng)目考核項(xiàng)目導(dǎo)讀01項(xiàng)目導(dǎo)讀
部署Zookeeper集群為了防止高可用平臺(tái)單點(diǎn)故障實(shí)現(xiàn),同時(shí)實(shí)現(xiàn)集群之間數(shù)據(jù)同步,現(xiàn)在需要搭建部署Zookeeper分布式協(xié)調(diào)服務(wù)集群知識(shí)目標(biāo)02知識(shí)目標(biāo)
了解Zookeeper特點(diǎn)、機(jī)制
熟悉Zookeeper應(yīng)用場(chǎng)景
熟悉Zookeeper選舉機(jī)制
熟悉Zookeeper數(shù)據(jù)結(jié)構(gòu)
熟悉Zookeeper節(jié)點(diǎn)類型
ZooKeeperAPI常用類技能目標(biāo)03技能目標(biāo)
掌握Z(yǔ)ooKeeper安裝
掌握Z(yǔ)ooKeeper命令行操作
掌握Z(yǔ)ooKeeperJavaAPI操作素質(zhì)(思政)目標(biāo)04素質(zhì)(思政)目標(biāo)培養(yǎng)嚴(yán)謹(jǐn)細(xì)致的工匠精神厚植技術(shù)報(bào)國(guó)夢(mèng)培養(yǎng)不驕不躁的工匠心態(tài)任務(wù)一Zookeeper分布式集群安裝部署05任務(wù)工單
任務(wù)場(chǎng)景現(xiàn)有3臺(tái)虛擬機(jī),分別為master、hadoop1、hadoop2,需要在上面搭建高可用,為了防止高可用平臺(tái)單點(diǎn)故障實(shí)現(xiàn)集群之間數(shù)據(jù)同步,現(xiàn)在需要搭建部署Zookeeper分布式協(xié)調(diào)服務(wù)集群
任務(wù)準(zhǔn)備全班學(xué)生以4人左右為一組,各組選出組長(zhǎng)。請(qǐng)組長(zhǎng)組織組員查找相關(guān)資料,并組織討論和匯總問題1:?jiǎn)吸c(diǎn)故障是什么問題2:selinux有什么作用必備知識(shí)技能:一、Zookeeper簡(jiǎn)介
Zookeeper:分布式協(xié)調(diào)服務(wù)Zookeeper是一個(gè)開源的分布式協(xié)調(diào)服務(wù),主要為了解決分布式架構(gòu)下數(shù)據(jù)一致性問題,它是集群的管理者,監(jiān)視著集群中各個(gè)節(jié)點(diǎn)的狀態(tài),根據(jù)節(jié)點(diǎn)提交的反饋進(jìn)行下一步合理操作。最終,將簡(jiǎn)單易用的接口和高性能、功能穩(wěn)定的系統(tǒng)提供給用戶必備知識(shí)技能:二、Zookeeper工作機(jī)制Zookeeper:文件系統(tǒng)+通知機(jī)制
Zookeeper從設(shè)計(jì)模式角度來(lái)理解:是一個(gè)基于觀察者模式設(shè)計(jì)的分布式服務(wù)管理框架,它負(fù)責(zé)存儲(chǔ)和管理大家都關(guān)心的數(shù)據(jù),然后接受觀察者的注冊(cè),一旦這些數(shù)據(jù)的狀態(tài)發(fā)生變化,Zookeeper就將負(fù)責(zé)通知已經(jīng)在Zookeeper上注冊(cè)的那些觀察者做出相應(yīng)的反應(yīng)。也就是說,Zookeeper=文件系統(tǒng)+通知機(jī)制必備知識(shí)技能:三、Zookeeper特點(diǎn)
Zookeeper:一個(gè)領(lǐng)導(dǎo)者(Leader),多個(gè)跟隨者(Follower)組成的集群Zookeeper奇數(shù)節(jié)點(diǎn)優(yōu)勢(shì)2.Zookeeper集群中只要有半數(shù)以上節(jié)點(diǎn)存活,Zookeeper集群就能正常服務(wù)。所以Zookeeper適合安裝奇數(shù)臺(tái)服務(wù)器全局?jǐn)?shù)據(jù)一致每個(gè)Server保存一份相同的數(shù)據(jù)副本,Client無(wú)論連接到哪個(gè)Server,數(shù)據(jù)都是一致的更新請(qǐng)求順序執(zhí)行,來(lái)自同一個(gè)Client的更新請(qǐng)求按其發(fā)送順序依次執(zhí)行,即先進(jìn)先出數(shù)據(jù)更新原子性,一次數(shù)據(jù)更新要么成功,要么失敗實(shí)時(shí)性,在一定時(shí)間范圍內(nèi),Client能讀到最新數(shù)據(jù)必備知識(shí)技能:四、Zookeeper應(yīng)用場(chǎng)景01數(shù)據(jù)發(fā)布/訂閱數(shù)據(jù)發(fā)布/訂閱系統(tǒng),需要發(fā)布者將數(shù)據(jù)發(fā)布到Zookeeper的節(jié)點(diǎn)上,供訂閱者進(jìn)行數(shù)據(jù)訂閱,進(jìn)而達(dá)到動(dòng)態(tài)獲取數(shù)據(jù)的目的,實(shí)現(xiàn)配置信息的集中式管理和數(shù)據(jù)的動(dòng)態(tài)更新發(fā)布/訂閱一般有兩種設(shè)計(jì)模式:推模式和拉模式,服務(wù)端主動(dòng)將數(shù)據(jù)更新發(fā)送給所有訂閱的客戶端稱為推模式;客戶端主動(dòng)請(qǐng)求獲取最新數(shù)據(jù)稱為拉模式Zookeeper采用了推拉相結(jié)合的模式,客戶端向服務(wù)端注冊(cè)自己需要關(guān)注的節(jié)點(diǎn),一旦該節(jié)點(diǎn)數(shù)據(jù)發(fā)生變更,那么服務(wù)端就會(huì)向相應(yīng)的客戶端推送Watcher事件通知,客戶端接收到此通知后,主動(dòng)到服務(wù)端獲取最新的數(shù)據(jù)02命名服務(wù)命名服務(wù)是分布式系統(tǒng)中較為常見的一類場(chǎng)景,分布式系統(tǒng)中,被命名的實(shí)體通??梢允羌褐械臋C(jī)器、提供的服務(wù)地址或遠(yuǎn)程對(duì)象等,通過命名服務(wù),客戶端可以根據(jù)指定名字來(lái)獲取資源的實(shí)體,在分布式環(huán)境中,上層應(yīng)用僅僅需要一個(gè)全局唯一的名字,Zookeeper可以實(shí)現(xiàn)一套分布式全局唯一ID的分配機(jī)制。通過調(diào)用Zookeeper節(jié)點(diǎn)創(chuàng)建的API接口就可以創(chuàng)建一個(gè)順序節(jié)點(diǎn),并且在API返回值中會(huì)返回這個(gè)節(jié)點(diǎn)的完整名字,利用此特性,可以生成全局ID,其步驟如下(1)客戶端根據(jù)任務(wù)類型,在指定類型的任務(wù)下通過調(diào)用接口創(chuàng)建一個(gè)順序節(jié)點(diǎn),如"job-"(2)創(chuàng)建完成后,會(huì)返回一個(gè)完整的節(jié)點(diǎn)名,如"job-00000001"(3)客戶端拼接type和返回值后,就可以作為全局唯一ID了,如"type2-job-00000001"必備知識(shí)技能:四、Zookeeper應(yīng)用場(chǎng)景分布式協(xié)調(diào)/通知Zookeeper中特有的Watcher注冊(cè)與異步通知機(jī)制,能夠很好地實(shí)現(xiàn)分布式環(huán)境下不同機(jī)器,甚至不同系統(tǒng)之間的協(xié)調(diào)與通知,從而實(shí)現(xiàn)對(duì)數(shù)據(jù)變更的實(shí)時(shí)處理。通常的做法是不同的客戶端都對(duì)Zookeeper上的同一個(gè)數(shù)據(jù)節(jié)點(diǎn)進(jìn)行Watcher注冊(cè),監(jiān)聽數(shù)據(jù)節(jié)點(diǎn)的變化(包括節(jié)點(diǎn)本身和子節(jié)點(diǎn)),若數(shù)據(jù)節(jié)點(diǎn)發(fā)生變化,那么所有訂閱的客戶端都能夠接收到相應(yīng)的Watcher通知,并做出相應(yīng)處理。在絕大多數(shù)分布式系統(tǒng)中,系統(tǒng)機(jī)器間的通信無(wú)外乎心跳檢測(cè)、工作進(jìn)度匯報(bào)和系統(tǒng)調(diào)度必備知識(shí)技能:四、Zookeeper應(yīng)用場(chǎng)景3.分布式協(xié)調(diào)/通知
心跳檢測(cè)不同機(jī)器間需要檢測(cè)到彼此是否在正常運(yùn)行,可以使用Zookeeper實(shí)現(xiàn)機(jī)器間的心跳檢測(cè),基于其臨時(shí)節(jié)點(diǎn)特性(臨時(shí)節(jié)點(diǎn)的生存周期是客戶端會(huì)話,客戶端會(huì)話結(jié)束以后,其臨時(shí)節(jié)點(diǎn)將不再存在),可以讓不同機(jī)器都在Zookeeper的一個(gè)指定節(jié)點(diǎn)下創(chuàng)建臨時(shí)子節(jié)點(diǎn),不同的機(jī)器之間可以根據(jù)這個(gè)臨時(shí)子節(jié)點(diǎn)來(lái)判斷對(duì)應(yīng)的客戶端機(jī)器是否存活。通過Zookeeper可以大大減少系統(tǒng)耦合工作進(jìn)度匯報(bào)通常任務(wù)被分發(fā)到不同機(jī)器后,需要實(shí)時(shí)地將自己的任務(wù)執(zhí)行進(jìn)度匯報(bào)給分發(fā)系統(tǒng),可以在Zookeeper上選擇一個(gè)節(jié)點(diǎn),每個(gè)任務(wù)客戶端都在這個(gè)節(jié)點(diǎn)下面創(chuàng)建臨時(shí)子節(jié)點(diǎn),這樣不僅可以判斷機(jī)器是否存活,同時(shí)各個(gè)機(jī)器可以將自己的任務(wù)執(zhí)行進(jìn)度寫到該臨時(shí)節(jié)點(diǎn)中去,以便中心系統(tǒng)能夠?qū)崟r(shí)獲取任務(wù)的執(zhí)行進(jìn)度系統(tǒng)調(diào)度Zookeeper能夠?qū)崿F(xiàn)如下系統(tǒng)調(diào)度模式:分布式系統(tǒng)由控制臺(tái)和一些客戶端系統(tǒng)兩部分構(gòu)成,控制臺(tái)的職責(zé)就是需要將一些指令信息發(fā)送給所有的客戶端,以控制他們進(jìn)行相應(yīng)的業(yè)務(wù)邏輯,后臺(tái)管理人員在控制臺(tái)上做一些操作,實(shí)際上就是修改Zookeeper上某些節(jié)點(diǎn)的數(shù)據(jù),Zookeeper可以把數(shù)據(jù)變更以事件通知的形式發(fā)送給訂閱客戶端必備知識(shí)技能:四、Zookeeper應(yīng)用場(chǎng)景
分布式鎖
分布式鎖用于控制分布式系統(tǒng)之間同步訪問共享資源的一種方式,可以保證不同系統(tǒng)訪問一個(gè)或一組資源時(shí)的一致性,主要分為排他鎖和共享鎖。排他鎖又稱為寫鎖或獨(dú)占鎖,若事務(wù)T1對(duì)數(shù)據(jù)對(duì)象O1加上了排他鎖,那么在整個(gè)加鎖期間,只允許事務(wù)T1對(duì)O1進(jìn)行讀取和更新操作,其他任何事務(wù)都不能再對(duì)這個(gè)數(shù)據(jù)對(duì)象進(jìn)行任何類型的操作,直到T1釋放了排他鎖
①獲取鎖,在需要獲取排他鎖時(shí),所有客戶端通過調(diào)用接口,在/exclusive_lock節(jié)點(diǎn)下創(chuàng)建臨時(shí)子節(jié)點(diǎn)/exclusive_lock/lock。Zookeeper可以保證只有一個(gè)客戶端能夠創(chuàng)建成功,沒有成功的客戶端需要注冊(cè)/exclusive_lock節(jié)點(diǎn)監(jiān)聽
②釋放鎖,當(dāng)獲取鎖的客戶端宕機(jī)或者正常完成業(yè)務(wù)邏輯都會(huì)導(dǎo)致臨時(shí)節(jié)點(diǎn)的刪除,此時(shí),所有在/exclusive_lock節(jié)點(diǎn)上注冊(cè)監(jiān)聽的客戶端都會(huì)收到通知,可以重新發(fā)起分布式鎖獲取
共享鎖又稱為讀鎖,若事務(wù)T1對(duì)數(shù)據(jù)對(duì)象O1加上共享鎖,那么當(dāng)前事務(wù)只能對(duì)O1進(jìn)行讀取操作,其他事務(wù)也只能對(duì)這個(gè)數(shù)據(jù)對(duì)象加共享鎖,直到該數(shù)據(jù)對(duì)象上的所有共享鎖都被釋放。在需要獲取共享鎖時(shí),所有客戶端都會(huì)到/shared_lock下面創(chuàng)建一個(gè)臨時(shí)順序節(jié)點(diǎn)必備知識(shí)技能:四、Zookeeper應(yīng)用場(chǎng)景
分布式隊(duì)列
有一些時(shí)候,多個(gè)團(tuán)隊(duì)需要共同完成一個(gè)任務(wù),比如,A團(tuán)隊(duì)將Hadoop集群計(jì)算的結(jié)果交給B團(tuán)隊(duì)繼續(xù)計(jì)算,B完成了自己的任務(wù)再交給C團(tuán)隊(duì)繼續(xù)做。這就有點(diǎn)像業(yè)務(wù)系統(tǒng)的工作流一樣,一環(huán)一環(huán)地傳下去
分布式環(huán)境下,我們同樣需要一個(gè)類似單進(jìn)程隊(duì)列的組件,用來(lái)實(shí)現(xiàn)跨進(jìn)程、跨主機(jī)、跨網(wǎng)絡(luò)的數(shù)據(jù)共享和數(shù)據(jù)傳遞,這就是我們的分布式隊(duì)列必備知識(shí)技能:五、Zookeeper選舉機(jī)制
Zookeeper選舉機(jī)制Leader選舉是保證分布式數(shù)據(jù)一致性的關(guān)鍵所在。當(dāng)Zookeeper集群中的一臺(tái)服務(wù)器出現(xiàn)以下兩種情況之一時(shí),需要進(jìn)入Leader選舉必備知識(shí)技能:五、Zookeeper選舉機(jī)制
服務(wù)器啟動(dòng)時(shí)期的Leader選舉若進(jìn)行Leader選舉,則至少需要兩臺(tái)機(jī)器,這里選取3臺(tái)機(jī)器組成的服務(wù)器集群為例。在集群初始化階段,當(dāng)有一臺(tái)服務(wù)器Server1啟動(dòng)時(shí),其單獨(dú)無(wú)法進(jìn)行和完成Leader選舉,當(dāng)?shù)诙_(tái)服務(wù)器Server2啟動(dòng)時(shí),此時(shí)兩臺(tái)機(jī)器可以相互通信,每臺(tái)機(jī)器都試圖找到Leader,于是進(jìn)入Leader選舉過程。選舉過程如下(1)每個(gè)Server發(fā)出一個(gè)投票。由于是初始情況,Server1和Server2都會(huì)將自己作為L(zhǎng)eader服務(wù)器來(lái)進(jìn)行投票,每次投票會(huì)包含所推舉的服務(wù)器的myid和ZXID,使用(myid,ZXID)來(lái)表示,此時(shí)Server1的投票為(1,0),Server2的投票為(2,0),然后各自將這個(gè)投票發(fā)給集群中其他機(jī)器(2)接受來(lái)自各個(gè)服務(wù)器的投票。集群的每個(gè)服務(wù)器收到投票后,首先判斷該投票的有效性,如檢查是否是本輪投票、是否來(lái)自LOOKING狀態(tài)的服務(wù)器(3)處理投票。針對(duì)每一個(gè)投票,服務(wù)器都需要將別人的投票和自己的投票進(jìn)行PK,PK規(guī)則如下:優(yōu)先檢查ZXID。ZXID比較大的服務(wù)器優(yōu)先作為L(zhǎng)eader,如果ZXID相同,那么就比較myid,myid較大的服務(wù)器作為L(zhǎng)eader服務(wù)器。對(duì)于Server1而言,它的投票是(1,0),接收Server2的投票為(2,0),首先會(huì)比較兩者的ZXID,均為0,再比較myid,此時(shí)Server2的myid最大,于是更新自己的投票為(2,0),然后重新投票,對(duì)于Server2而言,其無(wú)須更新自己的投票,只是再次向集群中所有機(jī)器發(fā)出上一次投票信息即可(4)統(tǒng)計(jì)投票。每次投票后,服務(wù)器都會(huì)統(tǒng)計(jì)投票信息,判斷是否已經(jīng)有過半機(jī)器接收到相同的投票信息,對(duì)于Server1、Server2而言,都統(tǒng)計(jì)出集群中已經(jīng)有兩臺(tái)機(jī)器接收了(2,0)的投票信息,此時(shí)便認(rèn)為已經(jīng)選出了Leader(5)改變服務(wù)器狀態(tài)。一旦確定了Leader,每個(gè)服務(wù)器就會(huì)更新自己的狀態(tài),如果是Follower,那么就變更為FOLLOWING,如果是Leader,就變更為L(zhǎng)EADING必備知識(shí)技能:五、Zookeeper選舉機(jī)制服務(wù)器運(yùn)行時(shí)期的Leader選舉在Zookeeper運(yùn)行期間,Leader與非Leader服務(wù)器各司其職,即便有非Leader服務(wù)器宕機(jī)或新加入,此時(shí)也不會(huì)影響Leader,但是一旦Leader服務(wù)器掛了,那么整個(gè)集群將暫停對(duì)外服務(wù),進(jìn)入新一輪Leader選舉,其過程和啟動(dòng)時(shí)期的Leader選舉過程基本一致任務(wù)實(shí)施:一、master上核心文件配置
步驟1把提前下載好的Zookeeper安裝包zookeeper-3.4.10.tar.gz拷貝到/usr/local/src目錄下步驟2:進(jìn)入src目錄,解壓。在命令窗口鍵入cd/usr/local/srctar-zxvfzookeeper-3.4.10.tar.gz步驟3:進(jìn)入Zookeeper目錄,創(chuàng)建zkdata目錄并查看當(dāng)前路徑cdzookeeper-3.4.10任務(wù)實(shí)施:一、master上核心文件配置mkdirzkdatapwdpwd命令執(zhí)行結(jié)果為/usr/local/src/zookeeper-3.4.10,復(fù)制該路徑備用步驟4:進(jìn)入conf目錄,復(fù)制一份配置文件,并將其改名為zoo.cfgcdconfcpzoo_sample.cfgzoo.cfg任務(wù)實(shí)施:一、master上核心文件配置
01步驟5:編輯配置文件zoo.cfg
02vimzoo.cfg
03步驟6:將dataDir路徑修改為如下所示
04dataDir=/usr/local/src/zookeeper-3.4.10/zkdata
05步驟7:在zoo.cfg最后加入以下內(nèi)容
06server.1=master:2888:3888任務(wù)實(shí)施:一、master上核心文件配置
server.2=hadoop1:2888:3888
server.3=hadoop2:2888:3888
步驟8:進(jìn)入zkdata目錄,創(chuàng)建一個(gè)myid的文件
cd/usr/local/src/zookeeper-3.4.10/zkdata
touchmyid
步驟9:編輯myid文件任務(wù)實(shí)施:一、master上核心文件配置
vimmyid
在文件中添加與server對(duì)應(yīng)的編號(hào):1
步驟10:配置環(huán)境變量
vim/etc/profile
在最后輸入以下內(nèi)容
#zookeeper任務(wù)實(shí)施:一、master上核心文件配置
exportZK_HOME=/usr/local/src/zookeeper-3.4.10
exportPATH=$PATH:${ZK_HOME}/bin
使環(huán)境變量生效
source/etc/profile任務(wù)實(shí)施:二、Zookeeper集群配置
步驟1將master上配置好的zookeeper目錄傳輸?shù)郊浩渌麢C(jī)器上,在master上面執(zhí)行如下命令
ZookeeperTransferscp-r/usr/local/src/zookeeper-3.4.10hadoop1:usr/local/src
SCPTransferZookeeperDirectoryscp-r/usr/local/src/zookeeper-3.4.10hadoop2:usr/local/src
步驟2將master上配置好的profile文件傳輸?shù)郊浩渌麢C(jī)器上,在master上面執(zhí)行如下命令
scp-r/etc/profilehadoop1:etc/profile單擊此處添加項(xiàng)正文
scp-r/etc/profilehadoop2:etc/profile單擊此處添加項(xiàng)正文任務(wù)實(shí)施:二、Zookeeper集群配置步驟3:配置hadoop1上面的serverid值,在hadoop1上面執(zhí)行如下命令cd/usr/local/src/zookeeper-3.4.10/zkdatavimmyid在myid里面輸入數(shù)字2步驟4:使hadoop1上面的修改過的profile文件立即生效,在hadoop1上面執(zhí)行如下命令source/etc/profile任務(wù)實(shí)施:二、Zookeeper集群配置
01步驟5:配置hadoop2上面的serverid值,在hadoop2上面執(zhí)行如下命令
02cd/usr/local/src/zookeeper-3.4.10/zkdata
03vimmyid
04在myid里面輸入數(shù)字3
05步驟6:使hadoop2上面的修改過的profile文件立即生效,在hadoop2上面執(zhí)行如下命令任務(wù)實(shí)施:二、Zookeeper集群配置source/etc/profile任務(wù)實(shí)施:三、Zookeeper啟動(dòng)步驟1:關(guān)閉防火墻。分別在3個(gè)節(jié)點(diǎn)上執(zhí)行systemctlstopfirewalldsystemctldisablefirewalld步驟2:關(guān)閉SELinux。分別在3個(gè)節(jié)點(diǎn)上執(zhí)行setenforce0這里還需要永久關(guān)閉SELinux,執(zhí)行以下命令編輯SELinux配置文件任務(wù)實(shí)施:三、Zookeeper啟動(dòng)
vim/etc/selinux/config找到SELINUX一行,將其值改為disabledSELINUX=disabled步驟3:?jiǎn)?dòng)Zookeeper,分別在3個(gè)節(jié)點(diǎn)上執(zhí)行bin/zkServer.shstart注意Zookeeper在大多數(shù)節(jié)點(diǎn)存活下,才會(huì)有效。所以啟動(dòng)第一臺(tái)的時(shí)候,會(huì)報(bào)錯(cuò),等三個(gè)節(jié)點(diǎn)都啟動(dòng)完畢之后,就會(huì)正常了任務(wù)實(shí)施:三、Zookeeper啟動(dòng)
步驟4:查看Zookeeper運(yùn)行狀態(tài),分別在3個(gè)節(jié)點(diǎn)上執(zhí)行單擊此處添加項(xiàng)正文
bin/zkServer.shstatus單擊此處添加項(xiàng)正文
觀察節(jié)點(diǎn)狀態(tài)確認(rèn)啟動(dòng)成功分別觀察3個(gè)節(jié)點(diǎn),發(fā)現(xiàn)狀態(tài)為follower或者leader中的一種即為啟動(dòng)成功,如圖5-1-1所示任務(wù)二Zookeeper命令行操作06任務(wù)工單任務(wù)場(chǎng)景現(xiàn)有3臺(tái)虛擬機(jī),分別為master、hadoop1、hadoop2,上面搭建了Zookeeper分布式協(xié)調(diào)服務(wù)集群,現(xiàn)在需要使用命令行對(duì)節(jié)點(diǎn)進(jìn)行管理維護(hù)任務(wù)準(zhǔn)備全班學(xué)生以4人左右為一組,各組選出組長(zhǎng)。請(qǐng)組長(zhǎng)組織組員查找相關(guān)資料,并組織討論和匯總問題1:永久節(jié)點(diǎn)和臨時(shí)節(jié)點(diǎn)有什么區(qū)別問題2:什么是監(jiān)聽器必備知識(shí)技能:一、ZooKeeper數(shù)據(jù)結(jié)構(gòu)
ZooKeeper數(shù)據(jù)模型結(jié)構(gòu)ZooKeeper數(shù)據(jù)模型的結(jié)構(gòu)與Linux文件系統(tǒng)很類似,整體上可以看作是一棵樹,每個(gè)節(jié)點(diǎn)稱作一個(gè)ZNode。每一個(gè)ZNode默認(rèn)能夠存儲(chǔ)1MB的數(shù)據(jù),每個(gè)ZNode都可以通過其路徑唯一標(biāo)識(shí),如圖5-2-1
ZooKeeper數(shù)據(jù)模型解析ZooKeeper的數(shù)據(jù)模型,在結(jié)構(gòu)上和標(biāo)準(zhǔn)文件系統(tǒng)非常相似,擁有一個(gè)層次的命名空間,都是采用樹形層次結(jié)構(gòu),ZooKeeper樹中的每個(gè)節(jié)點(diǎn)被稱為ZNode。和文件系統(tǒng)的目錄樹一樣,ZooKeeper樹中的每個(gè)節(jié)點(diǎn)可以擁有子節(jié)點(diǎn)。但也有不同之處
ZNode特性與操作1.ZNode兼具文件和目錄兩種特點(diǎn),既像文件一樣維護(hù)著數(shù)據(jù)、元信息、ACL、時(shí)間戳等數(shù)據(jù)結(jié)構(gòu),又像目錄一樣可以作為路徑標(biāo)識(shí)的一部分,并可以具有子ZNode。用戶對(duì)ZNode具有增、刪、改、查等操作(權(quán)限允許的情況下)
ZNode的原子性操作與ACL權(quán)限2.ZNode具有原子性操作,讀操作將獲取與節(jié)點(diǎn)相關(guān)的所有數(shù)據(jù),寫操作也將替換掉節(jié)點(diǎn)的所有數(shù)據(jù)。另外,每一個(gè)節(jié)點(diǎn)都擁有自己的ACL(訪問控制列表),這個(gè)列表規(guī)定了用戶的權(quán)限,即限定了特定用戶對(duì)目標(biāo)節(jié)點(diǎn)可以執(zhí)行的操作必備知識(shí)技能:一、ZooKeeper數(shù)據(jù)結(jié)構(gòu)
ZNode數(shù)據(jù)大小限制3.ZNode存儲(chǔ)數(shù)據(jù)大小有限制,ZooKeeper雖然可以關(guān)聯(lián)一些數(shù)據(jù),但并沒有被設(shè)計(jì)為常規(guī)的數(shù)據(jù)庫(kù)或者大數(shù)據(jù)存儲(chǔ),相反的是,它用來(lái)管理調(diào)度數(shù)據(jù),比如分布式應(yīng)用中的配置文件信息、狀態(tài)信息、匯集位置等等。這些數(shù)據(jù)的共同特性就是它們都是很小的數(shù)據(jù),通常以KB為大小單位。ZooKeeper的服務(wù)器和客戶端都被設(shè)計(jì)為嚴(yán)格檢查并限制每個(gè)ZNode的數(shù)據(jù)大小至多1MB,但在常規(guī)使用中應(yīng)該遠(yuǎn)小于此值ZNode路徑規(guī)則4.ZNode通過路徑引用,如同Unix中的文件路徑。路徑必須是絕對(duì)的,因此它們必須由斜杠字符來(lái)開頭。除此以外,它們必須是唯一的,也就是說每一個(gè)路徑只有一個(gè)表示,因此這些路徑不能改變。在ZooKeeper中,路徑由Unicode字符串組成,并且有一些限制。字符串"/zookeeper"用以保存管理信息,比如關(guān)鍵配額信息①stat:此為狀態(tài)信息,描述該ZNode的版本,權(quán)限等信息②data:與該ZNode關(guān)聯(lián)的數(shù)據(jù)③children:該ZNode下的子節(jié)點(diǎn)必備知識(shí)技能:二、Zookeeper節(jié)點(diǎn)類型
ZNode有兩種,分別為臨時(shí)節(jié)點(diǎn)和永久節(jié)點(diǎn)。節(jié)點(diǎn)的類型在創(chuàng)建時(shí)即被確定,并且不能改變臨時(shí)節(jié)點(diǎn)該節(jié)點(diǎn)的生命周期依賴于創(chuàng)建它們的會(huì)話。一旦會(huì)話結(jié)束,臨時(shí)節(jié)點(diǎn)將被自動(dòng)刪除,當(dāng)然也可以手動(dòng)刪除。臨時(shí)節(jié)點(diǎn)不允許擁有子節(jié)點(diǎn)永久節(jié)點(diǎn):該節(jié)點(diǎn)的生命周期不依賴于會(huì)話,并且只有在客戶端顯式執(zhí)行刪除操作的時(shí)候,它們才能被刪除ZNode順序節(jié)點(diǎn)特性解析ZNode還有一個(gè)順序節(jié)點(diǎn)的特性,如果創(chuàng)建的時(shí)候指定了順序模式的話(當(dāng)然如果不指定默認(rèn)也是順序模式),該ZNode的名字后面會(huì)自動(dòng)追加一個(gè)不斷增加的序列號(hào)。序列號(hào)對(duì)于此節(jié)點(diǎn)的父節(jié)點(diǎn)來(lái)說是唯一的,這樣便會(huì)記錄每個(gè)子節(jié)點(diǎn)創(chuàng)建的先后順序。它的格式為“10%d”(10位數(shù)字,沒有數(shù)值的數(shù)位用0補(bǔ)充,例如“0000000001”)這樣便會(huì)存在四種類型的ZNode節(jié)點(diǎn),分別對(duì)應(yīng)必備知識(shí)技能:二、Zookeeper節(jié)點(diǎn)類型
PERSISTENT:永久節(jié)點(diǎn)
EPHEMERAL:臨時(shí)節(jié)點(diǎn)
PERSISTENT_SEQUENTIAL:永久節(jié)點(diǎn)、順序
EPHEMERAL_SEQUENTIAL:臨時(shí)節(jié)點(diǎn)、順序任務(wù)實(shí)施:一、基本命令操作步驟1:進(jìn)入Zookeeper家目錄cd/usr/local/src/zookeeper-3.4.10步驟2:在master上面連接本地Zookeeper服務(wù)器bin/zkCli.sh-server:2181步驟3:在根目錄下面創(chuàng)建一個(gè)內(nèi)容為“bob”名字為tmp的節(jié)點(diǎn)create-e/tmp"bob"任務(wù)實(shí)施:一、基本命令操作
注意一個(gè)臨時(shí)節(jié)點(diǎn)會(huì)在會(huì)話過期或關(guān)閉時(shí)自動(dòng)被刪除,剛剛我們?cè)诿钚袆?chuàng)建的這個(gè)znode,如果退出連接然后重新連接,會(huì)發(fā)現(xiàn)節(jié)點(diǎn)已經(jīng)不存在了步驟4:下面使用ls命令查看根目錄底下的節(jié)點(diǎn)信息ls/上面使用ls命令查看zookeeper根目錄節(jié)點(diǎn)信息,會(huì)發(fā)現(xiàn)剛才創(chuàng)建的tmp節(jié)點(diǎn)步驟5:在根目錄下面創(chuàng)建一個(gè)內(nèi)容為“tim”名字為permanent的永久節(jié)點(diǎn)create-s/permanent"tim"任務(wù)實(shí)施:一、基本命令操作
注意一個(gè)永久節(jié)點(diǎn)會(huì)話過期或關(guān)閉時(shí)不會(huì)自動(dòng)被刪除,如果退出會(huì)話然后重新連接,會(huì)發(fā)現(xiàn)permanent節(jié)點(diǎn)依舊存在步驟6:下面使用ls命令查看根目錄底下的節(jié)點(diǎn)信息ls上面使用ls命令查看zookeeper根目錄節(jié)點(diǎn)信息,會(huì)發(fā)現(xiàn)剛才創(chuàng)建的permanent節(jié)點(diǎn)步驟7:獲取tmp節(jié)點(diǎn)內(nèi)容get/tmp任務(wù)實(shí)施:一、基本命令操作
上面使用get命令獲取/tmp節(jié)點(diǎn)內(nèi)容信息為“bob”
步驟8:修改tmp節(jié)點(diǎn)內(nèi)容為“bob2”
set/tmp“bob2”
步驟9:獲取tmp節(jié)點(diǎn)內(nèi)容
get/tmp
上面使用get命令獲取tmp節(jié)點(diǎn)內(nèi)容,發(fā)現(xiàn)其內(nèi)容已經(jīng)由“bob”更新為“bob2”任務(wù)實(shí)施:一、基本命令操作步驟10:刪除/permanent節(jié)點(diǎn)delete/permanent注意:要想刪除某個(gè)節(jié)點(diǎn)及其所有后代節(jié)點(diǎn),可以使用遞歸刪除,命令為rmrpath任務(wù)實(shí)施:二、監(jiān)聽器操作步驟1:給tmp節(jié)點(diǎn)設(shè)置get監(jiān)聽器單擊此處添加項(xiàng)正文get/tmpwatch單擊此處添加項(xiàng)正文ZooKeeper監(jiān)聽機(jī)制使用getpath[watch]注冊(cè)的監(jiān)聽器能夠在節(jié)點(diǎn)內(nèi)容發(fā)生改變的時(shí)候,向客戶端發(fā)出通知。需要注意的是ZooKeeper的觸發(fā)器是一次性的(One-timetrigger),即觸發(fā)一次后就會(huì)立即失效步驟2:給tmp節(jié)點(diǎn)設(shè)置stat監(jiān)聽器單擊此處添加項(xiàng)正文stat/tmpwatch單擊此處添加項(xiàng)正文監(jiān)控節(jié)點(diǎn)狀態(tài)變化通知使用statpath[watch]注冊(cè)的監(jiān)聽器能夠在節(jié)點(diǎn)狀態(tài)發(fā)生改變的時(shí)候,向客戶端發(fā)出通知任務(wù)實(shí)施:二、監(jiān)聽器操作
步驟3:給tmp節(jié)點(diǎn)設(shè)置ls監(jiān)聽器ls/tmpwatch監(jiān)聽器注冊(cè)與子節(jié)點(diǎn)變更監(jiān)聽使用lspath[watch]或ls2path[watch]注冊(cè)的監(jiān)聽器能夠監(jiān)聽該節(jié)點(diǎn)下所有子節(jié)點(diǎn)的增加和刪除操作步驟8:給tmp節(jié)點(diǎn)設(shè)置ls監(jiān)聽器。修改tmp節(jié)點(diǎn)內(nèi)容為“hello”,觸發(fā)監(jiān)聽set/tmp"hello"任務(wù)三ZookeeperJavaAPI操作07任務(wù)場(chǎng)景
ZookeeperJavaAPI使用示例現(xiàn)有3臺(tái)虛擬機(jī),分別為master、hadoop1、hadoop2,上面搭建了Zookeeper分布式協(xié)調(diào)服務(wù)集群,現(xiàn)在需要使用JavaAPI對(duì)節(jié)點(diǎn)進(jìn)行管理維護(hù)任務(wù)準(zhǔn)備
全班學(xué)生以4人左右為一組,各組選出組長(zhǎng)。請(qǐng)組長(zhǎng)組織組員查找相關(guān)資料,并組織討論和匯總
問題1:談?wù)勀銓?duì)log4j的了解
問題2:什么是maven依賴任務(wù)評(píng)價(jià)01setData-為指定的節(jié)點(diǎn)設(shè)置數(shù)據(jù)單擊此處添加項(xiàng)正文02getChildren-獲取指定節(jié)點(diǎn)的所有子節(jié)點(diǎn)單擊此處添加項(xiàng)正文03delete-刪除指定節(jié)點(diǎn)以及子節(jié)點(diǎn)單擊此處添加項(xiàng)正文04close-關(guān)閉連接單擊此處添加項(xiàng)正文05ZooKeeperAPI同步與異步對(duì)比ZooKeeper大部分API都提供了同步和異步方法。同步方法一般會(huì)有返回值,并且會(huì)拋出相應(yīng)的異常。異步方法沒有返回值,也不會(huì)拋出異常。此外,異步方法參數(shù)在同步方法參數(shù)的基礎(chǔ)上,會(huì)增加cb和ctx兩個(gè)參數(shù)開發(fā)環(huán)境
在工程的pom.xml文件中加入下面的依賴<dependency><groupId>org.apache.zookeeper開發(fā)環(huán)境
</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.10</version>
</dependency>連接服務(wù)器
構(gòu)造ZooKeeper類對(duì)象的過程就是與ZooKeeper服務(wù)器建立連接的過程ZooKeeper通過構(gòu)造函數(shù)連接服務(wù)器。構(gòu)造函數(shù)如下所示ZooKeeperConstructorZooKeeper(StringconnectionString,intsessionTimeout,Watcherwatcher)throwsIOExceptionZooKeeper構(gòu)造函數(shù)一共有三個(gè)參數(shù)connectionString第一個(gè)參數(shù),是ZooKeeper服務(wù)器地址(可以指定端口,默認(rèn)端口號(hào)為2181)連接服務(wù)器
sessionTimeout第二個(gè)參數(shù),是以毫秒為單位的會(huì)話超時(shí)時(shí)間。表示ZooKeeper等待客戶端通信的最長(zhǎng)時(shí)間,之后會(huì)聲明會(huì)話結(jié)束。例如,我們?cè)O(shè)置為5000,即5s,這就是說如果ZooKeeper與客戶端有5s的時(shí)間無(wú)法進(jìn)行通信,ZooKeeper就會(huì)終止客戶端的會(huì)話。ZooKeeper會(huì)話一般設(shè)置超時(shí)時(shí)間為5~10s
watcher第三個(gè)參數(shù),Watcher對(duì)象實(shí)例。Watcher對(duì)象接收來(lái)自ZooKeeper的回調(diào),以獲得各種事件的通知。這個(gè)對(duì)象需要我們自己創(chuàng)建,因?yàn)閃atcher定義為接口,所以需要我們自己實(shí)現(xiàn)一個(gè)類,然后初始化這個(gè)類的實(shí)例并傳入ZooKeeper的構(gòu)造函數(shù)中??蛻舳耸褂肳atcher接口來(lái)監(jiān)控與ZooKeeper之間會(huì)話的健康情況,與ZooKeeper服務(wù)器之間建立或者斷開連接時(shí)會(huì)產(chǎn)生事件
ZooKeeperConnectionandCountDownLatch下面會(huì)創(chuàng)建一個(gè)ZooKeeperConnection類并實(shí)現(xiàn)一個(gè)connect方法。connect方法創(chuàng)建一個(gè)ZooKeeper對(duì)象,連接到ZooKeeper集群,然后返回該對(duì)象。CountDownLatch阻塞主進(jìn)程,直到客戶端連接到ZooKeeper集群連接服務(wù)器
ZooKeeper連接狀態(tài)回調(diào)ZooKeeper通過Watcher回調(diào)返回連接狀態(tài)。一旦客戶端與ZooKeeper集群連接,Watcher回調(diào)函數(shù)會(huì)被調(diào)用,Watcher回調(diào)調(diào)用CountDownLatch的countDown方法釋放鎖判斷ZNode是否存在
ZooKeeperexists方法介紹ZooKeeper類提供了檢查ZNode是否存在的exists方法。如果指定的ZNode存在,則返回ZNode的元數(shù)據(jù)。exists方法如下所示
//同步方式單擊此處添加項(xiàng)正文
StatexistsStatexists(Stringpath,Watcherwatcher)throwsKeeperException,InterruptedException
StatexistsStatexists(Stringpath,booleanwatch)throwsKeeperException,InterruptedException
//異步方式單擊此處添加項(xiàng)正文
StatCallbackInvocationvoidexists(Stringpath,Watcherwatcher,StatCallbackcb,Objectctx)判斷ZNode是否存在
StatCallbackUsageinPathExistenceCheckvoidexists(Stringpath,booleanwatch,StatCallbackcb,Objectctx)同步exists方法一共有兩個(gè)參數(shù)path:第一個(gè)參數(shù)是ZNode路徑watch或者watcher第二個(gè)參數(shù)是一個(gè)布爾類型的watch或者是一個(gè)自定義的Watcher對(duì)象。同步模式和異步模式分別有兩個(gè)方法,第一個(gè)方法傳遞一個(gè)新的Watcher對(duì)象(我們需要自定義實(shí)現(xiàn))。第二個(gè)方法使用默認(rèn)Watcher,如果開啟Watcher只需要將第二個(gè)參數(shù)設(shè)置為true(不需要我們自己實(shí)現(xiàn))。用來(lái)監(jiān)控節(jié)點(diǎn)數(shù)據(jù)變化以及節(jié)點(diǎn)的創(chuàng)建和刪除異步exists方法參數(shù)增加除了同步exists方法中的兩個(gè)參數(shù)以外,異步模式的exists方法還增加了cb和ctx兩個(gè)參數(shù)獲取節(jié)點(diǎn)數(shù)據(jù)
01ZooKeepergetData方法介紹ZooKeeper類提供了getData方法來(lái)獲取指定ZNode中的數(shù)據(jù)以及狀態(tài)。getData方法如下所示
02//同步方式單擊此處添加項(xiàng)正文
03getDatamethodoverviewbyte[]getData(Stringpath,Watcherwatcher,Statstat)throwsKeeperException,InterruptedException
04getDataMethodDescriptionbyte[]getData(Stringpath,booleanwatch,Statstat)throwsKeeperException,InterruptedException
05//異步方式單擊此處添加項(xiàng)正文
06getDataFunctionvoidgetData(Stringpath,Watcherwatcher,DataCallbackcb,Objectctx)獲取節(jié)點(diǎn)數(shù)據(jù)
getDataFunctionvoidgetData(Stringpath,booleanwatch,DataCallbackcb,Objectctx)同步getData方法返回值就是節(jié)點(diǎn)中存儲(chǔ)的數(shù)據(jù)值,它有三個(gè)參數(shù)path:第一個(gè)參數(shù)是節(jié)點(diǎn)的路徑,用于表示要獲取哪個(gè)節(jié)點(diǎn)中的數(shù)據(jù)watch或者watcher第二個(gè)參數(shù)是一個(gè)布爾類型的watch或者是一個(gè)自定義的Watcher對(duì)象。用來(lái)監(jiān)控節(jié)點(diǎn)數(shù)據(jù)變化以及節(jié)點(diǎn)是否被刪除stat:第三個(gè)參數(shù)用于存儲(chǔ)節(jié)點(diǎn)的狀態(tài)信息異步getData方法參數(shù)增加除了同步getData方法中的三個(gè)參數(shù)以外,異步模式的getData方法還增加了cb和ctx兩個(gè)參數(shù)修改節(jié)點(diǎn)的數(shù)據(jù)內(nèi)容ZooKeepersetData方法介紹ZooKeeper類提供了setData方法來(lái)修改指定ZNode中的數(shù)據(jù)。setData方法如下所示//同步方法單擊此處添加項(xiàng)正文SetDataPathStatsetData(Stringpath,byte[]data,intversion)throwsKeeperException,InterruptedException//異步方法單擊此處添加項(xiàng)正文setDataFunctionDescriptionvoidsetData(Stringpath,byte[]data,intversion,StatCallbackcb,Objectctx)同步setData方法有三個(gè)參數(shù)單擊此處添加項(xiàng)正文修改節(jié)點(diǎn)的數(shù)據(jù)內(nèi)容
path:第一個(gè)參數(shù)是節(jié)點(diǎn)的路徑單擊此處添加項(xiàng)正文
data:第二個(gè)參數(shù)是修改的數(shù)據(jù)值單擊此處添加項(xiàng)正文
version最后一個(gè)參數(shù)當(dāng)前ZNode版本。每當(dāng)數(shù)據(jù)發(fā)生變化時(shí),ZooKeeper都會(huì)更新ZNode的版本號(hào)
異步setData參數(shù)詳解除了同步setData方法中的三個(gè)參數(shù)以外,異步模式的setData方法還增加了cb和ctx兩個(gè)參數(shù)
ZooKeepergetChildren方法介紹ZooKeeper類提供getChildren方法來(lái)獲取指定ZNode下的所有子節(jié)點(diǎn)。getChildren方法如下所示
//同步方式單擊此處添加項(xiàng)正文修改節(jié)點(diǎn)的數(shù)據(jù)內(nèi)容GetChildrenNodes
List<String>getChildren(Stringpath,Watcherwatcher)throwsKeeperException,InterruptedExceptionGetChildrenNodes
List<String>getChildren(Stringpath,booleanwatch)throwsKeeperException,InterruptedException//異步方式
單擊此處添加項(xiàng)正文GetChildrenCallback
voidgetChildren(Stringpath,Watcherwatcher,ChildrenCallbackcb,Objectctx)getChildrenfunction
voidgetChildren(Stringpath,booleanwatch,Children2Callbackcb,Objectctx)同步getChildren方法有兩個(gè)參數(shù)
單擊此處添加項(xiàng)正文修改節(jié)點(diǎn)的數(shù)據(jù)內(nèi)容
path:第一個(gè)參數(shù)是節(jié)點(diǎn)路徑單擊此處添加項(xiàng)正文
watch或者watcher第二個(gè)參數(shù)是一個(gè)布爾類型的watch或者是一個(gè)自定義的Watcher對(duì)象。用來(lái)監(jiān)控節(jié)點(diǎn)數(shù)據(jù)變化以及節(jié)點(diǎn)是否被刪除。用于監(jiān)控節(jié)點(diǎn)的刪除以及子節(jié)點(diǎn)的創(chuàng)建與刪除操作
getChildren方法參數(shù)增加除了同步getChildren方法中的三個(gè)兩個(gè)以外,異步模式的getChildren方法還增加了cb和ctx兩個(gè)參數(shù)刪除節(jié)點(diǎn)01ZooKeeperdelete方法ZooKeeper類提供了delete方法來(lái)刪除指定的ZNode。delete方法如下所示02//同步方式單擊此處添加項(xiàng)正文03voiddeletevoiddelete(Stringpath,intversion)throwsInterruptedException,KeeperException04//異步方式單擊此處添加項(xiàng)正文05VoidDeleteFunctionvoiddelete(Stringpath,intversion,VoidCallbackcb,Objectctx)刪除節(jié)點(diǎn)
同步delete方法有兩個(gè)參數(shù)單擊此處添加項(xiàng)正文
path:第一個(gè)參數(shù)是節(jié)點(diǎn)路徑單擊此處添加項(xiàng)正文
version最后一個(gè)參數(shù)是當(dāng)前ZNode版本。每當(dāng)數(shù)據(jù)發(fā)生變化時(shí),ZooKeeper都會(huì)更新ZNode的版本號(hào)
異步delete方法參數(shù)增加除了同步delete方法中的兩個(gè)參數(shù)以外,異步模式的delete方法還增加了cb和ctx兩個(gè)參數(shù)任務(wù)實(shí)施準(zhǔn)備環(huán)境
步驟1:?jiǎn)?dòng)Zookeeper,分別在3個(gè)節(jié)點(diǎn)上執(zhí)行bin/zkServer.shstart注意Zookeeper在大多數(shù)節(jié)點(diǎn)存活下,才會(huì)有效。所以啟動(dòng)第一臺(tái)的時(shí)候,會(huì)報(bào)錯(cuò),等三個(gè)節(jié)點(diǎn)都啟動(dòng)完畢之后,就會(huì)正常了步驟2:查看Zookeeper運(yùn)行狀態(tài),分別在3臺(tái)節(jié)點(diǎn)上執(zhí)行bin/zkServer.shstatus步驟3打開Idea,新建一個(gè)maven項(xiàng)目demo,新建一個(gè)包,包名為com.jsck.zookeeper準(zhǔn)備環(huán)境步驟4:添加zookeeper依賴,在pom.xml文件中添加以下代碼<dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId>準(zhǔn)備環(huán)境
<version>3.4.10</version>單擊此處添加項(xiàng)正文
</dependency>單擊此處添加項(xiàng)正文
步驟5在resources目錄下新建一個(gè)日志文件,名為perties,在里面輸入以下內(nèi)容
log4j.rootLogger=INFO,stdout單擊此處添加項(xiàng)正文
Log4jConsoleAppenderConfigurationlog4j.appender.stdout=org.apache.log4j.ConsoleAppender
Log4jAppenderConfigurationlog4j.appender.stdout.layout=org.apache.log4j.PatternLayout準(zhǔn)備環(huán)境單擊此處添加正文
Log4jLayoutPatternlog4j.appender.stdout.layout.ConversionPattern=%d%p[%c]-%m%nLog4jFileAppenderConfigurationlog4j.appender.logfile=org.apache.log4j.FileAppenderlog4j.appender.logfile.File=target/spring.log單擊此處添加項(xiàng)正文Log4jLayoutConfigurationlog4j.appender.logfile.layout=org.apache.log4j.PatternLayoutLog4jLayoutConfigurationlog4j.appender.logfile.layout.ConversionPattern=%d%p[%c]-%m%n節(jié)點(diǎn)操作
步驟1創(chuàng)建永久節(jié)點(diǎn)mydir。在src-java下面創(chuàng)建包c(diǎn)n.jsck.zookeeper,在該包下新建java文件CreateNode.java,在main函數(shù)里面輸入如下代碼//創(chuàng)建zookeeper客戶端ZookeeperConnectionStringStringconnectStr="master:2181,hadoop1:2181,hadoop2:2181"http://參數(shù)1:zk服務(wù)地址;參數(shù)2:會(huì)話超過時(shí)間;參數(shù)3:監(jiān)視器ZooKeeperInitializationZooKeeperzk=newZooKeeper(connectStr,3000,null)//參數(shù)1:創(chuàng)建節(jié)點(diǎn)路徑和名稱;參數(shù)2:節(jié)點(diǎn)數(shù)據(jù)內(nèi)容;參數(shù)3:節(jié)點(diǎn)權(quán)限;參數(shù)4:節(jié)點(diǎn)類型節(jié)點(diǎn)操作
ZookeeperNodeCreationzk.create("/mydir","mycontent".getBytes(),ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT)
//關(guān)閉zk連接單擊此處添加項(xiàng)正文
zk.close()單擊此處添加項(xiàng)正文
注意如果沒有配置windows/etc/hosts文件,也就是沒有配置master、hadoop1、hadoop2主機(jī)名和ip地址的映射關(guān)系,那么上面的master、hadoop1、hadoop2需要改成對(duì)應(yīng)的ip地址
步驟2獲取節(jié)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030長(zhǎng)春汽車產(chǎn)業(yè)基地發(fā)展現(xiàn)狀競(jìng)爭(zhēng)格局優(yōu)化路徑投資前瞻規(guī)劃分析報(bào)告
- 2025-2030鋅合金產(chǎn)業(yè)行業(yè)市場(chǎng)現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 2025-2030通訊設(shè)備研發(fā)制造行業(yè)市場(chǎng)供需分析及投資潛力評(píng)估規(guī)劃分析報(bào)告
- 2025-2030通信行業(yè)G技術(shù)應(yīng)用與市場(chǎng)前景深度分析報(bào)告
- 2025-2030遠(yuǎn)程教育智能互動(dòng)設(shè)備市場(chǎng)發(fā)展?jié)摿Ω?jìng)爭(zhēng)態(tài)勢(shì)投資評(píng)估規(guī)劃規(guī)劃研究報(bào)告
- 光伏電廠防洪防汛應(yīng)急預(yù)案演練方案
- 2026四川省醫(yī)學(xué)科學(xué)院四川省人民醫(yī)院專職科研人員、工程師招聘3人備考題庫(kù)(二)及答案詳解1套
- 2026中共昆明市晉寧區(qū)委社會(huì)工作部招聘編外聘用人員3人備考題庫(kù)(云南)及參考答案詳解1套
- 2026秋招:北汽集團(tuán)題庫(kù)及答案
- 廠內(nèi)安全培訓(xùn)課件
- 消化內(nèi)鏡ERCP技術(shù)改良
- 云南師大附中2026屆高三1月高考適應(yīng)性月考卷英語(yǔ)(六)含答案
- 2026湖北隨州農(nóng)商銀行科技研發(fā)中心第二批人員招聘9人筆試備考試題及答案解析
- 紀(jì)念館新館項(xiàng)目可行性研究報(bào)告
- 仁愛科普版(2024)八年級(jí)上冊(cè)英語(yǔ)Unit1~Unit6補(bǔ)全對(duì)話練習(xí)題(含答案)
- 騎行美食活動(dòng)方案策劃(3篇)
- 石化企業(yè)環(huán)保培訓(xùn)課件
- 2026年呂梁職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能考試備考試題帶答案解析
- 2025年新疆師范大學(xué)輔導(dǎo)員招聘考試真題及答案
- 電梯更新改造方案
- 買車背戶協(xié)議書
評(píng)論
0/150
提交評(píng)論