7-hadoop之zookeeper

zookeeper:动物园管理员,分布式系统的协同服务,支持c/java。
 协同服务:
   配置维护
名字服务
分布式同步
组服务等。


zookeeper
  基于内存的, 数据结构都是一样的,是树形结构,类型Linux的文件系统。
 zookeepernode1:
  /node1..
zookeepernode2:
  /node2..
znode:zookeeper节点。


zkServer角色分类:
 leader:领导(1个)
follow:跟班(n个)
    所有leader和follow之间会通信。
zk有选举机制,如果leader挂掉,就会在follow中重新选举一个leader.
  zkClient:
 
  zk的下载与安装:
zk的读写操作具有原子性,和数据库的事务相似。
安装:
1.安装jdk6+.
2.可以在我的百度云中下载或者/官网http://apache.fayea.com/zookeeper/zookeeper-3.4.6/ 下载zookeeper 3.4.6
     解压并移动至/usr/wpysoft/目录下。
3.配置环境变量
  在/etc/environment文件中配置
 ZOOKEEPER_HOME=${zk安装目录}
      path=增加${zk安装目录}/bin
     source生效。
4.模式配置,和hadoop模式一样有三种模式
  独立模式:进程数少
   在conf目录下,复制zoo_sample.cfg文件zoo.cfg,编辑
 tickTime=2000//心跳周期,单位毫秒,和leader通信
dataDir=存放zk数据的目录
clientPort=server提供给客户端连接的端口号
伪分布模式:
完全分布式:
   [${zk_home}/conf/zoo.cfg] 
tickTime=2000
initLimit=5
syncLimit=2
//server.n=host:port1:port2,数字n必须是myid中的值
//port1:leader端口,作为leader时,供follower连接的端口
//port2:选举端口,选举leader时供其他follower连接的端口
server.1=s1:2888:3888
server.2=s2:2888:3888
server.3=s3:2888:3888
注:zk处理集群故障的算法是2n + 1,最好在奇数机器数部署
集群失效的条件:
半数节点挂掉。
多于半数服务节点在线,就ok.
集群模式-标识自己
[${zk_datadir}/myid]
//内容只有一行,数字,介于1~255
140
            新建一个文件,在目录zk_datadir下,创建文件myid,内容为一个数字。
    在每个节点配置myid和节点端口  
server.1=s1:2888:3888
server.2=s2:2888:3888
server.3=s3:2888:3888
 5.启动zk
   在zk_home/bin目录下启动zk.
  zkServer.sh start
   如果有节点未启动,会报错
zkServer.sh status 查看本节点是领导还是跟班。在data_dir中能看日志文件zookeer.out文件




nc(netcat,网络会话)指令用法:
  安装netcat指令包,nc --help检查如果没有安装nc指令包。
地址:http://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1-1.i386.rpm/download
安装即可。




rpm -ivh xinetd-2.3.14-20.el5_10.x86_64.rpm
rpm -ivh telnet-server-0.17-41.el5.x86_64.rpm
netcat-0.7.1-1.i386.rpm


1.网络会话通信与文件传输,和serverSocket/socket差不多:
  server端:nc + 监听+开放监听的端口号
 eg:nc -l 1234
  client端:nc+  服务器端ip+服务器端开放的监听端口号
    eg:nc s0 1234
Ctrl+D结束输入。


  传输文件
    服务端:
nc -l 1234 > aa.txt (把接收到的信息重新向输出到文本中)
客户端
nc s0 1234 < 测试文件.txt (把待传输的文件重定向输入)
最后就可以在aa.txt中查看到 测试文件.txt中内容。
2.端口扫描:
   可以扫描远程主机开放的端口




通过客户端脚本zkCli.sh连接到服务器,常用的指令使用
[...]ls / //列出zk中包含的内容
[...]create /node1 helloworld //创建/node1节点并指定
关联字符串
[...]get /node1 //查询节点数据
[...]set /node1 howareyou //向节点写入数据
[...]delete /node1 //删除节点
[...]ls / //列出根节点


  
zookeeper API:
1.创建Java工程
2.引入jar包
3.调用api
4.临时性节点不能有孩子




acl: access control list:访问控制列表
Perms类:里面有对列表进行创建,删除,修改节点的权限。、
在创建列表时需要传入ACL参数,不必去new,可以调用Ids类提供的静态属性OPEN_ACL_UNSAFE
  zk = new ZooKeeper(config, sessionTimeout, this);
   Stat stat = zk.exists(root, false);
   if(stat == null){
    // 创建根节点
    zk.create(root, new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT); 
   }
删除节点:
 zk.delete(“节点路径”,节点的版本号);
 如果给出的版本号和节点的版本号不一致,那么会抛出异常,如果不检查版本号,给版本号为-1.


 ZooKeeper四字命令:
 参考:http://blog.csdn.net/shatelang/article/details/7596007




 Watch 观察者
   zk事件激活是一次性触发激活的。
   调用观察者可以通过zk.getXXX(调用观察者)再setXXX(触发事件)来进行。

























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值