Zookeeper介紹和節點的操作 (一)


一、zookeeper /ˈzuːkiːpə(r)/ 介紹

它是一個分布式服務框架,是Apache Hadoop 的一個子項目,它主要是用來解決分布式應用中經常遇到的一些數據管理問題,如:統一命名服務、狀態同步服務、集群管理、分布式應用配置項的管理等。ZooKeeper包含一個簡單的原語集,提供Java和C的接口。

簡單來說 zookeeper=文件系統+監聽通知機制

1、Znode節點(不可能會重名)

  1.1  什么是節點

    代表一個服務的名稱,就是服務實例描述的抽象。

  2.1  Znode  

    znode 是一個跟 Unix 文件系統路徑相似的節點,可以往這個節點存儲 或獲取數據。 Zookeeper 底層是一套數據結構。這個存儲結構是一個樹形結構,其上的每一個節點, 我們稱之為“znode” zookeeper 中的數據是按照“樹”結構進行存儲的。而且 znode 節點還分為 4 中不同的類 型。 每一個 znode 默認能夠存儲 1MB 的數據(對於記錄狀態性質的數據來說,夠了) 可以使用 zkCli 命令,登錄到 zookeeper 上,並通過 ls、create、delete、get、set 等命令 操作這些 znode 節點.

  (節點路徑 key) ,節點數據 (value)

  key  == / + key名稱

  value== 數據(服務的實際地址)

  key == value 一對一關系

   2.2 Zonde 操作(create,set,delete,deleteall,get,rmr)(key,value)

    客戶端

    1.命令行

      1.1 創建節點 (almosc 是自己隨意取的名字),不可以重復創建,一個節點只能對應一個

creat  /alomsc "localhost:8080"

 

       1.2 查詢節點

get /alomsc

       1.3 修改節點

set /alomsc "localhost:8090"

        1.4刪除節點

rmr /alomsc  -- 刪除當前節點和所有的子節點
delete/alomsc  -- 只能刪除沒有子節點的節點

         1.5創建子節點 --在alomsc下創建子節點

create /alomsc/child "childName"

   節點類型:

    持久化節點(存儲在磁盤上,必須通過rmr,delete,deleteall 來進行刪除)

    臨時節點 (存儲在內存,刪除可以手動,zookeeper關閉的時候也會刪除)

    順序節點 (創建節點的時候會添加順序)--常見分布式鎖

    創建臨時節點,另外臨時節點是不允許有子節點的  

create -e  /alomsc "temporary"

    創建順序節點,順序節點下面是可以有子節點的

create -s  /alomsc "sequence"

 

 

 

 

 

 

     節點版本號:

      version:節點(set,delete)

      為什么會出現版本號的原因:

      其原因和java中線程鎖的原理差不多,防止有多個客戶端對同一個節點操作產生錯誤。

    2.java api (修改的時候根據的版本號要根據最新的版本號)

String path ="localhost:2181";
//        啟動java客戶端 5000是超時時間
        ZooKeeper zooKeeper = new ZooKeeper(path, 5000, new Watcher() {
            @Override
            public void process(WatchedEvent watchedEvent) {
                Event.KeeperState state = watchedEvent.getState();
                System.out.println(state.toString());
            }
        });
        byte[] data = "localhots:8099".getBytes();
//        創建
//        zooKeeper.create("/alomsc",data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);
        System.out.println("success");
//      獲取版本號
        Stat stat = zooKeeper.exists("/alex",true);
//        修改 ,返回當前版本號
        Stat stat1 = zooKeeper.setData("/alex", data, stat.getVersion());
        System.out.println("版本號:"+stat.getVersion());
        System.out.println("版本號2:"+stat1.getVersion());
 //        刪除
//        zooKeeper.delete("/almosc000000004",0);

ls  /     列出根目錄節點下的所有文件 改目錄下有兩個節點

 

stat /zookeeper  查看節點狀態
zookeeper  是節點名稱
[zk: 127.0.0.1:2181(CONNECTED) 6] stat /zookeeper
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1

 

 

cZxid:創建節點時的事務id
pZxid:子節點列表最后一次被修改的事務id
cversion:節點版本號
dataCersion:數據版本號
aclVerson:acl權限版本號

    3.zkClien

    4.aurator

 

 

 

 

 

 

 

 

 

                                                                                                       

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM