Zookeeper学习之路 (三)shell操作
Zookeeper的shell操作
Zookeeper命令工具
在启动Zookeeper服务之后,输入以下命令,连接到Zookeeper服务:
[hadoop@hadoop1 ~]$ zkCli.sh -server hadoop2:2181
[hadoop@hadoop1 ~]$ zkCli.sh -server hadoop2:2181
Connecting to hadoop2:2181
2018-03-21 19:55:53,744 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.10-39d3a4f269333c922ed3db283be479f9deacaa0f, built on 03/23/2017 10:13 GMT
2018-03-21 19:55:53,748 [myid:] - INFO [main:Environment@100] - Client environment:host.name=hadoop1
2018-03-21 19:55:53,749 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_73
2018-03-21 19:55:53,751 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation
2018-03-21 19:55:53,751 [myid:] - INFO [main:Environment@100] - Client environment:java.home=/usr/local/jdk1.8.0_73/jre
2018-03-21 19:55:53,751 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=/home/hadoop/apps/zookeeper-3.4.10/bin/../build/classes:/home/hadoop/apps/zookeeper-3.4.10/bin/../build/lib/*.jar:/home/hadoop/apps/zookeeper-3.4.10/bin/../lib/slf4j-log4j12-1.6.1.jar:/home/hadoop/apps/zookeeper-3.4.10/bin/../lib/slf4j-api-1.6.1.jar:/home/hadoop/apps/zookeeper-3.4.10/bin/../lib/netty-3.10.5.Final.jar:/home/hadoop/apps/zookeeper-3.4.10/bin/../lib/log4j-1.2.16.jar:/home/hadoop/apps/zookeeper-3.4.10/bin/../lib/jline-0.9.94.jar:/home/hadoop/apps/zookeeper-3.4.10/bin/../zookeeper-3.4.10.jar:/home/hadoop/apps/zookeeper-3.4.10/bin/../src/java/lib/*.jar:/home/hadoop/apps/zookeeper-3.4.10/bin/../conf::/usr/local/jdk1.8.0_73/lib:/usr/local/jdk1.8.0_73/jre/lib
2018-03-21 19:55:53,751 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2018-03-21 19:55:53,751 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
2018-03-21 19:55:53,751 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=<NA>
2018-03-21 19:55:53,752 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Linux
2018-03-21 19:55:53,752 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=amd64
2018-03-21 19:55:53,752 [myid:] - INFO [main:Environment@100] - Client environment:os.version=2.6.32-573.el6.x86_64
2018-03-21 19:55:53,752 [myid:] - INFO [main:Environment@100] - Client environment:user.name=hadoop
2018-03-21 19:55:53,752 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/home/hadoop
2018-03-21 19:55:53,752 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=/home/hadoop
2018-03-21 19:55:53,755 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=hadoop2:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@5c29bfd
Welcome to ZooKeeper!
2018-03-21 19:55:53,789 [myid:] - INFO [main-SendThread(hadoop2:2181):ClientCnxn$SendThread@1032] - Opening socket connection to server hadoop2/192.168.123.103:2181. Will not attempt to authenticate using SASL (unknown error)
JLine support is enabled
2018-03-21 19:55:53,931 [myid:] - INFO [main-SendThread(hadoop2:2181):ClientCnxn$SendThread@876] - Socket connection established to hadoop2/192.168.123.103:2181, initiating session
2018-03-21 19:55:53,977 [myid:] - INFO [main-SendThread(hadoop2:2181):ClientCnxn$SendThread@1299] - Session establishment complete on server hadoop2/192.168.123.103:2181, sessionid = 0x262486284b70000, negotiated timeout = 30000 WATCHER:: WatchedEvent state:SyncConnected type:None path:null
[zk: hadoop2:2181(CONNECTED) 0]
连接成功之后,系统会输出Zookeeper的相关环境及配置信息,并在屏幕输出“welcome to Zookeeper!”等信息。
输入help之后,屏幕会输出可用的Zookeeper命令,如下图所示
使用Zookeeper命令的简单操作步骤
(1) 使用ls命令查看当前Zookeeper中所包含的内容:ls /
[zk: hadoop2:2181(CONNECTED) 1] ls /
[zookeeper]
[zk: hadoop2:2181(CONNECTED) 2]
(2) 创建一个新的Znode节点"aa",以及和它相关字符,执行命令:create /aa "my first zk",默认是不带编号的
[zk: hadoop2:2181(CONNECTED) 2] create /aa "my first zk"
Created /aa
[zk: hadoop2:2181(CONNECTED) 3]
创建带编号的持久性节点"bb",
[zk: localhost:(CONNECTED) ] create -s /bb "bb"
Created /bb0000000001
[zk: localhost:(CONNECTED) ]
创建不带编号的临时节点"cc"
[zk: localhost:(CONNECTED) ] create -e /cc "cc"
Created /cc
[zk: localhost:(CONNECTED) ]
创建带编号的临时节点"dd"
[zk: localhost:(CONNECTED) ] create -s -e /dd "dd"
Created /dd0000000003
[zk: localhost:(CONNECTED) ]
(3) 再次使用ls命令来查看现在Zookeeper的中所包含的内容:ls /
[zk: localhost:2181(CONNECTED) 4] ls /
[cc, dd0000000003, zookeeper, bb0000000001]
[zk: localhost:2181(CONNECTED) 5]
此时看到,aa节点已经被创建。
关闭本次连接回话session,再重新打开一个连接
[zk: localhost:(CONNECTED) ] close
-- ::, [myid:] - INFO [main:ZooKeeper@] - Session: 0x1624c10e8d90000 closed
[zk: localhost:(CLOSED) ] -- ::, [myid:] - INFO [main-EventThread:ClientCnxn$EventThread@] - EventThread shut down for session: 0x1624c10e8d90000 [zk: localhost:(CLOSED) ] ls /
Not connected
[zk: localhost:(CLOSED) ] connect hadoop1:2181
重新查看,临时节点已经随着上一次的会话关闭自动删除了
[zk: hadoop1:(CONNECTED) ] ls /
[zookeeper, bb0000000001]
[zk: hadoop1:(CONNECTED) ]
(4) 使用get命令来确认第二步中所创建的Znode是否包含我们创建的字符串,执行命令:get /aa
[zk: hadoop2:2181(CONNECTED) 4] get /aa
my first zk
cZxid = 0x100000002
ctime = Wed Mar 21 20:01:02 CST 2018
mZxid = 0x100000002
mtime = Wed Mar 21 20:01:02 CST 2018
pZxid = 0x100000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 11
numChildren = 0
[zk: hadoop2:2181(CONNECTED) 5]
(5) 接下来通过set命令来对zk所关联的字符串进行设置,执行命令:set /aa haha123
[zk: hadoop2:2181(CONNECTED) 6] set /aa haha123
cZxid = 0x100000002
ctime = Wed Mar 21 20:01:02 CST 2018
mZxid = 0x100000004
mtime = Wed Mar 21 20:04:10 CST 2018
pZxid = 0x100000002
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 0
[zk: hadoop2:2181(CONNECTED) 7]
(6) 再次使用get命令来查看,上次修改的内容,执行命令:get /aa
[zk: hadoop2:2181(CONNECTED) 7] get /aa
haha123
cZxid = 0x100000002
ctime = Wed Mar 21 20:01:02 CST 2018
mZxid = 0x100000004
mtime = Wed Mar 21 20:04:10 CST 2018
pZxid = 0x100000002
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 0
[zk: hadoop2:2181(CONNECTED) 8]
(7) 下面我们将刚才创建的Znode删除,执行命令:delete /aa
[zk: hadoop2:2181(CONNECTED) 8] delete /aa
[zk: hadoop2:2181(CONNECTED) 9]
(8) 最后再次使用ls命令查看Zookeeper中的内容,执行命令:ls /
[zk: hadoop2:2181(CONNECTED) 9] ls /
[zookeeper]
[zk: hadoop2:2181(CONNECTED) 10]
经过验证,zk节点已经删除。
(9) 退出,执行命令:quit
[zk: hadoop2:2181(CONNECTED) 10] quit
Quitting...
2018-03-21 20:07:11,133 [myid:] - INFO [main:ZooKeeper@684] - Session: 0x262486284b70000 closed
2018-03-21 20:07:11,139 [myid:] - INFO [main-EventThread:ClientCnxn$EventThread@519] - EventThread shut down for session: 0x262486284b70000
[hadoop@hadoop1 ~]$
状态信息
查看一个文件的状态信息
[zk: localhost:(CONNECTED) ] stat /a
cZxid = 0x200000009
ctime = Thu Mar :: CST
mZxid = 0x200000009
mtime = Thu Mar :: CST
pZxid = 0x200000009
cversion =
dataVersion =
aclVersion =
ephemeralOwner = 0x0
dataLength =
numChildren =
[zk: localhost:(CONNECTED) ]
详细解释:
zxid: 一个事务编号,zookeeper集群内部的所有事务,都有一个全局的唯一的顺序的编号
它由两部分组成: 就是一个 64位的长整型 long
高32位: 用来标识leader关系是否改变,如 0x2
低32位: 用来做当前这个leader领导期间的全局的递增的事务编号,如 00000009
状态属性 | 说明 |
cZxid | 数据节点创建时的事务ID |
ctime | 数据节点创建时的时间 |
mZxid | 数据节点最后一次更新时的事务ID |
mtime | 数据节点最后一次更新时的时间 |
pZxid | 数据节点的子节点列表最后一次被修改(是子节点列表变更,而不是子节点内容变更)时的事务ID |
cversion | 子节点的版本号 |
dataVersion | 数据节点的版本号 |
aclVersion | 数据节点的ACL版本号 |
ephemeralOwner | 如果节点是临时节点,则表示创建该节点的会话的SessionID;如果节点是持久节点,则该属性值为0 |
dataLength | 数据内容的长度 |
numChildren | 数据节点当前的子节点个数 |
(1)修改节点a的数据,mZxid、dataVersion、dataLength 存储信息发生变化
[zk: localhost:(CONNECTED) ] set /a 'aaa'
cZxid = 0x200000009
ctime = Thu Mar :: CST
mZxid = 0x20000000a
mtime = Thu Mar :: CST
pZxid = 0x200000009
cversion =
dataVersion = 1
aclVersion =
ephemeralOwner = 0x0
dataLength = 3
numChildren =
[zk: localhost:(CONNECTED) ]
(2)创建新的节点b,状态信息都会发生变化,zxid的事物ID也会增加
[zk: localhost:(CONNECTED) ] stat /b
cZxid = 0x20000000b
ctime = Thu Mar :: CST
mZxid = 0x20000000b
mtime = Thu Mar :: CST
pZxid = 0x20000000b
cversion =
dataVersion =
aclVersion =
ephemeralOwner = 0x0
dataLength =
numChildren =
[zk: localhost:(CONNECTED) ]
(3)在a节点下面新增节点c,pZxid、cversion、numChildren 发生改变
[zk: localhost:(CONNECTED) ] create /a/c 'c'
Created /a/c
[zk: localhost:(CONNECTED) ] stat /a
cZxid = 0x200000009
ctime = Thu Mar :: CST
mZxid = 0x20000000a
mtime = Thu Mar :: CST
pZxid = 0x20000000c
cversion = 1
dataVersion =
aclVersion =
ephemeralOwner = 0x0
dataLength =
numChildren = 1
[zk: localhost:(CONNECTED) ]
(4)ephemeralOwner 持久性的节点信息是0x0临时的几点信息是本次会话的sessionid,如图
(5) 将leader干掉,此时第二台机器成为leader,重新创建一个文件y,此时发现czxid的前3位和之前发生变化,说明换了leader
[zk: localhost:(CONNECTED) ] create /y 'yy'
Created /y
[zk: localhost:(CONNECTED) ] stat /y
cZxid = 0x300000003
ctime = Thu Mar :: CST
mZxid = 0x300000003
mtime = Thu Mar :: CST
pZxid = 0x300000003
cversion =
dataVersion =
aclVersion =
ephemeralOwner = 0x0
dataLength =
numChildren =
[zk: localhost:(CONNECTED) ]
Zookeeper学习之路 (三)shell操作的更多相关文章
- 学习之路三十九:新手学习 - Windows API
来到了新公司,一开始就要做个程序去获取另外一个程序里的数据,哇,挑战性很大. 经过两周的学习,终于搞定,主要还是对Windows API有了更多的了解. 文中所有的消息常量,API,结构体都整理出来了 ...
- Redis——学习之路三(初识redis config配置)
我们先看看config 默认情况下系统是怎么配置的.在命令行中输入 config get *(如图) 默认情况下有61配置信息,每一个命令占两行,第一行为配置名称信息,第二行为配置的具体信息. ...
- Zookeeper学习之路 (一)初识
本文引用自 http://www.cnblogs.com/sunddenly/p/4033574.html 引言 Hadoop 集群当中 N 多的配置信息如何做到全局一致并且单点修改迅速响应到整个集群 ...
- HBase学习笔记——配置及Shell操作
1.HBase的配置 还是以前配置的集群,见:http://www.cnblogs.com/DarrenChan/p/6493373.html 我们约定:weekend03和weekend04放HMa ...
- ZooKeeper学习之路(四)—— Java 客户端 Apache Curator
一.基本依赖 Curator是Netflix公司开源的一个Zookeeper客户端,目前由Apache进行维护.与Zookeeper原生客户端相比,Curator的抽象层次更高,功能也更加丰富,是目前 ...
- 【php学习之路】字符串操作
无论学习那种语言,字符串操作都是必备的基础.学php的时候总是会不知不觉的与C#比较,用起来总觉得怪怪的没有那么顺手,有些命名也差别很大,再加上很多函数命名是简写形式不百度下还真不知道什 ...
- ZooKeeper学习之路(三)—— Zookeeper常用Shell命令
一.节点增删改查 1.1 启动服务和连接服务 # 启动服务 bin/zkServer.sh start #连接服务 不指定服务地址则默认连接到localhost:2181 zkCli.sh -serv ...
- Zookeeper学习笔记(三)——java客户端代码操作
Zookeeper客户端java代码操作 上篇博客记录了shell命令操作zookeeper集群的方式,这次尝试采用java代码来操作.通过查阅API,发现并不困难. 1. 首先获得客户端与服务器的连 ...
- zookeeper学习系列:三、利用zookeeper做选举和锁
之前只理解zk可以做命名,配置服务,现在学习下他怎么用作选举和锁,进一步还可构建master-slave模式的分布式系统. 为什么叫Zoo?“因为要协调的分布式系统是一个动物园”. ZooKeeper ...
随机推荐
- linux运维人员成长
原文地址:https://blog.csdn.net/kwame211/article/details/78059331 初级篇 linux运维人员常用工具拓扑详见: 1rsync工具 很多地方经常会 ...
- java中接口的定义
使用interface来定义一个接口.接口定义同类的定义类似,也是分为接口的声明和接口体,其中接口体由常量定义和方法定义两部分组成.定义接口的基本格式如下: [修饰符] interface 接口名 [ ...
- 03-Tomcat服务器
一.Java分类 JavaSE Java的标准版,一般用来开发桌面应用程序, 但是在开发桌面应用程序上相对VB,Delphi,VC++并没有什么优势. JavaEE 也就是Java Enterpris ...
- 设计模式之——外观or门面模式
1.概念 定义一个高层的统一的外观接口类,该接口用于客户端调用,和一个实现类用来包装子系统中多个类,客户端可以通过客户端完成对子系统的方法调用. 2.适用场景 2.1 代码移植,降低了现有系统的复杂度 ...
- UOJ#414. 【APIO2018】新家
传送门 首先二分答案 \(mid\),问题变成求区间 \([l-mid,r+mid]\) 在该年份的不同类型个数为 \(k\) 关于年份的限制可以离线下来 现在的问题就是区间数颜色,一个套路就是维护每 ...
- H5前端正则验证插件
最近学习了一个新的关于前端正则验证的插件,‘jQuery.validate.js ’ 要用这个插件 首先得有插件,下载jquery.validate.min.js 和jq文件并引入. 我把它简单的通俗 ...
- websocket协议及案例
WebSocket是一种用于在服务器与客户端之间实现高效的双向通信的机制.可以解决数据实时性要求比较高的应用,比如:在线聊天,在线教育,炒股或定位等. 一:websocket产生背景: 为了解决这种实 ...
- Struts22222
一,什么是框架? 所谓框架就是提供了一组统一的接口和编程方式的可以重用组件,同时我们可以在框架中扩充我们自己的特定逻辑. 二,MVC设计模式 将应用程序分为3个部分:模型 Model,视图View, ...
- css中小知识点总结
rgba:即rgb+a, a为图片透明度,a范围是0~1,越小就表示越透明 :hover 即鼠标悬停时改变样式,不仅仅能用在a元素上. <form>标签表示向浏览器提交表单,一般会包裹着输 ...
- IOS地理信息使用
概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个 ...