zookeeper兩大核心與API
阿新 • • 發佈:2018-10-31
zookeeper的兩大核心
檔案系統 儲存 進入zk的客戶端: zkCli.sh [zk: localhost:2181(CONNECTED) 0] 1)zk的檔案系統 和linux的檔案系統目錄結構一樣 從/開始的 2)zk的路徑訪問方式 只有絕對路徑 沒有相對路徑 所有的路徑訪問從/開始 3) zk中沒有檔案的概念 也沒有目錄的概念 只有節點的概念 節點Znode Znode既有檔案的功能 又有目錄的功能 4)zk的Znode的分類: 從生命週期: 1)臨時節點 EPHEMERAL 建立命令:create -e 節點名字(全路徑的) 儲存內容 臨時節點只對當前客戶端生效 當前客戶端退出 臨時節點失效 臨時節點隨著客戶端的退出而刪除的 2)永久節點 建立命令:create 節點名字(全路徑的) 儲存內容 預設建立的節點都是永久節點 永久節點對所有客戶端生效 不會自動刪除 要想刪除 手動刪除 按有無編號分: 1)有編號節點 SEQUENTIAL -s 永久有編號節點 命令:create -s 節點名字(全路徑的) 儲存內容 在建立的節點名稱後新增一個編號 這個編號從0開始的 這個編號是由父節點維護的 這個編號順序遞增 不管節點是有編號還是無編號都會順序遞增 編號:記錄當前父節點下的子節點個數 及子節點的建立順序的 特點:重複建立相同名稱的節點 因為自動新增編號 臨時有編號節點: 建立命令:create -e -s 節點名字(全路徑的) 儲存內容 這個編號是不分有編號還是無編號的, 臨時的還是永久的, 存在的還是刪除的都會順序遞增 可以建立多次的 2)無編號節點 永久無編號節點 create 節點名字(全路徑的)儲存內容 臨時無編號節點 create -e 節點名字(全路徑的)儲存內容 特點:沒有編號 只能建立一次 5)臨時節點不能有子節點 永久節點是可以有子節點的 有子節點的節點 一定是永久節點 6)對於zk來說他的Znode儲存大小不要超過1M 最好不要超過1kb的資料 1)zk儲存的只是核心資訊 狀態 2)zk來說 每一個Znode儲存的資料越大 一致性越難保證 7)對於zk來說,有幾個節點資料就會儲存幾份 每一個節點儲存的資料一樣的 8)可以對Znode新增監聽 監聽物件:Znode 監聽機制: 用自己的監聽機制 監聽自己的檔案系統 如果你對zk的檔案系統中的某一個Znode感興趣 就可以對這個Znode新增監聽 監聽事件的型別: Znode建立 nodeCreated Znode刪除 nodeDeleted Znode的資料變化 nodeDataChanged Znode的子節點的變化 nodeChildrenChanged 監聽的新增操作: shell 命令最後 watch 代表添加了監聽 ls/getChildren ---nodeChildrenChanged stat path [watch] get/getData path [watch] --- nodeDataChanged exists(API)------ nodeCreated nodeDeleted 監聽的觸發操作: ls/getChilren create delete get/getData set 1)create 2)delete/rmr 3)set 注意:新增一次監聽只能生效一次 想要再次生效 只能重新新增 shell: zkCli.sh help 檢視所有的命令 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 1)建立節點 create [-s] [-e] path data create path data create -e path data create -s path data create -s -e path data 2)獲取節點內容 get path(絕對路徑) 3)修改節點內容 set path data set /test00 "hello" 4)刪除節點 delete path 只能刪除空節點 刪除沒有子節點的節點 rmr path rmr /test00 可以刪除非空的節點 也可以刪除空節點 5)連線zk connect host:port connect hadoop02:2181 6)檢視歷史操作命令 history 7)檢視節點狀態資訊 stat path cZxid = 0x300000005 節點的建立時間 ctime = Fri Oct 26 01:15:23 CST 2018 mZxid = 0x300000005 節點的修改時間 mtime = Fri Oct 26 01:15:23 CST 2018 pZxid = 0x30000000c 節點的版本資訊 cversion = 4 dataVersion = 0 aclVersion = 0 節點的屬性 永久的 還是 臨時的 這個引數標識的 ephemeralOwner = 0x0 儲存的資料長度 dataLength = 0 子節點的個數 numChildren = 4 解析: 1)ephemeralOwner 如果是永久節點 值=0x0 如果是臨時節點 zk每次進入客戶端的時候都會有一個當前客戶端的sessionid sessionid = 0x266ac28a1a50001 用於標識當前客戶端的 如果是臨時節點 這個值就是sessionid ephemeralOwner = 0x266ac28a1a50001 2)Zxid 當前節點全域性唯一id標識 全域性性的順序遞增 id實際上標識 全域性的事件提交順序 cZxid:建立節點事件的id標識 mZxid:修改節點事件的id標識 pZxid:子節點變化的事件的id 上面的三個id無論哪一個事件發生 都是全域性變化的 cZxid=00000002 mZxid=00000002 pZxid=00000002 修改節點: cZxid=00000002 mZxid=00000003 pZxid=00000002 在/建立了3個節點 建立一個子節點: cZxid=00000002 mZxid=00000003 pZxid=00000007 每次事件提交的時候 都是在全域性的最大的id之上進行順序遞增的 zxid用於標識整個分散式叢集中各個節點的資料版本 這個zxid越大 證明資料版本越新 API: 配置zk的開發環境 eclipse eclipse上配置zk的視覺化連線介面 1)解壓zk的外掛包 2)將外掛包下的所有的jar包 放在eclipse的外掛包的位置下 %ECLIPSE_HOME%\plugins 3)開啟eclipse進行視覺化配置
4)進入windowzhongshow view 找到zookeeper並雙擊開啟
6)點選黃色圖示,新建連線,新增zookeeper節點