尚硅谷大数据技术之Zookeeper.docx

安装及启动

  1. 1.安装前准备
  2. 1)安装Jdk
  3. 2)拷贝Zookeeper安装包到Linux系统下
  4. 3)解压到指定目录
  5. [atguigu@hadoop102 software]$ tar -zxvf zookeeper-3.4.10.tar.gz -C /opt/module/
  6. 2.配置修改
  7. 1)将/opt/module/zookeeper-3.4.10/conf这个路径下的zoo_sample.cfg修改为zoo.cfg
  8. [atguigu@hadoop102 conf]$ mv zoo_sample.cfg zoo.cfg
  9. 2)打开zoo.cfg文件,修改dataDir路径:
  10. [atguigu@hadoop102 zookeeper-3.4.10]$ vim zoo.cfg
  11. 修改如下内容:
  12. dataDir=/opt/module/zookeeper-3.4.10/zkData
  13. 3)在/opt/module/zookeeper-3.4.10/这个目录上创建zkData文件夹
  14. [atguigu@hadoop102 zookeeper-3.4.10]$ mkdir zkData
  15. 3.操作Zookeeper
  16. 1)启动Zookeeper
  17. [atguigu@hadoop102 zookeeper-3.4.10]$ bin/zkServer.sh start
  18. 2)查看进程是否启动
  19. [atguigu@hadoop102 zookeeper-3.4.10]$ jps
  20. 4020 Jps
  21. 4001 QuorumPeerMain
  22. 3)查看状态:
  23. [atguigu@hadoop102 zookeeper-3.4.10]$ bin/zkServer.sh status
  24. ZooKeeper JMX enabled by default
  25. Using config: /opt/module/zookeeper-3.4.10/bin/../conf/zoo.cfg
  26. Mode: standalone
  27. 4)启动客户端:
  28. [atguigu@hadoop102 zookeeper-3.4.10]$ bin/zkCli.sh
  29. 5)退出客户端:
  30. [zk: localhost:2181(CONNECTED) 0] quit
  31. 6)停止Zookeeper
  32. [atguigu@hadoop102 zookeeper-3.4.10]$ bin/zkServer.sh stop

配置参数解读

Zookeeper中的配置文件zoo.cfg中参数含义解读如下:
1.tickTime =2000:通信心跳数,Zookeeper服务器与客户端心跳时间,单位毫秒
Zookeeper使用的基本时间,服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳,时间单位为毫秒。它用于心跳机制,并且设置最小的session超时时间为两倍心跳时间。(session的最小超时时间是2tickTime)
2.initLimit =10:LF初始通信时限
集群中的Follower跟随者服务器与Leader领导者服务器之间初始连接时能容忍的最多心跳数(tickTime的数量),用它来限定集群中的Zookeeper服务器连接到Leader的时限。
3.syncLimit =5:LF同步通信时限
集群中Leader与Follower之间的最大响应时间单位,假如响应超过syncLimit
tickTime,Leader认为Follwer死掉,从服务器列表中删除Follwer。
4.dataDir:数据文件目录+数据持久化路径
主要用于保存Zookeeper中的数据。
5.clientPort =2181:客户端连接端口
监听客户端连接的端口。

集群配置

  1. 在/opt/module/zoopeeper-3.5.7/这个目录下创建zkData

mkdir zkData

  1. 在/opt/module/zoopeeper-3.5.7/zkData目录下创建一个myid的文件,在文件中添加与server对应的编号(上下不要有空行,左右不要有空格)

vim myid 内容为2

  1. 拷贝配置好的zookeeper到其他机器上xsync zookeeper-3.5.7,并分别在hadoop103、hadoop104上修改myid文件中内容为3、4
  2. 增加如下配置 ```shell server.2=hadoop102:2888:3888 server.3=hadoop103:2888:3888 server.4=hadoop104:2888:3888

配置参数解读 server.A=B:C:D A是一个数字,表示这个是低几台服务器,集群模式下配置一个文件myid,这个文件在dataDir目录下, 这个文件里面有一个数据就是A的值,zookeeper启动时读取此文件,拿到里面的数据和zoo.cfg里面的 配置信息


5. 启动每一个节点`bin.zkServer.sh start`
5. 查看节点状态,myid大的节点为主节点,其他的为从节点`bin.zkServer.sh status`
5. 启动客户端`bin/zkCli.sh -server hadoop102:2181`
<a name="zd2NF"></a>
## 编写启动和停止脚本
`vim /home/lhd/bin/zk.sh`
```shell
#!/bin/bash

case $1 in
"start"){
    for i in hadoop102 hadoop103 hadoop104
        do
            echo ----------------zookeeper $i 启动-----------------
            ssh $i "/opt/module/zookeeper-3.6.3/bin/zkServer.sh start"
        done
}
;;
"stop"){
    for i in hadoop102 hadoop103 hadoop104
        do
           echo -----------------zookeeper $i 停止----------------
            ssh $i "/opt/module/zookeeper-3.6.3/bin/zkServer.sh stop"
        done
}
;;
"status"){
   for i in hadoop102 hadoop103 hadoop104
         do
            echo ---------------zookeeper $i 状态----------------
            ssh $i "/opt/module/zookeeper-3.6.3/bin/zkServer.sh status"
        done
}
;;
esac

客户端的基本操作

命令基本语法 功能描述
help 显示所有操作命令
ls path [watch] 使用 ls 命令来查看当前znode中所包含的内容
ls2 path [watch] 查看当前节点数据并能看到更新次数等数据
create 普通创建
-s 含有序列
-e 临时(重启或者超时消失)
get path [watch] 获得节点的值
set 设置节点的具体值
stat 查看节点状态
delete 删除节点
rmr 递归删除节点
[zk: localhost:2181(CONNECTED) 1] ls2 /
[zookeeper]
cZxid = 0x0  创建节点的事务ID
ctime = Thu Jan 01 08:00:00 CST 1970  znode被创建的毫秒数
mZxid = 0x0  znode最后更新的事务zxid
mtime = Thu Jan 01 08:00:00 CST 1970  znode最后修改的毫秒数
pZxid = 0x0  znode最后更新的子节点zxid
cversion = -1  znode子节点变化号,znode子节点修改次数
dataVersion = 0 znode数据变化号
aclVersion = 0  znode访问控制列表的变化号
ephemeralOwner = 0x0 如果是临时节点,这个是znode拥有者的session id,如果不是临时节点则是0
dataLength = 0  znode的数据长度
numChildren = 1  znode子节点数量

监听器

监听器原理

  1. 首先要有一个main()线程
  2. 在main线程中创建zookeeper客户端,这时就会创建两个线程,一个负责网络连接通信,一个负责监听
  3. 通过connect线程将注册的监听事件发送给zookeeper
  4. 在Zookeeper的注册监听器列表中将注册的监听事件添加到列表中
  5. Zooleeper监听到有数据或路径变化,就会将这个消息发送给listener线程
  6. listener线程内部调用了process()方法
    (1)在 hadoop104 主机上注册监听/sanguo 节点数据变化
    [zk: localhost:2181(CONNECTED) 26] get -w /sanguo 
    (2)在 hadoop103 主机上修改/sanguo 节点的数据
    [zk: localhost:2181(CONNECTED) 1] set /sanguo "xisi"
    (3)观察 hadoop104 主机收到数据变化的监听
    WATCHER::
    WatchedEvent state:SyncConnected type:NodeDataChanged 
    path:/sanguo
    注意:在hadoop103再多次修改/sanguo的值,hadoop104上不会再收到监听。因为注册
    一次,只能监听一次。想再次监听,需要再次注册。
    2)节点的子节点变化监听(路径变化)
    (1)在 hadoop104 主机上注册监听/sanguo 节点的子节点变化
    [zk: localhost:2181(CONNECTED) 1] ls -w /sanguo
    [shuguo, weiguo] (2)在 hadoop103 主机/sanguo 节点上创建子节点
    [zk: localhost:2181(CONNECTED) 2] create /sanguo/jin "simayi"
    Created /sanguo/jin
    (3)观察 hadoop104 主机收到子节点变化的监听
    WATCHER::
    WatchedEvent state:SyncConnected type:NodeChildrenChanged 
    path:/sanguo
    注意:节点的路径变化,也是注册一次,生效一次。想多次生效,就需要多次注册。
    

    API应用