前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Zookeeper03之客户端命令操作

Zookeeper03之客户端命令操作

作者头像
用户4919348
发布2019-04-02 11:11:58
9210
发布2019-04-02 11:11:58
举报
文章被收录于专栏:波波烤鸭波波烤鸭

  前面两篇文章给大家介绍了zookeeper的集群搭建,本篇文章来介绍下zookeeper的客户端命令操作


bin目录下常用的脚本解释

脚本

说明

zkCleanup

清理Zookeeper历史数据,包括食物日志文件和快照数据文件

zkCli

Zookeeper的一个简易客户端

zkEnv

设置Zookeeper的环境变量

zkServer

Zookeeper服务器的启动、停止、和重启脚本

客户端命令行操作

1.配置zookeeper的环境变量

  为了执行命令方便而不用每次都进入到zookeeper的安装目录去启动命令,我们可以将zookeeper配置到系统环境变量中。方便每次的操作

代码语言:javascript
复制
vim /etc/profile
代码语言:javascript
复制
# zookeeper 配置
export ZOOKEEPER_HOME=/root/app/zookeeper-3.4.10
export PATH=$PATH:$ZOOKEEPER_HOME/bin
在这里插入图片描述
在这里插入图片描述

重新加载配置文件

代码语言:javascript
复制
source /etc/profile

2.连接zookeeper

连接当前节点上的zookeeper服务器

代码语言:javascript
复制
zkCli.sh 
在这里插入图片描述
在这里插入图片描述

想要连接其他节点上的服务器

代码语言:javascript
复制
zkCli.sh -timeout 5000 -server hadoop-node03[:2181]

参数

说明

-timeout

连接超时时长

-server

需要连接的服务器地址默认端口是2181,可以省略

在这里插入图片描述
在这里插入图片描述

3.数据操作

3.1zookeeper的数据存储结构

  1. 层次化的目录结构,命名符合常规文件系统规范
  2. 每个节点在zookeeper中叫做znode,并且有一个唯一的路径标识
  3. 节点znode可以包含数据和子节点(但是EPHEMERAL类型的节点不能有子节点)
  4. 客户端应用可以在节点上设置监听器
在这里插入图片描述
在这里插入图片描述

3.2节点的类型

1).znode有两种类型:

短暂性(ephemeral)(断开连接自己删除) 持久性(persistent)(断开连接不删除)

2).znode有四种形式的目录节点(默认是persistent)如下

序号

节点类型

描述

1

PERSISTENT

持久节点

2

PERSISTENT_SEQUENTIAL

持久有序节点

3

EPHEMERAL

短暂节点

4

EPHEMERAL_SEQUENTIAL

短暂有序节点

创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,有父节点维护 在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序

3.3命令说明

zookeeper中的常用命令不是很多,我们可以通过help命令来查看

代码语言:javascript
复制
[zk: hadoop-node03(CONNECTED) 0] help
ZooKeeper -server host:port cmd args
	stat path [watch]
	set path data [version]
	ls path [watch]
	delquota [-n|-b] path
	ls2 path [watch]
	setAcl path acl
	setquota -n|-b val path
	history 
	redo cmdno
	printwatches on|off
	delete path [version]
	sync path
	listquota path
	rmr path
	get path [watch]
	create [-s] [-e] path data acl
	addauth scheme auth
	quit 
	getAcl path
	close 
	connect host:port

命令说明

序号

命令

说明

1

connect

在连接服务器的情况连接到其他节点上去

2

close

关闭和服务器的连接

3

ls

用于获取某个节点下的节点信息

4

ls2

ls2命令是ls命令的增强版,比ls命令多输出本节点信息

5

create

用于创建节点,其中-s为顺序节点,-e临时节点

6

delete

只能删除没有子节点的节点

7

rmr

可以删除有子节点的节点

8

get

用户获取节点信息

9

stat

查看节点的状态

10

set

设置节点的数据

11

listquota

listquota命令用于显示配额

12

setquota

setquota命令用于设置节点个数以及数据长度的配额

13

delquota

用于删除配额,-n为子节点个数,-b为节点数据长度,如:delquota –n 2

14

history

用于列出最近的命令历史,可以和redo配合使用

15

redo

命令用于再次执行某个命令

16

addauth

用于节点认证,使用方式:如addauth digest username:password

17

setAcl

setAcl命令用于设置节点AclAcl由三部分构成:1为scheme,2为user,3为permission,一般情况下表示为scheme: id :permissions

18

getAcl

获取节点的Acl,如getAcl /node1

19

sync

用于强制同步,由于请求在半数以上的zk server上生效就表示此请求生效,那么就会有一些zk server上的数据是旧的。sync命令就是强制同步所有的更新操作

20

printwatchers

用于设置和显示监视状态,值为on或则off

21

quit

退出客户端

3.4常用操作

ls命令

  ls命令是用来查看某个节点下的子节点信息,zookeeper的根节点是’/’,在初始的时候’/'下是没有任何子节点的

代码语言:javascript
复制
[zk: hadoop-node01(CONNECTED) 5] ls
[zk: hadoop-node01(CONNECTED) 6] 

创建几个节点再查看:

代码语言:javascript
复制
[zk: hadoop-node01(CONNECTED) 8] create /node1 node1
Created /node1
[zk: hadoop-node01(CONNECTED) 9] create /node2 node2
Created /node2
[zk: hadoop-node01(CONNECTED) 10] ls /
[node2, zookeeper, node1]
ls2

  ls2命令是ls命令的增强版,比ls命令多输出本节点信息

代码语言:javascript
复制
[zk: hadoop-node01(CONNECTED) 11] ls2 /
[node2, zookeeper, node1]
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x30000000c
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 3

节点的信息描述在下面的get命令中描述

get命令

  get命令查看节点的信息

代码语言:javascript
复制
[zk: hadoop-node01(CONNECTED) 12] get /

cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x30000000c
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 3

节点信息说明

序号

属性

说明

1

cZxid

Znode创建的事务id

2

ctime

节点创建时间

3

mZxid

Znode被修改的事务id,即每次对znode的修改都会更新mZxid

4

mtime

节点最近一次更新的时间

5

pZxid

是与该节点的子节点(或该节点)的最近一次 创建 / 删除 的时间戳对应

6

cversion

子节点数据更新次数

7

dataVersion

本节点数据更新次数

8

aclVersion

节点ACL(授权信息)的更新次数

9

ephemeralOwner

如果该节点为临时节点,ephemeralOwner值表示与该节点绑定的session id. 如果该节点不是临时节点,ephemeralOwner值为0

10

dataLength

节点数据长度

11

numChildren

子节点个数

zxid特别说明   对于zk来说,每次的变化都会产生一个唯一的事务id,zxid(ZooKeeper Transaction Id)。通过zxid,可以确定更新操作的先后顺序。例如,如果zxid1小于zxid2,说明zxid1操作先于zxid2发生。需要指出的是,zxid对于整个zk都是唯一的,即使操作的是不同的znode。

create命令

  create命令用户创建ZNode节点。

代码语言:javascript
复制
create [-s] [-e] path data acl

参数

说明

-s

有序

-e

短暂

path

节点路径及名称

data

节点保存的数据

acl

节点的权限

创建永久节点
代码语言:javascript
复制
[zk: hadoop-node01(CONNECTED) 17] create /node1/node01  node01
Created /node1/node01
[zk: hadoop-node01(CONNECTED) 19] get /node1/node01
node01
cZxid = 0x30000000d
ctime = Tue Feb 26 06:00:43 CST 2019
mZxid = 0x30000000d
mtime = Tue Feb 26 06:00:43 CST 2019
pZxid = 0x30000000d
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0
[zk: hadoop-node01(CONNECTED) 20] ls /node1       
[node01]
创建永久有序节点
代码语言:javascript
复制
[zk: hadoop-node01(CONNECTED) 21] create /node1/node02 node02
Created /node1/node02
[zk: hadoop-node01(CONNECTED) 22] delete /node1/node02          
[zk: hadoop-node01(CONNECTED) 23] create -s /node1/node02 node02
Created /node1/node020000000002
[zk: hadoop-node01(CONNECTED) 24] get /node1/node020000000002
node02
cZxid = 0x300000010
ctime = Tue Feb 26 06:02:44 CST 2019
mZxid = 0x300000010
mtime = Tue Feb 26 06:02:44 CST 2019
pZxid = 0x300000010
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0

永久节点即使我们断开连接后再次连接后也不会消失

代码语言:javascript
复制
[zk: hadoop-node01(CONNECTED) 25] close
2019-02-25 23:07:21,968 [myid:] - INFO  [main:ZooKeeper@684] - Session: 0x16920a6e1e90000 closed
[zk: hadoop-node01(CLOSED) 26] 2019-02-25 23:07:21,968 [myid:] - INFO  [main-EventThread:ClientCnxn$EventThread@519] - EventThread shut down for session: 0x16920a6e1e90000

[zk: hadoop-node01(CLOSED) 26] connect 
2019-02-25 23:07:33,387 [myid:] - INFO  [main:ZooKeeper@438] - Initiating client connection, connectString=hadoop-node01 sessionTimeout=5000 watcher=org.apache.zookeeper.ZooKeeper
Main$MyWatcher@383534aa[zk: hadoop-node01(CONNECTING) 27] 2019-02-25 23:07:33,401 [myid:] - INFO  [main-SendThread(hadoop-node01:2181):ClientCnxn$SendThread@1032] - Opening socket connection to server h
adoop-node01/192.168.88.121:2181. Will not attempt to authenticate using SASL (unknown error)2019-02-25 23:07:33,406 [myid:] - INFO  [main-SendThread(hadoop-node01:2181):ClientCnxn$SendThread@876] - Socket connection established to hadoop-node01/192.168.88.121:2181, initi
ating session2019-02-25 23:07:33,423 [myid:] - INFO  [main-SendThread(hadoop-node01:2181):ClientCnxn$SendThread@1299] - Session establishment complete on server hadoop-node01/192.168.88.121:21
81, sessionid = 0x16920a6e1e90001, negotiated timeout = 5000
WATCHER::

WatchedEvent state:SyncConnected type:None path:null

[zk: hadoop-node01(CONNECTED) 27] ls /node1
[node020000000002, node01]
创建短暂节点
代码语言:javascript
复制
[zk: hadoop-node01(CONNECTED) 28] create -e /node1/node03 node03
Created /node1/node03
[zk: hadoop-node01(CONNECTED) 29] ls /node1
[node020000000002, node01, node03]
创建短暂有序节点
代码语言:javascript
复制
[zk: hadoop-node01(CONNECTED) 30] create -s -e /node1/node03 node04
Created /node1/node030000000004
[zk: hadoop-node01(CONNECTED) 31] ls /node1                        
[node020000000002, node01, node03, node030000000004]
[zk: hadoop-node01(CONNECTED) 32] 

注意

  1. 短暂节点不能创建子节点
  2. 创建短暂节点的客户端断开连接后数据会被自动删除
代码语言:javascript
复制
[zk: hadoop-node01(CONNECTED) 31] ls /node1                        
[node020000000002, node01, node03, node030000000004]
[zk: hadoop-node01(CONNECTED) 32] create -e /node1/node03/aaa aaa
Ephemerals cannot have children: /node1/node03/aaa
[zk: hadoop-node01(CONNECTED) 33] close
2019-02-25 23:10:35,224 [myid:] - INFO  [main:ZooKeeper@684] - Session: 0x16920a6e1e90001 closed
[zk: hadoop-node01(CLOSED) 34] 2019-02-25 23:10:35,224 [myid:] - INFO  [main-EventThread:ClientCnxn$EventThread@519] - EventThread shut down for session: 0x16920a6e1e90001

[zk: hadoop-node01(CLOSED) 34] connect
2019-02-25 23:10:44,441 [myid:] - INFO  [main:ZooKeeper@438] - Initiating client connection, connectString=hadoop-node01 sessionTimeout=5000 watcher=org.apache.zookeeper.ZooKeeper
Main$MyWatcher@6bc168e5[zk: hadoop-node01(CONNECTING) 35] 2019-02-25 23:10:44,446 [myid:] - INFO  [main-SendThread(hadoop-node01:2181):ClientCnxn$SendThread@1032] - Opening socket connection to server h
adoop-node01/192.168.88.121:2181. Will not attempt to authenticate using SASL (unknown error)2019-02-25 23:10:44,448 [myid:] - INFO  [main-SendThread(hadoop-node01:2181):ClientCnxn$SendThread@876] - Socket connection established to hadoop-node01/192.168.88.121:2181, initi
ating session2019-02-25 23:10:44,464 [myid:] - INFO  [main-SendThread(hadoop-node01:2181):ClientCnxn$SendThread@1299] - Session establishment complete on server hadoop-node01/192.168.88.121:21
81, sessionid = 0x16920a6e1e90002, negotiated timeout = 5000
WATCHER::

WatchedEvent state:SyncConnected type:None path:null

[zk: hadoop-node01(CONNECTED) 35] ls /node1
[node020000000002, node01]
set命令

  set命令用来修改节点存储的信息

代码语言:javascript
复制
[zk: hadoop-node01(CONNECTED) 39] set /node1/node01  bbbb
cZxid = 0x30000000d
ctime = Tue Feb 26 06:00:43 CST 2019
mZxid = 0x300000018
mtime = Tue Feb 26 06:10:45 CST 2019
pZxid = 0x30000000d
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0
[zk: hadoop-node01(CONNECTED) 40] get /node1/node01
bbbb
cZxid = 0x30000000d
ctime = Tue Feb 26 06:00:43 CST 2019
mZxid = 0x300000018
mtime = Tue Feb 26 06:10:45 CST 2019
pZxid = 0x30000000d
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0
delete命令

  delete命令用来删除节点,但是不能删除非空的节点

代码语言:javascript
复制
[zk: hadoop-node01(CONNECTED) 41] delete /node1
Node not empty: /node1
[zk: hadoop-node01(CONNECTED) 42] create /node3 node3
Created /node3
[zk: hadoop-node01(CONNECTED) 43] delete /node3
[zk: hadoop-node01(CONNECTED) 44] ls /
[node2, zookeeper, node1]
rmr命令

  rmr命令也是用来删除节点的,而且rmr命令可以删除非空的节点。

代码语言:javascript
复制
[zk: hadoop-node01(CONNECTED) 45] ls /node1
[node020000000002, node01]
[zk: hadoop-node01(CONNECTED) 46] rmr /node1
[zk: hadoop-node01(CONNECTED) 47] ls /
[node2, zookeeper]
stat命令

  stat命令查看节点的状态信息

代码语言:javascript
复制
[zk: hadoop-node01(CONNECTED) 49] stat /node2
cZxid = 0x30000000c
ctime = Tue Feb 26 05:38:33 CST 2019
mZxid = 0x30000000c
mtime = Tue Feb 26 05:38:33 CST 2019
pZxid = 0x30000000c
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0
close命令

  关闭和服务器的连接

代码语言:javascript
复制
[zk: hadoop-node01(CONNECTED) 50] close
2019-02-25 23:24:54,024 [myid:] - INFO  [main:ZooKeeper@684] - Session: 0x16920a6e1e90002 closed
[zk: hadoop-node01(CLOSED) 51] 2019-02-25 23:24:54,025 [myid:] - INFO  [main-EventThread:ClientCnxn$EventThread@519] - EventThread shut down for session: 0x16920a6e1e90002

[zk: hadoop-node01(CLOSED) 51] 
connect命令

  再次连接服务器

代码语言:javascript
复制
[zk: hadoop-node03(CONNECTED) 0] close
2019-02-25 23:25:29,318 [myid:] - INFO  [main:ZooKeeper@684] - Session: 0x3692632cde90001 closed
[zk: hadoop-node03(CLOSED) 1] 2019-02-25 23:25:29,321 [myid:] - INFO  [main-EventThread:ClientCnxn$EventThread@519] - EventThread shut down for session: 0x3692632cde90001

[zk: hadoop-node03(CLOSED) 1] connect hadoop-node02:2181
2019-02-25 23:25:42,251 [myid:] - INFO  [main:ZooKeeper@438] - Initiating client connection, connectString=hadoop-node02:2181 sessionTimeout=5000 watcher=org.apache.zookeeper.ZooK
eeperMain$MyWatcher@5d22bbb7[zk: hadoop-node02:2181(CONNECTING) 2] 2019-02-25 23:25:42,263 [myid:] - INFO  [main-SendThread(hadoop-node02:2181):ClientCnxn$SendThread@1032] - Opening socket connection to serv
er hadoop-node02/192.168.88.122:2181. Will not attempt to authenticate using SASL (unknown error)2019-02-25 23:25:42,275 [myid:] - INFO  [main-SendThread(hadoop-node02:2181):ClientCnxn$SendThread@876] - Socket connection established to hadoop-node02/192.168.88.122:2181, initi
ating session2019-02-25 23:25:42,286 [myid:] - INFO  [main-SendThread(hadoop-node02:2181):ClientCnxn$SendThread@1299] - Session establishment complete on server hadoop-node02/192.168.88.122:21
81, sessionid = 0x26924b577110003, negotiated timeout = 5000
WATCHER::

WatchedEvent state:SyncConnected type:None path:null

[zk: hadoop-node02:2181(CONNECTED) 2] 
quit命令

  退出客户端连接

代码语言:javascript
复制
[zk: hadoop-node03(CONNECTED) 0] quit
Quitting...
2019-02-25 23:26:25,437 [myid:] - INFO  [main-EventThread:ClientCnxn$EventThread@519] - EventThread shut down for session: 0x3692632cde90002
2019-02-25 23:26:25,438 [myid:] - INFO  [main:ZooKeeper@684] - Session: 0x3692632cde90002 closed
[root@hadoop-node02 ~]# 

zookeeper中的事件监听

  在刚开始的时候我们介绍过zookeeper的两个核心功能是存储和监听,通过上面的命令我们已经可以对数据做存储操作了,接下来看下监听操作

1.数据改变的监听

监听的是节点中的内容改变了就会触发,针对的是具体的某个节点的信息,如下: 设置对某个节点内容改变的监听

代码语言:javascript
复制
[zk: localhost:2181(CONNECTED) 0] get /node2 watch
node2
cZxid = 0x30000000c
ctime = Tue Feb 26 05:38:33 CST 2019
mZxid = 0x30000000c
mtime = Tue Feb 26 05:38:33 CST 2019
pZxid = 0x30000000c
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0

在其他节点上修改node2的内容观察效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

但是要注意监听效果只会触发一次!!!

2.子节点改变的监听

给node2节点绑定子节点改变的监听器

代码语言:javascript
复制
[zk: localhost:2181(CONNECTED) 2] ls /node2 watch
[]

然后在node2下创建新的子节点观察效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

同样此监听器也只会触发一次!!!

好了常用的命令就介绍到此,下篇文章介绍节点的监听

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年02月26日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 客户端命令行操作
    • 1.配置zookeeper的环境变量
      • 2.连接zookeeper
        • 3.数据操作
          • 3.1zookeeper的数据存储结构
          • 3.2节点的类型
          • 3.3命令说明
          • 3.4常用操作
      • zookeeper中的事件监听
        • 1.数据改变的监听
          • 2.子节点改变的监听
          相关产品与服务
          数据保险箱
          数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档