您的位置:首页 > 运维架构

hadoop 自学指南十一之Zookeeper

2015-10-08 11:45 363 查看
一、前言

Zookeeper是一个为分布式应用所设计的开源协议服务。它可以为用户提供同步、配置、管理、分组和命名等服务。用户可以使用Zookeeper提供的实现一致性、组管理、Leader选举及某些协议。

二、zooKeeper特点

简单的、丰富的组件(分布式队列、分布式锁和同级选举)、高可用、松耦合、资源库



Zookeeper可以看成一个具有高可用的文件系统,但这个文件系统没有文件和目录,而是统一使用节点,称为Znode。所有的Znode 构成层次化的命名空间。一种自然的建立组

成员列表的方式就是利用这种层次结构,创建一个以组名为节点的znode作为父亲节点。

三、ZooKeeper API 的使用

package hadoop.v15;

import java.io.IOException;

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

public class Demo {
//会话超时时间,设置为与系统默认时间一致
private static final int SESSION_TIMEOUT=30000;

//创建ZooKeeper实例
ZooKeeper zk;

//创建Watcher实例
Watcher wh=new Watcher(){
public void process(org.apache.zookeeper.WatchedEvent event)
{
System.out.println(event.toString());
}
};

//初始化ZooKeeper实例
private void createZKInstance() throws IOException
{
zk=new ZooKeeper("192.168.100.150:2181",Demo.SESSION_TIMEOUT,this.wh);

}

private void ZKOperations() throws IOException,InterruptedException,KeeperException
{
System.out.println("\n1.创建ZooKeeper节点(znode:zoo2,数据:myData2,权限:OPEN_ACL_UNSAFE,节点类型:Persistent");
zk.create("/zoo2","myData2".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);

System.out.println("\n2.查看是否创建成功:");
System.out.println(new String(zk.getData("/zoo2",false,null)));

System.out.println("\n3.修改节点数据");
zk.setData("/zoo2", "shenlan211314".getBytes(), -1);

System.out.println("\n4.查看是否修改成功:");
System.out.println(new String(zk.getData("/zoo2", false, null)));

System.out.println("\n5.删除节点");
zk.delete("/zoo2", -1);

System.out.println("\n6.查看节点是否被删除:");
System.out.println("节点状态:["+zk.exists("/zoo2", false)+"]");
}

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

public static void main(String[] args) throws IOException,InterruptedException,KeeperException {
Demo dm=new Demo();
dm.createZKInstance( );
dm.ZKOperations();
dm.ZKClose();
}
}

四、ZooKeeper的数据模型

1、Znode 

zookeeper目录树中的每一个节点对应着一个Znode,每个Zonde 维护着一个属性结构,包含版本号、时间戳等状态信息.

Watches

分为两类:数据Watch(data watch) , 孩子watch(child watch)

数据访问(ACL)

acl不能被子节点继承父节点所拥有的权限与子节点的权限没有任何关系。

Zookeeper ACL 的使用依赖于验证,支持如下几种验证模式

world
代表某一特定的用户

auth
代表任何已经通过验证的用户

digest
通过用户名和密码的用户

ip 通过客户端ip地址验证

API支持的三种标准用户权限

ZOO_OPEN_ACL_UNSAFE

ZOO_READ_ACL_UNSAFE

ZOO_CREATE_ALL_ACL

临时节点

顺序节点(唯一性保证)

2、Zookeeper时间

Zxid

版本号

3、节点属性结构
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: