zookeeper的文件系统、shell常用命令、及监听机制的shell命令

初识zookeeper

hadoop 存在分布式一致性。包括:
数据一致性: 集群中的每一个节点的配置文件保持一致。
状态一致性: namenode的存活状态一致。

一致性理论:
2000年的 CAP理论。在cap理论中,一致性是指强一致性。

C:consistency:一致性
A:Availability:可用性(高可用)
P:Partition:Tolerance分区容错性。

CAP 理论中,C和A是冲突的,不可实现的。

`
CAP 理论中,C和A是冲突的,不可实现的。
`

Base理论:

`
针对cap理论,c和a的折中。
base理论中,一致性指最终一致性。
高可用,是指基本可用。
`

一致性中,保证多个副本的一致性,多副本写入时,只能允许一个入口,这个入口就是 主 master,所以需要选主。
选主:paxos理论

`
paxos理论是一致性选主的理论。此理论来源于希腊的邦主选主。过半选举的机制。
paxos算法的最完美的实现:zookeeper 
其它的都是不完美实现。
`

zookeeper是一款成熟的分布式协调框架。

zookeeper的文件系统

文件系统:
  • 1)zk的文件系统的结构类似于linux的,从 / 开始
  • 2)zk的文件系统访问方式:绝对路径 (访问任何路径都要从 / 开始(类似于hdfs))
  • 3)zk中不存在目录的概念,也不存在文件的概念,只存在znode(节点)的概念。这里的znode既具有文件的功能,又具有目录的功能。
zookeeper中znode的分类:

按照节点类型,分为:

  • 1)永久节点
    create + 参数 + 路径 + 内容
    eg:create bd1906 “hello”
  • 2)临时节点
    创建: create + -e + path + data
    eg:create -e /test “test linshi”

注意:
1)临时节点只对当前客户端生效,只要当前客户端退出,则临时节点会自动删除。而永久节点则对所有客户端生效,不会自动删除。
2)临时节点不可以有子节点,永久节点可以。(有子节点的节点一定是永久节点)

按照有无编号,可以分为:

  • 1、有编号节点:
    创建: create -s path data
    在创建节点的时候,会自动分配一个编号,一个节点可以无限创建,这个编号是父节点维护的,从0开始顺序递增,但是在递增的过程中,无论父节点下的子节点是否有编号,都会递增(无编号会默默递增)。
  • 2、无编号节点
    只允许创建一次。(再次创建会报错)
各种类型节点创建方式:

各种znode的创建方式:

create path data  创建永久无编号节点
create -s path data 创建永久有编号节点
create -e path data 创建临时无编号节点
create -e -s path data 创建临时有编号节点

对于zk来说,znode存储的大小不要超过1m,最好不要超过1kb, 这样做的好处是:

  • 1)便于数据同步,速度快(zk中每一个节点存储的数据都是一致的,只要在一个节点进行操作,其他节点自动进行数据同步)
  • 2)减少存储,减少zk中每一个节点(机器)的压力。(对于zk来说,存储的数据的份数:有几个zk节点(机器),就存几份。)
  • 3)在zk中,是可以添加监听的,监听的对象只能是znode

zookeeper常用的 shell 操作命令

1、进入zookeeper的客户端:zkCli.sh
zkCli.sh

出现 [zk: localhost:2181(CONNECTED) 0]
即表示成功进入了客户端
2、查看帮助: help
[zk: localhost:2181(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 查看历史命令	 eg:history 10
        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 连接其他客户端	eg:connect hadoop02:2181
3、添加节点:create [-s] [-e] path data acl
create [-s] [-e] path data acl

eg:
[zk: localhost:2181(CONNECTED) 17] create /dd "this is dd"
Created /dd
3、查看节点内容: get path [watch]
get path [watch] 

eg:
[zk: localhost:2181(CONNECTED) 8] get /aa
aa的内容
cZxid = 0x59000004de
ctime = Mon Dec 02 10:51:10 CST 2019
mZxid = 0x9500000370
mtime = Sun Dec 29 06:06:42 CST 2019
pZxid = 0x8a00000048
cversion = 2
dataVersion = 22
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 11
numChildren = 0
4、查看子节点: ls path
ls path

eg:
[zk: localhost:2181(CONNECTED) 13] ls /bb
[cc]
5、修改节点内容:set path data
set path data 

eg: set /bb/cc "hello"
[zk: localhost:2181(CONNECTED) 14] set /bb/cc "hello"
cZxid = 0x950000038b
ctime = Sun Dec 29 06:37:22 CST 2019
mZxid = 0x950000038e
mtime = Sun Dec 29 06:44:19 CST 2019
pZxid = 0x950000038b
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0
6、删除节点:delete 、rmr
delete path 删除空节点(没有子节点的节点)
rmr path   可以级联删除非空节点
7、stat path: 查看节点状态信息
stat path

eg:
[zk: localhost:2181(CONNECTED) 0] stat /aa
cZxid = 0x1700000002
ctime = Wed Oct 09 14:20:34 CST 2019 创建时间
mZxid = 0x170000000d
mtime = Wed Oct 09 15:07:15 CST 2019 修改时间
pZxid = 0x170000000a
cversion = 3 创建时的版本编号
dataVersion = 1 数据版本
aclVersion = 0  权限版本
ephemeralOwner = 0x0  临时节点的拥有者
				如果是永久节点,值是0x0
				如果是临时节点,这里是临时节点的客户端的sessionId
dataLength = 9	存储的内容的长度(单位是byte)
numChildren = 3 子节点的个数

cZxid = 0x1700000002
mZxid = 0x170000000d
pZxid = 0x170000000a

cZxid ,mZxid,pZxid  全局的时间提交的顺序,是全局顺序递增的
cZxid 创建节点的事件id
mZxid 修改节点的事件id
pZxid 子节点变化的事件id
这3个id,共同标识,全局事件的提交顺序。
zk中各个节点(机器)上,哪一个节点的zxid越大,代表这个节点(机器)上的数据越新
8、退出zookeeper文件系统:quit
quit

[zk: localhost:2181(CONNECTED) 0] quit
Quitting...

zookeeper的监听机制

客户端注册监听它关心的目录节点,当目录节点发生变化数据改变、 节点删除、 子目录节点增加删除)时, ZooKeeper 会通知客户端。 监听机制保证 ZooKeeper 保存的任何的数据的任何改变都能快速的响应到监听了该节点的应用程序。

监听器的工作机制,其实是在客户端会专门创建一个监听线程,在本机的一个端口上等待
zk 集群发送过来事件。
注意:shell命令下,监听只生效一次。
在这里插入图片描述
1)监听的事件类型

  • NodeDataChanged 节点存储的内容是否发生变化
  • NodeDeleted 节点是否删除了
  • NodeCreated 节点是否被创建事件
  • NodeChildrenChanged 当前节点是否创建了子节点

2)添加监听(关注事件)

shell 命令下 watch 
ls path watch   ---> 子节点变化nodechildrenchanged 
get path watch ----> 节点内容变化   nodedatachanged
exists    --->   nodecreated  nodedeleted

3)触发监听

create 创建节点
delete rmr 删除节点
set path data 修改节点

zk的核心就是:用监听机制,监听文件系统。实现分布式数据一致性。
需要注意的是:监听只生效一次, 添加一次监听,只能生效一次 ,只能触发一次

监听测试

监听子节点变化
添加监听
ls path watch
	eg:ls /bb watch
	
触发监听:
  create /bb/aa " "

在客户端就会出现提示:
WATCHER:: 
WatchedEvent state: type:NodeChildrenChanged  path:/bb

watcher 就是监听器的意思。
监听内容变化
添加监听
	get path watch
	eg:get /aa watch

触发监听:
	set path data 
	eg:set /aa "tt"
	
NodeDataChanged
WATCHER::
WatchedEvent state:SyncConnected type:NodeDataChanged path:/aacZxid = 0x59000004de
监听删除节点
添加监听
ls path watch
	eg:ls /bb/cc watch
	
触发监听:
delete path
	eg:delete /bb/cc

在客户端出现提示:
WATCHER::
WatchedEvent state:SyncConnected type:NodeDeleted path:/bb/cc
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值