整套大数据学习资料(视频+笔记)百度网盘无门槛下载:http://www.edu360.cn/news/content?id=3377

14.2.4 列出组成员

hadoop 花牛 11℃ 0评论

现在,我们需要一段程序来査看组成员(参见范例14-4)

范例14-4.用于列出组成员的程序

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

在list()方法中,我们调用了getChildren()方法来检索并打印输出一个znode的子节点列表,调用参数为该znode的路径和设为false的观察标志。如果在一个znode上设置了观察标志,那么一旦该znode的状态改变,关联的观察(Watcher)会被触发。虽然在这里我们没有使用观察,但在査看一个znode的子节点时,通过设置观察可以让应用程序接收到组成员加入、退出和组被删除的有关通知。

在这段程序中,我们捕捉了KeeperException.NoNodeException异常,代表组的znode不存在时,这个异常就会被抛出。

让我们看看ListGroup程序是如何工作的。起初,由于我们还没有在组中添加任何成员,因此zoo组是空的:

% java ListGroup localhost zoo
No members in group zoo

我们可以使用JoinGroup来向组中添加成员。由干这些作为组成员的 znode不会自己终止(因为sleep语句),所以我们以后台进程的方式来启动 它们:

% java DoinGroup localhost zoo duck &
% java DoinGroup localhost zoo cow &
% java DoinGroup localhost zoo goat &
% goat_pid=$!

最后一行命令保存了将goat添加到组中的Java进程的ID。我们需要保存这个进程ID,以便能够在查看组成员之后杀死该进程:

% java ListGroup localhost zoo
goat
duck
cow

为了从组中删哮一个成员,我们杀死了 goat所对应的进程:

% kill $goat_pid

几秒钟之后,由于该进程的ZooKeeper会话已经结束(超时设置为5),并

且所对应的短暂znode也已经被删除,所以goat会从组成员列表中消失。

% java ListGroup localhost zoo
duck
cow

让我们回顾一下,看看已经实现了哪些功能。对于参与到一个分布式系统中的节点,我们已经有了一个建立节点列表的方法。这些节点相互之间并不了解。例如,一个想使用列表中节点来完成某些工作的客户端,能够在这些节点不知情的情况下发现它们。

最后要注意的是组成员关系管理并不能解决与节点通信过程中出现的网络 问题。在与一个组中的成员节点进行通信的过程中可能会出现故障,这些故障必须以一种合适的方式来解决(重试、使用组中另外一个成员等)

ZooKeeper命令行工具

ZooKeeper提供了一个用于与其命名空间进行交互的命令行工具。我们可以使用这个工具列出/zoo znode之下的znode列表,如下所示:

% zkCli.sh localhost Is /zoo
Processing Is
WatchedEvent: Server state change. New state: SyncConnected [duck, cow] -0

不使用任何参数直接运行这个命令行工具,可以显示该工具的使用帮助。 

转载请注明:全栈大数据 » 14.2.4 列出组成员

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址