Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
HadoopÈÕ¼ÇDay20---ZooKeeperϵÁУ¨Èý£©
 
ÒëÕߣºsunddenly£¬»ðÁú¹ûÈí¼þ ·¢²¼ÓÚ£º2014-11-18
  3071  次浏览      27
 

Ç°ÃæËäÈ»ÅäÖÃÁ˼¯ÈºÄ£Ê½µÄZookeeper£¬µ«ÊÇΪÁË·½ÃæÑ§½¨ÒéÔÚα·Ö²¼Ê½Ä£Ê½µÄZookeeperѧϰZookeeperµÄshellÃüÁî¡£

Ò»¡¢ZookeeperµÄËÄ×ÖÃüÁî

ZookeeperÖ§³ÖÄ³Ð©ÌØ¶¨µÄËÄ×ÖÃüÁî×ÖĸÓëÆäµÄ½»»¥¡£ËûÃÇ´ó¶àÊýÊDzéѯÃüÁÓÃÀ´»ñÈ¡Zookeeper·þÎñµÄµ±Ç°×´Ì¬¼°Ïà¹ØÐÅÏ¢¡£Óû§ÔÚ¿Í»§¶Ë¿ÉÒÔͨ¹ýtelnet»òncÏòZookeeperÌá½»ÏàÓ¦µÄÃüÁî¡£Zookeeper³£ÓõÄËÄ×ÖÃüÁî¼ûͼ1.1Ëùʾ¡£

ͼ 1.1

ͼ1.2ÊÇZookeeperËÄ×ÖÃüÁîµÄÒ»¸ö¼òµ¥ÓÃÀý¡£

[root@hadoop ~]# echo ruok|nc localhost 2181
[root@hadoop ~]# zkServer.sh start zoo1.cfg
JMX enabled by default
Using config: /usr/local/zk/bin/../conf/zoo1.cfg
Starting zookeeper ... STARTED
[root@hadoop ~]# zkServer.sh start zoo2.cfg
JMX enabled by default
Using config: /usr/local/zk/bin/../conf/zoo2.cfg
Starting zookeeper ... STARTED
[root@hadoop ~]# zkServer.sh start zoo3.cfg
JMX enabled by default
Using config: /usr/local/zk/bin/../conf/zoo3.cfg
Starting zookeeper ... STARTED
[root@hadoop ~]# echo ruok|nc localhost 2181
imok[root@hadoop ~]# echo ruok|nc localhost 2182
imok[root@hadoop ~]# echo ruok|nc localhost 2183
imok[root@hadoop ~]# echo conf|nc localhost 2181
clientPort=2181
dataDir=/usr/local/zk/data_1/version-2
dataLogDir=/usr/local/zk/logs_1/version-2
tickTime=2000
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
serverId=0
initLimit=10
syncLimit=5
electionAlg=3
electionPort=3387
quorumPort=2287
peerType=0
[root@hadoop ~]#

¶þ¡¢ZookeeperµÄ¼òµ¥²Ù×÷

2.1 ZookeeperµÄshell²Ù×÷

2.1.1 ZookeeperÃüÁ¾ß

ÔÙÆô¶¯Zookeeper·þÎñÖ®ºó£¬ÊäÈëÒÔÏÂÃüÁÁ¬½Óµ½Zookeeper·þÎñ£º

zkCli.sh -server localhost:2181

Ö´Ðнá¹ûÈçÏÂËùʾ£º

[root@hadoop ~]# zkCli.sh -server localhost:2181
Connecting to localhost:2181
2014-10-17 03:35:51,051 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.5-1392090, built on 09/30/2012 17:52 GMT
2014-10-17 03:35:51,055 [myid:] - INFO [main:Environment@100] - Client environment:host.name=hadoop
2014-10-17 03:35:51,057 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.6.0_24
2014-10-17 03:35:51,057 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Sun Microsystems Inc.
2014-10-17 03:35:51,066 [myid:] - INFO [main:Environment@100] - Client environment:java.home=/usr/local/jdk/jre
2014-10-17 03:35:51,079 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=/usr/local/zk/bin/../build/classes:/usr/local/zk/bin/../build/lib/ *.jar:/usr/local/zk/bin/../lib/slf4j-log4j12-1.6.1.jar:/usr/local/zk/bin/../lib/slf4j-api-1.6.1. jar:/usr/local/zk/bin/../lib/netty-3.2.2.Final.jar:/usr/local/zk/bin/ ../lib/log4j-1.2.15.jar:/usr/local/zk/bin/../lib/jline-0.9.94.jar:/usr/local/zk/bin/../ zookeeper-3.4.5.jar:/usr/local/zk/bin/../src/java/lib/*.jar:/usr/local/zk/bin/../conf:
2014-10-17 03:35:51,083 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=/usr/local/jdk/jre/lib/ i386/client:/usr/local/jdk/jre/lib/i386:/usr/local/jdk/jre/../lib/i386:/usr/java/packages/lib/i386:/lib:/usr/lib
2014-10-17 03:35:51,084 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
2014-10-17 03:35:51,086 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=<NA>
2014-10-17 03:35:51,099 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Linux
2014-10-17 03:35:51,100 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=i386
2014-10-17 03:35:51,101 [myid:] - INFO [main:Environment@100] - Client environment:os.version=2.6.32-358.el6.i686
2014-10-17 03:35:51,101 [myid:] - INFO [main:Environment@100] - Client environment:user.name=root
2014-10-17 03:35:51,102 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/root
2014-10-17 03:35:51,106 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=/root
2014-10-17 03:35:51,120 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=localhost:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@b02e7a
Welcome to ZooKeeper!
JLine support is enabled
2014-10-17 03:35:51,233 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@966] - Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (Unable to locate a login configuration)
2014-10-17 03:35:51,247 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@849] - Socket connection established to localhost/127.0.0.1:2181, initiating session
[zk: localhost:2181(CONNECTING) 0] 2014-10-17 03:35:51,290 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@1207] - Session establishment complete on server localhost/127.0.0.1:2181, sessionid = 0x491da0e20b0000, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null

[zk: localhost:2181(CONNECTED) 0]

Á¬½Ó³É¹¦Ö®ºó£¬ÏµÍ³»áÊä³öZookeeperµÄÏà¹Ø»·¾³¼°ÅäÖÃÐÅÏ¢£¬²¢ÔÚÆÁÄ»Êä³ö¡°welcome to Zookeeper£¡¡±µÈÐÅÏ¢¡£ÊäÈëhelpÖ®ºó£¬ÆÁÄ»»áÊä³ö¿ÉÓõÄZookeeperÃüÁÈçͼ2.1Ëùʾ¡£

ͼ 2.1

2.1.2 ʹÓÃZookeeperÃüÁîµÄ¼òµ¥²Ù×÷²½Öè

£¨1£©Ê¹ÓÃlsÃüÁî²é¿´µ±Ç°ZookeeperÖÐËù°üº¬µÄÄÚÈÝ£ºls /

[zk: localhost:2181(CONNECTED) 1] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 2]

£¨2£©´´½¨Ò»¸öеÄZnode½Úµã"zk"£¬ÒÔ¼°ºÍËüÏà¹Ø×Ö·û£¬Ö´ÐÐÃüÁcreate /zk myData

[zk: localhost:2181(CONNECTED) 2] create /zk myData
Created /zk

£¨3£©ÔÙ´ÎʹÓÃlsÃüÁîÀ´²é¿´ÏÖÔÚZookeeperµÄÖÐËù°üº¬µÄÄÚÈÝ£ºls /

[zk: localhost:2181(CONNECTED) 3] ls /
[zk, zookeeper]

´Ëʱ¿´µ½£¬zk½ÚµãÒѾ­±»´´½¨¡£

£¨4£©Ê¹ÓÃgetÃüÁîÀ´È·Èϵڶþ²½ÖÐËù´´½¨µÄZnodeÊÇ·ñ°üº¬ÎÒÃÇ´´½¨µÄ×Ö·û´®£¬Ö´ÐÐÃüÁget /zk

[zk: localhost:2181(CONNECTED) 4] get /zk
myData
cZxid = 0x500000006
ctime = Fri Oct 17 03:54:20 PDT 2014
mZxid = 0x500000006
mtime = Fri Oct 17 03:54:20 PDT 2014
pZxid = 0x500000006
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0

£¨4£©½ÓÏÂÀ´Í¨¹ýsetÃüÁîÀ´¶ÔzkËù¹ØÁªµÄ×Ö·û´®½øÐÐÉèÖã¬Ö´ÐÐÃüÁset /zk jiang1234

[zk: localhost:2181(CONNECTED) 5] set /zk jiang2014
cZxid = 0x500000006
ctime = Fri Oct 17 03:54:20 PDT 2014
mZxid = 0x500000007
mtime = Fri Oct 17 03:55:50 PDT 2014
pZxid = 0x500000006
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 9
numChildren = 0

£¨5£©ÔÙ´ÎʹÓÃgetÃüÁîÀ´²é¿´£¬ÉÏ´ÎÐ޸ĵÄÄÚÈÝ£¬Ö´ÐÐÃüÁget /zk

[zk: localhost:2181(CONNECTED) 6] get /zk
jiang2014
cZxid = 0x500000006
ctime = Fri Oct 17 03:54:20 PDT 2014
mZxid = 0x500000007
mtime = Fri Oct 17 03:55:50 PDT 2014
pZxid = 0x500000006
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 9
numChildren = 0

£¨6£©ÏÂÃæÎÒÃǽ«¸Õ²Å´´½¨µÄZnodeɾ³ý£¬Ö´ÐÐÃüÁdelete /zk

[zk: localhost:2181(CONNECTED) 7] delete /zk

£¨7£©×îºóÔÙ´ÎʹÓÃlsÃüÁî²é¿´ZookeeperÖеÄÄÚÈÝ£¬Ö´ÐÐÃüÁls /

[zk: localhost:2181(CONNECTED) 8] ls /
[zookeeper]

¾­¹ýÑéÖ¤£¬zk½ÚµãÒѾ­É¾³ý¡£

2.2 ZookeeperµÄapiµÄ¼òµ¥Ê¹ÓÃ

2.2.1 ZookeeperAPI¼ò½é

Zookeeper API¹²°üº¬Îå¸ö°ü£¬·Ö±ðΪ£º

£¨1£©org.apache.zookeeper

£¨2£©org.apache.zookeeper.data

£¨3£©org.apache.zookeeper.server

£¨4£©org.apache.zookeeper.server.quorum

£¨5£©org.apache.zookeeper.server.upgrade

ÆäÖÐorg.apache.zookeeper£¬°üº¬ZookeeperÀ࣬ËûÊÇÎÒÃDZà³Ìʱ×î³£ÓõÄÀàÎļþ¡£Õâ¸öÀàÊÇZookeeper¿Í»§¶ËµÄÖ÷ÒªÀàÎļþ¡£Èç¹ûҪʹÓÃZookeeper·þÎñ£¬Ó¦ÓóÌÐòÊ×ÏȱØÐë´´½¨Ò»¸öZookeeperʵÀý£¬Õâʱ¾ÍÐèҪʹÓôËÀà¡£Ò»µ©¿Í»§¶ËºÍZookeeper·þÎñ½¨Á¢ÆðÁËÁ¬½Ó£¬Zookeeperϵͳ½«»á¸ø´ÎÁ¬½Ó»á»°·ÖÅäÒ»¸öIDÖµ£¬²¢ÇÒ¿Í»§¶Ë½«»áÖÜÆÚÐÔµÄÏò·þÎñÆ÷¶Ë·¢ËÍÐÄÌøÀ´Î¬³Ö»á»°Á¬½Ó¡£Ö»ÒªÁ¬½ÓÓÐЧ£¬¿Í»§¶Ë¾Í¿ÉÒÔʹÓÃZookeeper APIÀ´×öÏàÓ¦´¦ÀíÁË¡£

ZookeeperÀàÌṩÁËÈçͼ2.2ËùʾµÄ¼¸ÀàÖ÷Òª·½·¨

ͼ 2.2

2.2.2 Zookeeper APIµÄʹÓÃ

ÕâÀïͨ¹ýÒ»¸öÀý×ÓÀ´¼òµ¥½éÉÜÈçºÎʹÓÃZookeeper API ±àд×Ô¼ºµÄÓ¦ÓóÌÐò£¬´úÂëÈçÏ£º

package org.zk;

import java.io.IOException;
import java.util.List;

import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.ZooKeeper;

public class ListGroup extends ConnectionWatcher {
    public void list(String groupNmae) throws KeeperException, InterruptedException{
        String path ="/"+groupNmae;
        try {
            List children = zk.getChildren(path, false);
            if(children.isEmpty()){
                System.out.printf("No memebers in group %s\n",groupNmae);
                System.exit(1);
            }
            for(String child:children){
                System.out.println(child);
            }
        } catch (KeeperException.NoNodeException e) {
            System.out.printf("Group %s does not exist \n", groupNmae);
            System.exit(1);
        } 
    }
    public static void main(String[] args) throws IOException, InterruptedException, KeeperException {
        ListGroup listGroup = new ListGroup();
        listGroup.connect(args[0]);
        listGroup.list(args[1]);
        listGroup.close();
    }
}

´ËÀà°üº¬Á½¸öÖ÷ÒªµÄ ZooKeeper º¯Êý£¬·Ö±ðΪ createZKInstance ()ºÍ ZKOperations()¡£ÆäÖУº

£¨1£© createZKInstance()º¯Êý¸ºÔð¶Ô ZooKeeper ʵÀý zk ½øÐгõʼ»¯¡£

ZooKeeper ÀàÓÐÁ½¸ö¹¹Ô캯Êý£¬ÎÒÃÇÕâÀïʹÓá° ZooKeeper (String connectString, int sessionTimeout ,Watcher watcher )¡±¶ÔÆä½øÐгõʼ»¯¡£Òò´Ë£¬ÎÒÃÇÐèÒªÌṩ³õʼ»¯ËùÐèµÄ£¬Á¬½Ó×Ö·û´®ÐÅÏ¢£¬»á»°³¬Ê±Ê±¼ä£¬ÒÔ¼°Ò»¸ö watcher ʵÀý¡£ 19Ðе½ 25ÐдúÂ룬ÊdzÌÐòËù¹¹ÔìµÄÒ»¸öwatcher ʵÀý£¬ËüÄܹ»Êä³öËù·¢ÉúµÄʼþ¡£

£¨2£©ZKOperations ()º¯ÊýÊÇÎÒÃÇËù¶¨ÒåµÄ¶Ô½ÚµãµÄһϵÁвÙ×÷¡£

Ëü°üÀ¨£º´´½¨ ZooKeeper ½Úµã£¨ 35Ðе½ 36ÐдúÂ룩¡¢²é¿´½Úµã£¨ 38 Ðе½ 39 ÐдúÂ룩¡¢Ð޸ĽڵãÊý¾Ý£¨ 41 Ðе½ 42 ÐдúÂ룩¡¢²é¿´Ð޸ĺó½ÚµãÊý¾Ý£¨ 44 Ðе½ 45ÐдúÂ룩¡¢É¾³ý½Úµã£¨ 47Ðе½ 48ÐдúÂ룩¡¢²é¿´½ÚµãÊÇ·ñ´æÔÚ£¨ 50 Ðе½ 51 ÐдúÂ룩¡£

×¢Ò⣺

1.ÔÚ´´½¨½ÚµãµÄʱºò£¬ÐèÒªÌṩ½ÚµãµÄÃû³Æ¡¢Êý¾Ý¡¢È¨ÏÞÒÔ¼°½ÚµãÀàÐÍ¡£´ËÍ⣬ʹÓà exists º¯Êýʱ£¬Èç¹û½Úµã²»´æÔÚ½«·µ»ØÒ»¸ö null Öµ¡£

2.¹ØÓÚ ZooKeeper API µÄ¸ü¶àÏêϸÐÅÏ¢£¬¶ÁÕß¿ÉÒԲ鿴 ZooKeeper µÄ API Îĵµ£¬ÈçÏÂËùʾ£º

´úÂëµÄÔËÐнá¹ûÈçÏ£º

1. ´´½¨ZooKeeper½Úµã£¨Znode£º/znode;Êý¾Ý£ºmyData2;ȨÏÞ£ºOPEN_ACL_UNSAFE;½ÚµãÀàÐÍ£ºPersistent£©
None
2. ²é¿´½ÚµãÊÇ·ñ´´½¨³É¹¦£º
/znode myData2
3. Ð޸ĽڵãÊý¾Ý£º
4. ²é¿´ÊÇ·ñÐ޸ijɹ¦£º
jiang1234
5. ɾ³ý½Úµã£º
6. ²é¿´/znode½Úµã״̬£º
½Úµã¼ä״̬£º[null]

Èý¡¢ZooKeeperʾÀý

¼ÙÉèÒ»×é·þÎñÆ÷£¬ÓÃÓÚΪ¿Í»§¶ËÌṩһЩ·þÎñ¡£ÎÒÃÇÏ£Íûÿ¸ö¿Í»§¶Ë¶¼Äܹ»Äܹ»ÕÒµ½ÆäÖÐһ̨·þÎñÆ÷£¬Ê¹ÆäÄܹ»Ê¹ÓÃÕâЩ·þÎñ£¬ÌôÕ½Ö®Ò»¾ÍÊÇά»¤Õâ×é·þÎñÆ÷ÁÐ±í¡£Õâ×é·þÎñÆ÷µÄ³ÉÔ±ÁбíÃ÷ÏÔ²»ÄÜ´æÔÚÍøÂçÖеĵ¥¸ö½ÚµãÉÏ£¬ÒòΪÈç¹ûÄǸö½Úµã·¢Éú¹ÊÕÏ£¬¾ÍÒâζ×ÅÊÇÕû¸öϵͳµÄ¹ÊÕÏ£¨ÎÒÃÇÏ£ÍûÕâ¸öÁбíÓкܸߵĿÉÓÃÐÔ£©¡£¼ÙÉèÎÒÃÇÓÐÁËÒ»¸ö¿É¿¿µÄ·½·¨½â¾öÁËÕâ¸ö³ÉÔ±ÁбíµÄ´æ´¢ÎÊÌâ¡£Èç¹ûÆäÖÐһ̨·þÎñÆ÷³öÏÖ¹ÊÕÏ£¬ÎÒÃÇÈÔÈ»ÐèÒª½â¾öÈçºÎ´Ó·þÎñÆ÷³ÉÔ±ÁбíÖн«Ëüɾ³ýµÄÎÊÌ⡣ij¸ö½ø³ÌÐèÒª¸ºÔðɾ³ý¹ÊÕÏ·þÎñÆ÷£¬µ«×¢Òâ²»ÄÜÓɹÊÕÏ·þÎñÆ÷×Ô¼ºÀ´Íê³É£¬ÒòΪ¹ÊÕÏ·þÎñÆ÷ÒѾ­²»ÔÙÔËÐС£
¡¡¡¡ÎÒÃÇËùÃèÊöµÄ²»ÊÇÒ»¸ö±»¶¯µÄ·Ö²¼Ê½Êý¾Ý½á¹¹£¬¶øÊÇÒ»¸öÖ÷¶¯µÄ¡¢Äܹ»ÔÚij¸öÍⲿʼþ·¢ÉúʱÐÞ¸ÄÊý¾ÝÏî״̬µÄÊý¾Ý½á¹¹¡£ZooKeeperÌṩÕâÖÖ·þÎñ£¬ËùÒÔÈÃÎÒÃÇ¿´¿´ÈçºÎʹÓÃËüÀ´ÊµÏÖÕâÖÖÖÚËùÖÜÖªµÄ×é³ÉÔ±¹ÜÀíÓ¦Óá£

ZooKeeperÖеÄ×é³ÉÔ±¹ØÏµ

¡¤Àí½âZooKeeperµÄÒ»ÖÖ·½·¨¾ÍÊǽ«Æä¿´×÷Ò»¸ö¾ßÓи߿ÉÓÃÐÔµÄÎļþϵͳ¡£µ«Õâ¸öÎļþϵͳÖÐûÓÐÎļþºÍĿ¼£¬¶øÊÇͳһʹÓ᰽ڵ㡱(node)µÄ¸ÅÄ³ÆÎªznode¡£znode¼È¿ÉÒÔ×÷Ϊ±£´æÊý¾ÝµÄÈÝÆ÷£¨ÈçͬÎļþ£©£¬Ò²¿ÉÒÔ×÷Ϊ±£´æÆäËûznodeµÄÈÝÆ÷£¨ÈçͬĿ¼£©¡£ËùÓеÄznode¹¹³ÉÒ»¸ö²ã´Î»¯µÄÃüÃû¿Õ¼ä¡£Ò»ÖÖ×ÔÈ»µÄ½¨Á¢×é³ÉÔ±ÁбíµÄ·½Ê½¾ÍÊÇÀûÓÃÕâÖÖ²ã´Î½á¹¹£¬´´½¨Ò»¸öÒÔ×éÃûΪ½ÚµãÃûµÄznode×÷Ϊ¸¸½Úµã£¬È»ºóÒÔ×é³ÉÔ±Ãû£¨·þÎñÆ÷Ãû£©Îª½ÚµãÃûÀ´´´½¨×÷Ϊ×Ó½ÚµãµÄznode¡£ÈçÏÂͼ¸ø³öÁËÒ»×é¾ßÓвã´Î½á¹¹µÄznode¡£

ͼ ZooKeeperÖеÄznode

ÔÚÕâ¸öʾÀýÖУ¬ÎÒÃÇûÓÐÔÚÈκÎznodeÖд洢Êý¾Ý£¬µ«ÔÚÒ»¸öÕæÊµµÄÓ¦ÓÃÖУ¬Äã¿ÉÒÔ½«¡°¹ØÓÚ³ÉÔ±µÄÊý¾Ý¡±´æ´¢ÔÚËüÃǵÄznodeÖУ¬ÀýÈçÖ÷»úÃû¡£

3.1 ´´½¨×é

3.1.1 ´úÂëʾÀý

ÈÃÎÒÃÇͨ¹ý±àдһ¶Î³ÌÐòµÄ·½Ê½À´ÔÙ´ÎÏêϸ½éÉÜZooKeeperµÄJava API£¬Õâ¶ÎʾÀý³ÌÐòÓÃÓÚΪ×éÃûΪ/zooµÄ×é´´½¨Ò»¸öznode¡£´úÂë²Î¼û´úÂë3.1£º

´úÂë 3.1 ¸Ã³ÌÐòÔÚZooKeeperÖÐн¨±íʾ×éµÄZnode

package org.zk;

import java.io.IOException;
import java.util.concurrent.CountDownLatch;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;

public class CreateGroup implements Watcher{
    private static final int SESSION_TIMEOUT=5000;
    
    private ZooKeeper zk;
    private CountDownLatch connectedSignal=new CountDownLatch(1);
    @Override
    public void process(WatchedEvent event) {
        if(event.getState()==KeeperState.SyncConnected){
            connectedSignal.countDown();
        }
    }
    
    public static void main(String[] args) throws IOException, InterruptedException, KeeperException {
        CreateGroup createGroup = new CreateGroup();
        createGroup.connect(args[0]);
        createGroup.create(args[1]);
        createGroup.close();
    }

    private void close() throws InterruptedException {
        zk.close();
    }

    private void create(String groupName) throws KeeperException, InterruptedException {
        String path="/"+groupName;
        if(zk.exists(path, false)== null){
            zk.create(path, null/*data*/, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        }
        System.out.println("Created:"+path);
    } 

    private void connect(String hosts) throws IOException, InterruptedException {
        zk = new ZooKeeper(hosts, SESSION_TIMEOUT, this);
        connectedSignal.await();
    }
}

ÔËÐиóÌÐòÐèÒªÅäÖÃclasspath»·¾³±äÁ¿»òÕßÔÚÖ´ÐÐjavaÃüÁîʱÌí¼Ó-classpathÑ¡Ï¾ßÌåÔËÐз½Ê½²Î¼û£ºhttp://www.cnblogs.com/sunddenly/p/4050812.html

ÔËÐкóµÄ½á¹ûΪ£º

[root@hadoop code]# ls
build classes CreateGroup.java HelloWorld.java jar.jar PackageTest.java zookeeper.out
[root@hadoop code]# javac -d ./classes CreateGroup.java
[root@hadoop code]# java org.zk.CreateGroup localhost:2181 zoo
2014-10-28 18:00:26,154 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.5-1392090, built on
2014-10-28 18:00:26,157 [myid:] - INFO [main:Environment@100] - Client environment:host.name=hadoop
2014-10-28 18:00:26,157 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.6.0_24
2014-10-28 18:00:26,157 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Sun Microsystems Inc.
2014-10-28 18:00:26,158 [myid:] - INFO [main:Environment@100] - Client environment:java.home=/usr/local/jdk/jre
2014-10-28 18:00:26,158 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=¡­¡­
¡­¡­
Created:/zoo
2014-10-28 18:00:26,236 [myid:] - INFO [main:ZooKeeper@684] - Session: 0x4956f7f1d70005 closed
2014-10-28 18:00:26,237 [myid:] - INFO [main-EventThread:ClientCnxn$EventThread@509] - EventThread shut down
[root@hadoop code]#

3.1.2 ´úÂë·ÖÎö

ÔÚÉÏÃæ´úÂëÖУ¬main()·½·¨Ö´ÐÐʱ£¬´´½¨ÁËÒ»¸öCreateGroupµÄʵÀý²¢ÇÒµ÷ÓÃÁËÕâ¸öʵÀýµÄconnect()·½·¨¡£connect·½·¨ÊµÀý»¯ÁËÒ»¸öеÄZooKeeperÀàµÄ¶ÔÏó£¬Õâ¸öÀà
Êǿͻ§¶ËAPIÖеÄÖ÷ÒªÀ࣬²¢ÇÒ¸ºÔðά»¤¿Í»§¶ËºÍZooKeeper·þÎñÖ®¼äµÄÁ¬½Ó¡£ZooKeeperÀàµÄ¹¹Ô캯ÊýÓÐÈý¸ö²ÎÊý£º

µÚÒ»¸öÊÇ£ºZooKeeper·þÎñµÄÖ÷»úµØÖ·£¬¿ÉÖ¸¶¨¶Ë¿Ú£¬Ä¬È϶˿ÚÊÇ2181¡£

µÚ¶þ¸öÊÇ£ºÒÔºÁÃëΪµ¥Î»µÄ»á»°³¬Ê±²ÎÊý£¬ÕâÀïÎÒÃÇÉè³É5Ãë¡£

µÚÈý¸öÊÇ£º²ÎÊýÊÇÒ»¸öWatcher¶ÔÏóµÄʵÀý¡£

Watcher¶ÔÏó½ÓÊÕÀ´×ÔÓÚZooKeeperµÄ»Øµ÷£¬ÒÔ»ñµÃ¸÷ÖÖʼþµÄ֪ͨ¡£ÔÚÕâ¸öÀý×ÓÖУ¬CreateGroupÊÇÒ»¸öWatcher¶ÔÏó£¬Òò´ËÎÒÃǽ«Ëü´«µÝ¸øZooKeeperµÄ¹¹Ô캯Êý¡£

µ±Ò»¸öZooKeeperµÄʵÀý±»´´½¨Ê±£¬»áÆô¶¯Ò»¸öÏß³ÌÁ¬½Óµ½ZooKeeper·þÎñ¡£ÓÉÓÚ¶Ô¹¹Ô캯ÊýµÄµ÷ÓÃÊÇÁ¢¼´·µ»ØµÄ£¬Òò´ËÔÚʹÓÃн¨µÄZooKeeper¶ÔÏó֮ǰһ¶¨ÒªµÈ´ýÆäÓëZooKeeper·þÎñÖ®¼äµÄÁ¬½Ó½¨Á¢³É¹¦¡£ÎÒÃÇʹÓÃJavaµÄCountDownLatchÀàÀ´×èֹʹÓÃн¨µÄZooKeeper¶ÔÏó£¬Ö±µ½Õâ¸öZooKeeper¶ÔÏóÒѾ­×¼±¸¾ÍÐ÷¡£Õâ¾ÍÊÇWatcherÀàµÄÓÃ;£¬ÔÚËüµÄ½Ó¿ÚÖÐÖ»ÓÐÒ»¸ö·½·¨£º

public void process(WatcherEvent event);

¿Í»§¶ËÒѾ­ÓëZooKeeper½¨Á¢Á¬½Óºó£¬WatcherµÄprocess()·½·¨»á±»µ÷Ó㬲ÎÊýÊÇÒ»¸ö±íʾ¸ÃÁ¬½ÓµÄʼþ¡£ÔÚ½ÓÊÕµ½Ò»¸öÁ¬½Óʼþ£¨ÓÉWatcher.Event.KeeperStateµÄö¾ÙÐÍÖµSyncConnectedÀ´±íʾ£©Ê±£¬ÎÒÃÇͨ¹ýµ÷ÓÃCountDownLatchµÄcountDown()·½·¨À´µÝ¼õËüµÄ¼ÆÊýÆ÷¡£Ëø´æÆ÷(latch)±»´´½¨Ê±´øÓÐÒ»¸öֵΪ1µÄ¼ÆÊýÆ÷£¬ÓÃÓÚ±íʾÔÚËüÊÍ·ÅËùÓеȴýÏß³Ì֮ǰÐèÒª·¢ÉúµÄʼþÊý¡£ÔÚµ÷ÓÃÒ»»¶countDown()·½·¨Ö®ºó£¬¼ÆÊýÆ÷µÄÖµ±äΪ0£¬Ôòawait()·½·¨·µ»Ø¡£

ÏÖÔÚconnect()·½·¨ÒѾ­·µ»Ø£¬ÏÂÒ»¸öÖ´ÐеÄÊÇCreateGroupµÄcreate()·½·¨¡£ÔÚÕâ¸ö·½·¨ÖУ¬ÎÒÃÇʹÓÃZooKeeperʵÀýÖеÄcreate()·½·¨À´´´½¨Ò»¸öеÄZooKeeperµÄznode¡£ËùÐèµÄ²ÎÊý°üÀ¨£º

1.·¾¶£ºÓÃ×Ö·û´®±íʾ¡£

2.znodeµÄÄÚÈÝ£º×Ö½ÚÊý×飬±¾ÀýÖÐʹÓÿÕÖµ¡£

3.·ÃÎÊ¿ØÖÆÁÐ±í£º¼ò³ÆACL£¬±¾ÀýÖÐʹÓÃÁËÍêÈ«¿ª·ÅµÄACL£¬ÔÊÐíÈκοͻ§¶Ë¶Ôznode½øÐжÁд¡£

4.´´½¨znodeµÄÀàÐÍ£ºÓÐÁ½ÖÖÀàÐ͵Äznode£º¶ÌÔݵĺͳ־õġ£

´´½¨znodeµÄ¿Í»§¶Ë¶Ï¿ªÁ¬½Óʱ£¬ÎÞÂÛ¿Í»§¶ËÊÇÃ÷È·¶Ï¿ª»¹ÊÇÒòΪÈκÎÔ­Òò¶øÖÕÖ¹£¬¶ÌÔÝznode¶¼»á±»ZooKeeper·þÎñɾ³ý¡£ÓëÖ®Ïà·´£¬µ±¿Í»§¶Ë¶Ï¿ªÁ¬½Óʱ£¬³Ö¾Ãznode²»»á±»É¾³ý¡£ÎÒÃÇÏ£Íû´ú±íÒ»¸ö×éµÄznode´æ»îµÄʱ¼äÓ¦µ±±È´´½¨³ÌÐòµÄÉúÃüÖÜÆÚÒª³¤£¬Òò´ËÔÚ±¾ÀýÖÐÎÒÃÇ´´½¨ÁËÒ»¸ö³Ö¾ÃµÄznode¡£
¡¡¡¡create()·½·¨µÄ·µ»ØÖµÊÇZooKeeperËù´´½¨µÄ·¾¶£¬ÎÒÃÇÓÃÕâ¸ö·µ»ØÖµÀ´´òÓ¡Ò»Ìõ±íʾ·¾¶³É¹¦´´½¨µÄÏûÏ¢¡£µ±ÎÒÃDz鿴¡°Ë³Ðòznode¡±(sequential znode)ʱ£®»á·¢ÏÖcreate()·½·¨·µ»ØµÄ·¾¶Óë´«µÝ¸ø¸Ã·½·¨µÄ·¾¶²»Í¬¡£

3.2 ¼ÓÈë×é

ÏÂÃæµÄÕâÒ»¶Î³ÌÐòÓÃÓÚ×¢²á×éµÄ³ÉÔ±¡£Ã¿¸ö×é³ÉÔ±½«×÷Ϊһ¸ö³ÌÐòÔËÐУ¬²¢ÇÒ¼ÓÈëµ½×éÖС£µ±³ÌÐòÍ˳öʱ£¬Õâ¸ö×é³ÉÔ±Ó¦µ±´Ó×éÖб»É¾³ý¡£ÎªÁËʵÏÖÕâÒ»µã£¬ÎÒÃÇÔÚZooKeeperµÄÃüÃû¿Õ¼äÖÐʹÓöÌÔÝznodeÀ´´ú±íÒ»¸ö×é³ÉÔ±¡£

´úÂë3.2 ÖеijÌÐòJoinGroup ʵÏÖÁËÕâ¸öÏë·¨¡£ÔÚ»ùÀàConnectionWatcherÖУ¬¶Ô´´½¨ºÍÁ¬½ÓZooKeeperʵÀýµÄ³ÌÐòÂß¼­½øÐÐÁËÖØ¹¹£¬²Î¼û´úÂë3.2¡£

´úÂë 3.2 ÓÃÓÚ½«³ÉÔ±¼ÓÈë×éµÄ³ÌÐò

package org.zk;

import java.io.IOException;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.ZooDefs.Ids;

public class JoinGroup extends ConnectionWatcher{
    public void join(String groupName,String memberName) throws KeeperException, InterruptedException{
        String path="/"+groupName+"/"+memberName;
        String createdPath=zk.create(path, null, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
        System.out.println("Created:"+createdPath);
    }
    public static void main(String[] args) throws InterruptedException, IOException, KeeperException {
        JoinGroup joinGroup = new JoinGroup();
        joinGroup.connect(args[0]);
        joinGroup.join(args[1], args[2]);
        
        //stay alive until process is killed or thread is interrupted
        Thread.sleep(Long.MAX_VALUE);
    }
}

´úÂë 3.3 ÓÃÓڵȴý½¨Á¢ÓëZooKeeperÁ¬½ÓµÄ¸¨ÖúÀà

package org.zk;

import java.io.IOException;
import java.util.concurrent.CountDownLatch;

import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooKeeper;

public class ConnectionWatcher implements Watcher{
    private static final int SESSION_TIMEOUT=5000;
    
    protected ZooKeeper zk;
    CountDownLatch connectedSignal=new CountDownLatch(1);
    public void connect(String host) throws IOException, InterruptedException{
        zk=new ZooKeeper(host, SESSION_TIMEOUT, this);
        connectedSignal.await();
    }
    @Override
    public void process(WatchedEvent event) {
        if(event.getState()==KeeperState.SyncConnected){
            connectedSignal.countDown();
        }
    }
    public void close() throws InterruptedException{
        zk.close();
    }

}

JoinGroupµÄ´úÂëÓëCreateGroup·Ç³£ÏàËÆ£¬ÔÚËüµÄjoin()·½·¨ÖУ¬´´½¨¶ÌÔÝznode£¬×÷Ϊ×éznodeµÄ×ӽڵ㣬Ȼºóͨ¹ýÐÝÃßÀ´Ä£ÄâÕýÔÚ×öijÖÖ¹¤×÷£¬Ö±µ½¸Ã½ø³Ì±»Ç¿ÐÐÖÕÖ¹¡£½Ó×Å£¬Äã»á¿´µ½Ëæ×Žø³ÌÖÕÖ¹£¬Õâ¸ö¶ÌÔÝznode±»ZooKeeperɾ³ý¡£

3.3 Áгö×é³ÉÔ±

ÏÖÔÚ£¬ÎÒÃÇÐèÒªÒ»¶Î³ÌÐòÀ´²é¿´×é³ÉÔ±£¬²Î¼û´úÂë3.4¡£

´úÂë 3.4 ÓÃÓÚÁгö×é³ÉÔ±µÄ³ÌÐò

package org.zk;

import java.io.IOException;
import java.util.List;

import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.ZooKeeper;

public class ListGroup extends ConnectionWatcher {
    public void list(String groupNmae) throws KeeperException, InterruptedException{
        String path ="/"+groupNmae;
        try {
            List children = zk.getChildren(path, false);
            if(children.isEmpty()){
                System.out.printf("No memebers in group %s\n",groupNmae);
                System.exit(1);
            }
            for(String child:children){
                System.out.println(child);
            }
        } catch (KeeperException.NoNodeException e) {
            System.out.printf("Group %s does not exist \n", groupNmae);
            System.exit(1);
        } 
    }
    public static void main(String[] args) throws IOException, InterruptedException, KeeperException {
        ListGroup listGroup = new ListGroup();
        listGroup.connect(args[0]);
        listGroup.list(args[1]);
        listGroup.close();
    }
}

ÔÚlist()·½·¨ÖУ¬ÎÒÃǵ÷ÓÃÁËgetChildren()·½·¨À´¼ìË÷²¢´òÓ¡Êä³öÒ»¸öznodeµÄ×Ó½ÚµãÁÐ±í£¬µ÷ÓòÎÊýΪ£º¸ÃznodeµÄ·¾¶ºÍÉèΪfalseµÄ¹Û²ì±êÖ¾¡£Èç¹ûÔÚÒ»¸öznodeÉÏÉèÖÃÁ˹۲ì±êÖ¾£¬ÄÇôһµ©¸ÃznodeµÄ״̬¸Ä±ä£¬¹ØÁªµÄ¹Û²ì(Watcher)»á±»´¥·¢¡£ËäÈ»ÔÚÕâÀïÎÒÃÇ¿ÉÒÔ²»Ê¹Óù۲죬µ«Ôڲ鿴һ¸öznodeµÄ×Ó½Úµãʱ£¬Ò²¿ÉÒÔÉèÖù۲죬ÈÃÓ¦ÓóÌÐò½ÓÊÕµ½×é³ÉÔ±¼ÓÈë¡¢Í˳öºÍ×鱻ɾ³ýµÄÓйØÍ¨Öª¡£

ÔÚÕâ¶Î³ÌÐòÖУ¬ÎÒÃDz¶×½ÁËKeeperException.NoNodeExceptionÒì³££¬´ú±í×éµÄznode²»´æÔÚʱ£¬Õâ¸öÒì³£¾Í»á±»Å׳ö¡£

ÏÂÃæ¿´Ò»ÏÂListGroup³ÌÐòµÄ¹¤×÷¹ý³Ì£ºËäÈ»´î½¨ÁË·Ö²¼Ê½µÄZooKeeper£¬µ«·Ö²¼Ê½ZooKeeperÆô¶¯ÔËÐбȽϺÄʱ£¬ÎÒÔÚÕâ²ÉÓÃÇ°ÃæÌáµ½µÄ¸´ÖÆÄ£Ê½ÏµÄZooKeeperÀ´½øÐвâÊÔ¡£

Ê×ÏÈÎÒÃÇµÃÆô¶¯ZooKeeper£¬Æô¶¯ÒÔºó½«ÉÏÃæµÄÔ´³ÌÐò·Åµ½LinuxĿ¼Öв¢½øÐбàÒ룬ÎÒ½«Æä·Åµ½ÁË"/usr/code"Ŀ¼Ï£¬²¢ÔÚ¸ÃĿ¼Ï´´½¨Ò»¸öclassesÎļþ¼Ð£¬ÓÃÓÚ´æ·ÅÉú³É×Ö½ÚÂëÎļþ£º

[root@hadoop ~]# cd /usr/code
[root@hadoop code]# ls
ConnectionWatcher.java DeleteGroup.java ListGroup.java
classes CreateGroup.java JoinGroup.java PackageTest.java
[root@hadoop code]# javac -d ./classes ConnectionWatcher.java
[root@hadoop code]# javac -d ./classes *.java

ÓÉÓÚĿǰÎÒÃÇ»¹Ã»ÓÐÔÚ×éÖÐÌí¼ÓÈκγÉÔ±£¬Òò´ËzooÊǿյģº

[root@hadoop code]# java org.zk.ListGroup  localhost zoo
2014-10-30 01:52:19,703 [myid:] - INFO  [main:Environment@100] - Client environment:¡­¡­
¡­¡­
No memebers in group zoo

ÎÒÃÇ¿ÉÒÔʹÓÃJoinGroupÀ´Ïò×éÖÐÌí¼Ó³ÉÔ±¡£ÔÚsleepÓï¾äµÄ×÷ÓÃÏ£¬ÕâЩ×÷Ϊ×é³ÉÔ±µÄznode²»»á×Ô¼ºÖÕÖ¹£¬ËùÒÔÎÒÃÇ¿ÉÒÔ£¬ÒÔºǫ́½ø³ÌµÄ·½Ê½À´Æô¶¯ËûÃÇ£º

[root@hadoop code]# java org.zk.JoinGroup localhost zoo duck &
2014-10-30 02:06:05,018 [myid:] - INFO [main:Environment@100] - Client environment:¡­¡­
¡­¡­
Created:/zoo/duck
[root@hadoop code]# java org.zk.JoinGroup localhost zoo cow &
2014-10-30 02:06:05,018 [myid:] - INFO [main:Environment@100] - Client environment:¡­¡­
¡­¡­
Created:/zoo/cow
[root@hadoop code]# java org.zk.JoinGroup localhost zoo goat &
2014-10-30 02:06:05,018 [myid:] - INFO [main:Environment@100] - Client environment:¡­¡­
¡­¡­
Created:/zoo/goat

×îºóÒ»ÐÐÃüÁî±£´æÁ˽«goatÌí¼Óµ½×éÖеÄjava½ø³ÌµÄID¡£ÎÒÃÇÐèÒª±£´æÕâ¸ö½ø³ÌµÄID£¬ÒÔ±ãÄܹ»Ôڲ鿴×é³ÉÔ±Ö®ºóɱËÀ½ø³Ì¡£

[root@hadoop code]# 
2014-10-30 03:15:30,619 [myid:] - INFO [main:Environment@100] - Client environment:¡­¡­
¡­¡­
duck
cow
goat

ΪÁË´Ó×éÖÐɾ³ýÒ»¸ö³ÉÔ±£¬ÎÒÃÇɱËÀÁËgoatËù¶ÔÓ¦µÄ½ø³Ì£º

[root@hadoop code]# kill $goat_pid
¼¸ÃëÖÓÖ®ºó£¬ÓÉÓÚ½ø³ÌµÄZooKeeper»á»°ÒѾ­½áÊø£¨³¬Ê±Îª5Ã룩£¬ ËùÒÔgoat»á´Ó×é³ÉÔ±ÁбíÏûʧ£¬²¢ÇÒ¶ÔÓ¦µÄ¶ÌÔÝznodeÒ²ÒѾ­±»É¾³ý¡£
[root@hadoop code]# java org.zk.ListGroup localhost zoo
2014-10-30 03:23:41,120 [myid:] - INFO [main:Environment@100] - Client environment:¡­¡­
¡­¡­
duck
cow

¶ÔÓÚ²ÎÓëµ½Ò»¸ö·Ö²¼Ê½ÏµÍ³ÖеĽڵ㣬ÕâÑù¾ÍÓÐÁËÒ»¸ö½¨Á¢½ÚµãÁбíµÄ·½·¨¡£ÕâЩ½ÚµãÒ²Ðí±Ë´Ë²¢²»Á˽⡣ÀýÈ磬һ¸öÏëʹÓÃÁбíÖнڵãÀ´Íê³ÉijЩ¹¤×÷µÄ¿Í»§¶Ë£¬Äܹ»ÔÚÕâЩ½Úµã²»ÖªµÀ¿Í»§¶ËµÄÇé¿öÏ·¢ÏÖËüÃÇ¡£

×îºó£¬×¢Ò⣬×é³ÉÔ±¹ØÏµ¹ÜÀí²¢²»Äܽâ¾öÓë½ÚµãͨÐŹý³ÌÖгöÏÖµÄÍøÂçÎÊÌâ¡£¼´Ê¹Ò»¸ö½ÚµãÊÇÒ»¸ö×éÖеijÉÔ±£¬ÔÚÓëÆäͨÐŵĹý³ÌÖÐÈÔÈ»»á³öÏÖ¹ÊÕÏ£¬ÕâÖÖ¹ÊÕϱØÐëÒÔÒ»ÖÖºÏÊʵķ½Ê½½â¾ö£¨ÖØÊÔ¡¢Ê¹ÓÃ×éÖÐÁíÍâÒ»¸ö³ÉÔ±µÈ£©¡£

3.4 ZooKeeperÃüÁîÐй¤¾ß

ZooKeeperÌṩÁËÒ»¸öÃüÁîÐй¤¾ßÓÃÓÚÔÚÆäÃüÃû¿Õ¼äÄÚ½øÐн»»¥¡£ÎÒÃÇ¿ÉÒÔʹÓÃÕâ¸öÃüÁ¾ßÁгö/zoo½Úµã֮ϵÄznodeÁÐ±í£¬ÈçÏÂËùʾ

[root@hadoop code]# zkCli.sh -server localhost ls /zoo
Connecting to localhost
¡­¡­
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[duck, cow]
[root@hadoop code]#

3.5 ɾ³ý×é

ÏÂÃæÀ´¿´ÈçºÎɾ³ýÒ»¸ö×é¡£ZooKeeperÀàÌṩÁËÒ»¸ödelete()·½·¨£¬¸Ã·½·¨ÓÐÁ½¸ö²ÎÊý£º

1.·¾¶

2.°æ±¾ºÅ

Èç¹ûËùÌṩµÄ°æ±¾ºÅÓëznodeµÄ°æ±¾ºÅÒ»Ö£¬ZooKeeper»áɾ³ýÕâ¸öznode¡£ÕâÊÇÒ»ÖÖÀֹ۵ļÓËø»úÖÆ£¬Ê¹¿Í»§¶ËÄܹ»¼ì²â³ö¶ÔznodeµÄÐ޸ijåÍ»¡£Í¨¹ý½«°æ±¾ºÅÉèÖÃΪ-1£¬¿ÉÒÔÈÆ¹ýÕâ¸ö°æ±¾¼ì²â»úÖÆ£¬²»¹ÜznodeµÄ°æ±¾ºÅÊÇʲô¶øÖ±½Ó½«Æäɾ³ý¡£ZooKeeper²»Ö§³ÖµÝ¹éµÄɾ³ý²Ù×÷£¬Òò´ËÔÚɾ³ý¸¸½Úµã֮ǰ±ØÐëÏÈɾ³ý×ӽڵ㡣

ÔÚ´úÂë3.5ÖУ¬DeleteGroupÀàÓÃÓÚɾ³ýÒ»¸ö×é¼°ÆäËùÓгÉÔ±¡£

´úÂë3.5ÓÃÓÚɾ³ýÒ»¸ö×é¼°ÆäËùÓгÉÔ±µÄ³ÌÐò

package org.zk;

import java.io.IOException;
import java.util.List;

import org.apache.zookeeper.KeeperException;

public class DeleteGroup extends ConnectionWatcher{
    public void delete(String groupName) throws InterruptedException, KeeperException{
        String path="/"+groupName;
        List children;
        try {
            children = zk.getChildren(path, false);
            for(String child:children){
                zk.delete(path+"/"+child, -1);            
            }
            zk.delete(path, -1);
        } catch (KeeperException.NoNodeException e) {
            System.out.printf("Group %s does not exist\n", groupName);
            System.exit(1);
        }    
    }
    public static void main(String[] args) throws InterruptedException, IOException, KeeperException {
        DeleteGroup deleteGroup = new DeleteGroup();
        deleteGroup.connect(args[0]);
        deleteGroup.delete(args[1]);
        deleteGroup.close();
    }
}

×îºó£¬ÎÒÃÇ¿ÉÒÔɾ³ý֮ǰËù´´½¨µÄzoo×飺

[root@hadoop code]# java org.zk.DeleteGroup localhost zoo
¡­¡­
[root@hadoop code]# java org.zk.ListGroup localhost zoo
2014-10-30 05:39:41,974 [myid:] - INFO  [main:Environment@100] - Client environment:¡­¡­
Group zoo does not exist
[root@hadoop code]#

 

   
3071 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

ÆóÒµ¼Ü¹¹¡¢TOGAFÓëArchiMate¸ÅÀÀ
¼Ü¹¹Ê¦Ö®Â·-ÈçºÎ×öºÃÒµÎñ½¨Ä££¿
´óÐÍÍøÕ¾µçÉÌÍøÕ¾¼Ü¹¹°¸ÀýºÍ¼¼Êõ¼Ü¹¹µÄʾÀý
ÍêÕûµÄArchimateÊÓµãÖ¸ÄÏ£¨°üÀ¨Ê¾Àý£©
Ïà¹ØÎĵµ

Êý¾ÝÖÐ̨¼¼Êõ¼Ü¹¹·½·¨ÂÛÓëʵ¼ù
ÊÊÓÃArchiMate¡¢EA ºÍ iSpace½øÐÐÆóÒµ¼Ü¹¹½¨Ä£
ZachmanÆóÒµ¼Ü¹¹¿ò¼Ü¼ò½é
ÆóÒµ¼Ü¹¹ÈÃSOAÂ䵨
Ïà¹Ø¿Î³Ì

ÔÆÆ½Ì¨Óë΢·þÎñ¼Ü¹¹Éè¼Æ
ÖÐ̨սÂÔ¡¢ÖÐ̨½¨ÉèÓëÊý×ÖÉÌÒµ
ÒÚ¼¶Óû§¸ß²¢·¢¡¢¸ß¿ÉÓÃϵͳ¼Ü¹¹
¸ß¿ÉÓ÷ֲ¼Ê½¼Ü¹¹Éè¼ÆÓëʵ¼ù
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

ר¼ÒÊӽǿ´ITÓë¼Ü¹¹
Èí¼þ¼Ü¹¹Éè¼Æ
ÃæÏò·þÎñÌåϵ¼Ü¹¹ºÍÒµÎñ×é¼þ
ÈËÈËÍøÒÆ¶¯¿ª·¢¼Ü¹¹
¼Ü¹¹¸¯»¯Ö®ÃÕ
̸ƽ̨¼´·þÎñPaaS


ÃæÏòÓ¦Óõļܹ¹Éè¼ÆÊµ¼ù
µ¥Ôª²âÊÔ+ÖØ¹¹+Éè¼ÆÄ£Ê½
Èí¼þ¼Ü¹¹Ê¦¡ª¸ß¼¶Êµ¼ù
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ¡ª¸ß¼¶Êµ¼ù
SOAÌåϵ½á¹¹Êµ¼ù


Èñ°²¿Æ¼¼ Èí¼þ¼Ü¹¹Éè¼Æ·½·¨
³É¶¼ ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
ÉϺ£Æû³µ ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
±±¾© Èí¼þ¼Ü¹¹Éè¼Æ
ÉϺ£ Èí¼þ¼Ü¹¹Éè¼Æ°¸ÀýÓëʵ¼ù
±±¾© ¼Ü¹¹Éè¼Æ·½·¨°¸ÀýÓëʵ¼ù
ÉîÛÚ ¼Ü¹¹Éè¼Æ·½·¨°¸ÀýÓëʵ¼ù
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ¡ª¸ß¼¶Êµ¼ù