zookeeper的两大核心
文件系统
存储
进入zk的客户端:
zkCli.sh [zk: localhost:2181(CONNECTED) 0]
1)zk的文件系统 和linux的文件系统目录结构一样 从/开始的
2)zk的路径访问方式 只有绝对路径 没有相对路径
所有的路径访问从/开始
3)
zk中没有文件的概念 也没有目录的概念
只有节点的概念 节点Znode
Znode既有文件的功能 又有目录的功能
4)zk的Znode的分类:
从生命周期:
1)临时节点 EPHEMERAL
创建命令:create -e 节点名字(全路径的) 存储内容
临时节点只对当前客户端生效 当前客户端退出 临时节点失效
临时节点随着客户端的退出而删除的
2)永久节点
创建命令:create 节点名字(全路径的) 存储内容
默认创建的节点都是永久节点
永久节点对所有客户端生效
不会自动删除
要想删除 手动删除
按有无编号分:
1)有编号节点 SEQUENTIAL -s
永久有编号节点
命令:create -s 节点名字(全路径的) 存储内容
在创建的节点名称后添加一个编号 这个编号从0开始的
这个编号是由父节点维护的
这个编号顺序递增 不管节点是有编号还是无编号都会顺序递增
编号:记录当前父节点下的子节点个数 及子节点的创建顺序的
特点:重复创建相同名称的节点 因为自动添加编号
临时有编号节点:
创建命令:create -e -s 节点名字(全路径的) 存储内容
这个编号是不分有编号还是无编号的,
临时的还是永久的,
存在的还是删除的都会顺序递增
可以创建多次的
2)无编号节点
永久无编号节点
create 节点名字(全路径的)存储内容
临时无编号节点
create -e 节点名字(全路径的)存储内容
特点:没有编号 只能创建一次
5)临时节点不能有子节点
永久节点是可以有子节点的
有子节点的节点 一定是永久节点
6)对于zk来说他的Znode存储大小不要超过1M
最好不要超过1kb的数据
1)zk存储的只是核心信息 状态
2)zk来说 每一个Znode存储的数据越大 一致性越难保证
7)对于zk来说,有几个节点数据就会存储几份
每一个节点存储的数据一样的
8)可以对Znode添加监听
监听对象:Znode
监听机制:
用自己的监听机制 监听自己的文件系统
如果你对zk的文件系统中的某一个Znode感兴趣
就可以对这个Znode添加监听
监听事件的类型:
Znode创建 nodeCreated
Znode删除 nodeDeleted
Znode的数据变化 nodeDataChanged
Znode的子节点的变化 nodeChildrenChanged
监听的添加操作:
shell 命令最后 watch 代表添加了监听
ls/getChildren ---nodeChildrenChanged
stat path [watch]
get/getData path [watch] --- nodeDataChanged
exists(API)------ nodeCreated nodeDeleted
监听的触发操作:
ls/getChilren create delete
get/getData set
1)create
2)delete/rmr
3)set
注意:添加一次监听只能生效一次
想要再次生效 只能重新添加
shell:
zkCli.sh
help 查看所有的命令
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)创建节点
create [-s] [-e] path data
create path data
create -e path data
create -s path data
create -s -e path data
2)获取节点内容
get path(绝对路径)
3)修改节点内容
set path data
set /test00 "hello"
4)删除节点
delete path
只能删除空节点 删除没有子节点的节点
rmr path
rmr /test00
可以删除非空的节点 也可以删除空节点
5)连接zk
connect host:port
connect hadoop02:2181
6)查看历史操作命令
history
7)查看节点状态信息
stat path
cZxid = 0x300000005
节点的创建时间
ctime = Fri Oct 26 01:15:23 CST 2018
mZxid = 0x300000005
节点的修改时间
mtime = Fri Oct 26 01:15:23 CST 2018
pZxid = 0x30000000c
节点的版本信息
cversion = 4
dataVersion = 0
aclVersion = 0
节点的属性 永久的 还是 临时的 这个参数标识的
ephemeralOwner = 0x0
存储的数据长度
dataLength = 0
子节点的个数
numChildren = 4
解析:
1)ephemeralOwner
如果是永久节点 值=0x0
如果是临时节点 zk每次进入客户端的时候都会有一个当前客户端的sessionid
sessionid = 0x266ac28a1a50001 用于标识当前客户端的
如果是临时节点 这个值就是sessionid
ephemeralOwner = 0x266ac28a1a50001
2)Zxid 当前节点全局唯一id标识
全局性的顺序递增
id实际上标识 全局的事件提交顺序
cZxid:创建节点事件的id标识
mZxid:修改节点事件的id标识
pZxid:子节点变化的事件的id
上面的三个id无论哪一个事件发生 都是全局变化的
cZxid=00000002
mZxid=00000002
pZxid=00000002
修改节点:
cZxid=00000002
mZxid=00000003
pZxid=00000002
在/创建了3个节点
创建一个子节点:
cZxid=00000002
mZxid=00000003
pZxid=00000007
每次事件提交的时候 都是在全局的最大的id之上进行顺序递增的
zxid用于标识整个分布式集群中各个节点的数据版本 这个zxid越大
证明数据版本越新
API:
配置zk的开发环境 eclipse
eclipse上配置zk的可视化连接界面
1)解压zk的插件包
2)将插件包下的所有的jar包 放在eclipse的插件包的位置下
%ECLIPSE_HOME%\plugins
3)打开eclipse进行可视化配置
4)进入windowzhongshow view 找到zookeeper并双击打开
6)点击黄色图标,新建连接,添加zookeeper节点